На этом шаге мы рассмотрим алгоритм создания новой кнопки.
Все элементы управления любой панели собраны в коллекцию Controls. Данная коллекция не только объединяет элементы и их свойства, но и обладает методами, позволяющими создавать или удалять элементы управления. Рассмотрим два метода коллекции. Метод Add - создает новый элемент, метод Delete - удаляет выбранный элемент. Причем метод Delete принадлежит элементу коллекции, а не самой коллекции (как метод Add) и его нельзя применить к стандартным элементам коллекции, а только к пользовательским.
Рассмотрим синтаксис вызова метода Add. В справочной системе он выглядит так:
Add(Type, ID, Parameter, Before, Temporary);
Возможные типы создаваемых объектов указаны в таблице 1.
Константа | Значение | Тип создаваемого объекта |
---|---|---|
msoControlButton | 1 | Кнопка |
msoControlEdit | 2 | Поле ввода |
msoControlDropdown | 3 | Раскрывающийся список |
msoControlComboBox | 4 | Комбинированный список |
msoControlPopup | 10 | Элемент меню |
Создадим обычную кнопку на панели Стандартная. Используем метод Add, первый аргумент которого (Туре) равен msoControlButton, а второй (ID) - единице. Установим значение надписи, задав в свойстве Caption текст, выберем значок (свойство FaceId) и стиль кнопки (отображение и значка, и надписи). Вот текст процедуры:
procedure TForm1.Button2Click(Sender: TObject); //Создание кнопки const msoControlButton=1; msoButtonIconAndCaption=3; begin BTN:=W.CommandBars.Item['standard'].Controls.Add( Type:=msoControlButton, ID:=1); BTN.Caption:='Простая кнопка'; BTN.Style:= msoButtonIconAndCaption; BTN.FaceId:=SpinEdit1.Value; end;
Результат ее выполнения изображен на рисунке 1.
Рис.1. Результат работы приложения
Приведем полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, CheckLst, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; SpinEdit1: TSpinEdit; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E: Variant; BTN: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Excel и его визуализация begin E:=CreateOleObject('Excel.Application'); E.Visible:=True; end; procedure TForm1.Button2Click(Sender: TObject); //Создание кнопки const msoControlButton=1; msoButtonIconAndCaption=3; begin BTN:=E.CommandBars.Item['standard'].Controls.Add( Type:=msoControlButton, ID:=1); BTN.Caption:='Простая кнопка'; BTN.Style:=msoButtonIconAndCaption; BTN.FaceId:=SpinEdit1.Value; end; procedure TForm1.SpinEdit1Change(Sender: TObject); //Изменение пиктограммы кнопки begin BTN.FaceId:=SpinEdit1.Value; end; end.
Изменим стиль кнопки (отображение только значка или надписи), записав в свойство msButton.Style константу msoButtonIcon или msoButtonCaption. Соответственно получаем результат, представленный на рисунках 2 и 3.
Рис.2. Свойство msButton.Style имеет значение msoButtonIcon
Рис.3. Свойство msButton.Style имеет значение msoButtonCaption
В заключение перечислим возможные значения свойства msButton.Style.
Константа | Значение |
---|---|
msoButtonAutomatic | 0 |
msoButtonIcon | 1 |
msoButtonCaption | 2 |
msoButtonIconAndCaption | 3 |
msoButtonIconAndWrapCaption | 7 |
msoButtonIconAndCaptionBelow | 11 |
msoButtonWrapCaption | 14 |
msoButtonIconAndWrapCaptionBelow | 15 |
На следующем шаге мы закончим изучение этого вопроса.