На этом шаге мы рассмотрим пример использования свойств элементов управления.
Исследуем содержание панели и некоторые свойства элементов управления. Если рассматривать меню, то его основное отличие от панели с кнопками состоит в том, что элементом управления в составе меню может быть как пункт меню, так и подменю со своими элементами управления и т.д.
Чтобы проанализировать свойства панели, используем свойства Count и Item() коллекции Controls, а также свойства Caption и TooltipText. Загрузим весь список кнопок и других элементов управления панели в объект ListBox с помощью следующей процедуры.
procedure TForm1.CheckListBox1Click(Sender: TObject); //Выбор панели управления, изменение ее свойства Visible и //загрузка списка элементов управления панели var i:integer; S:string; begin C.Item [CheckListBox1.ItemIndex+1].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex]; //Загрузка списка элементов управления панели ListBox1.Clear; MYCONTROLS:=C.Item[CheckListBox1.ItemIndex+1].CONTROLS; for i:=1 to MYCONTROLS.Count do begin S:=MYCONTROLS.Item[i].Caption+'='+MYCONTROLS.Item[i].TooltipText; ListBox1.Items.Add (S); end; MYCONTROL:=MYCONTROLS.Item[1]; end;
Переходя от одного элемента управления к другому, мы можем получать и изменять их свойства. Для этого достаточно загрузить в переменную типа variant ссылку на элемент Item(), например, как в следующем операторе:
MYCONTROL:=MYCONTROLS.Item[ListBox1.ItemIndex+l];
Далее, работая со ссылкой, мы получаем доступ к различным свойствам выбранного элемента управления. В качестве примера сделаем невидимой выбранную кнопку, изменим ее надпись (свойство Caption) и запустим на выполнение команду, связанную с данной кнопкой.
procedure TForm1.CheckBox1Click(Sender: TObject); //Видимость/невидимость элемента управления begin MYCONTROL.Visible:=CheckBox1.Checked; end; procedure TForm1.Button3Click(Sender: TObject); //Изменение надписи на кнопке begin MYCONTROL.Caption:='Новая кнопка'; end; procedure TForm1.Button4Click(Sender: TObject); //Выполнение действия begin MYCONTROL.Execute; end;
Результат работы приложения изображен на рисунке 1:
Рис.1. Результат работы приложения (кнопка Создать невидима)
Вот полный текст приложения:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, CheckLst; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; CheckListBox1: TCheckListBox; ListBox1: TListBox; Label1: TLabel; CheckBox1: TCheckBox; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure CheckListBox1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W: Variant; C: Variant; MYCONTROL,MYCONTROLS: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Word и его визуализация begin W:=CreateOleObject('Word.Application'); W.Visible:=True; end; procedure TForm1.Button2Click(Sender: TObject); //Список элементов коллекции панелей и меню var i:integer; S:string; begin C := W.CommandBars; for i:=1 to C.Count do begin S:=C.Item[i].Name+' = '+ C.Item[i].NameLocal; CheckListBox1.Items.Add (S); CheckListBox1.Checked[i-1]:=C.Item[i].Visible; end; end; procedure TForm1.CheckListBox1Click(Sender: TObject); //Выбор панели управления, изменение ее свойства Visible и //загрузка списка элементов управления панели var i:integer; S:string; begin C.Item [CheckListBox1.ItemIndex+1].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex]; //Загрузка списка элементов управления панели ListBox1.Clear; MYCONTROLS:=C.Item[CheckListBox1.ItemIndex+1].CONTROLS; for i:=1 to MYCONTROLS.Count do begin S:=MYCONTROLS.Item[i].Caption+'='+MYCONTROLS.Item[i].TooltipText; ListBox1.Items.Add (S); end; MYCONTROL:=MYCONTROLS.Item[1]; end; procedure TForm1.CheckBox1Click(Sender: TObject); //Видимость/невидимость элемента управления begin MYCONTROL.Visible:=CheckBox1.Checked; end; procedure TForm1.Button3Click(Sender: TObject); //Изменение надписи на кнопке begin MYCONTROL.Caption:='Новая кнопка'; end; procedure TForm1.Button4Click(Sender: TObject); //Выполнение действия begin MYCONTROL.Execute; end; end.
На следующем шаге мы рассмотрим главное меню.