На этом шаге мы рассмотрим примеры использования некоторых из рассмотренных свойств и методов.
Исследуем содержание панели и некоторые свойства элементов управления. Если рассматривать меню, то его основное отличие от панели с кнопками состоит в том, что элементом управления в составе меню может быть как пункт меню, так и подменю со своими элементами управления и т. д.
Чтобы проанализировать свойства панели, используем свойства Count и Item() коллекции CommandBarConlrols, а также свойства Caption и TooltipText. Загрузим весь список кнопок и других элементов панели в объект TListBox с помощью следующей процедуры.
procedure TForm1.CheckListBox1Click(Sender: TObject); //Выбор панели управления и //загрузка списка элементов управления панели var i:integer; S:string; begin C.Item [CheckListBox1.ItemIndex+1].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex]; //Загрузка списка элементов управления панели ListBox1.Clear; CBCS:=C.Item[CheckListBox1.ItemIndex+1].Controls; for i:=1 to CBCS.Count do begin S:=CBCS.Item[i].Caption+'='+CBCS.Item[i].TooltipText; ListBox1.Items.Add (S); end; end;
Затем, перемещаясь по списку элементов управления для выбранной панели, загруженному в компонент ListBox1, считаем некоторые их свойства.
procedure TForm1.ListBox1Click(Sender: TObject); //Запомнить выбранный элемент и вывести его свойства begin CBC:=CBCS.Item[ListBox1.ItemIndex+1]; CheckBox1.Checked:=CBC.Visible; Edit2.Text:=CBC.DescriptionText; Edit3.Text:=CBC.HelpFile+' |'+IntToStr(CBC.HelpContextID)+'|'; end;
На рисунке 1 показан результат выполнения представленных процедур. Правый список (компонент ListBox1), расположенный в форме нашего приложения, заполнен названиями элементов управления панели Форматирование. При перемещении по этому списку в полях формы, расположенных ниже списка, для выбранного элемента управления отображаются назначение и ссылка на файл помощи.
Рис.1. Состав панели Форматирование
Как видно из рисунка 1, переходя от одного элемента управления к другому, мы можем получать и изменять их свойства. Для этого достаточно загрузить в переменную типа Variant ссылку на элемент Item(i:Integer), например, как это выполнено в следующем операторе:
CBC:=CBCS.Item[ListBox1.ItemIndex+1];
Далее, работая со ссылкой, мы получаем доступ к различным свойствам выбранного элемента управления. В качестве примера сделаем невидимой выбранную кнопку, изменим ее надпись (значение свойства Caption) и запустим на выполнение команду, связанную с данной кнопкой.
//Управление свойствами кнопки procedure TForm1.CheckBox1Click(Sender: TObject); //Видимость/невидимость элемента управления begin CBC.Visible:=CheckBox1.Checked; end; procedure TForm1.Button3Click(Sender: TObject); //Изменение надписи на кнопке begin CBC.Caption:=Edit1.Text; end; procedure TForm1.Button4Click(Sender: TObject); //Выполнение действия begin CBC.Execute; end;
Используя последнюю процедуру, можно запускать макросы, связанные с кнопками. Для этого удобнее использовать пользовательские, временные панели и элементы управления, создание которых будет рассмотрено далее.
В заключение приведем полный текст приложения.
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; Label2: TLabel; Edit1: TEdit; Label3: TLabel; Edit2: TEdit; Label4: TLabel; Label5: TLabel; Edit3: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure CheckListBox1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E: Variant; C: Variant; CBC,CBCS: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Excel и его визуализация begin E:=CreateOleObject('Excel.Application'); E.Visible:=True; end; procedure TForm1.Button2Click(Sender: TObject); //Список элементов коллекции панелей и меню var i:integer; S:string; begin C := E.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); //Выбор панели управления и //загрузка списка элементов управления панели var i:integer; S:string; begin C.Item [CheckListBox1.ItemIndex+1].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex]; //Загрузка списка элементов управления панели ListBox1.Clear; CBCS:=C.Item[CheckListBox1.ItemIndex+1].Controls; for i:=1 to CBCS.Count do begin S:=CBCS.Item[i].Caption+'='+CBCS.Item[i].TooltipText; ListBox1.Items.Add (S); end; end; procedure TForm1.ListBox1Click(Sender: TObject); //Запомнить выбранный элемент и вывести его свойства begin CBC:=CBCS.Item[ListBox1.ItemIndex+1]; CheckBox1.Checked:=CBC.Visible; Edit2.Text:=CBC.DescriptionText; Edit3.Text:=CBC.HelpFile+' |'+IntToStr(CBC.HelpContextID)+'|'; end; procedure TForm1.CheckBox1Click(Sender: TObject); //Видимость/невидимость элемента управления begin CBC.Visible:=CheckBox1.Checked; end; procedure TForm1.Button3Click(Sender: TObject); //Изменение надписи на кнопке begin CBC.Caption:=Edit1.Text; end; procedure TForm1.Button4Click(Sender: TObject); //Выполнение действия begin CBC.Execute; end; end.
На следующем шаге мы рассмотрим особенности главного меню.