На этом шаге мы рассмотрим отображение и расположение элементов коллекции CommandBars.
Для начала получим список всех элементов, входящих в коллекцию CommandBars. Для этого, используя свойство Count коллекции и свойство элемента Name, загрузим список элементов в объект типа TCheckListBox (прокручиваемый список с флажками). Свойство Name имеет строковый тип и представляет собой имя элемента. Его можно использовать для доступа к любому элементу коллекции аналогично индексу, имеющему числовой тип. Рассмотрим следующий фрагмент исходного текста в Delphi.
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;
Данная процедура, последовательно перебирая все элементы коллекции, загружает их имена в объект CheckListBox1. Дополнительно загружаются значения свойств NameLocal (имя, отображаемое в заголовке панели и соответствующее национальной версии Word, в данном случае - русскоязычной) и Visible (режим отображения элемента в окне Word). Далее, перемещаясь по списку имен загруженных в CheckListBox1 элементов, можно получить или изменить значения других свойств выбранной панели. Полезны, например, свойства:
С целью изучения некоторых из этих свойств рассмотрим следующий фрагмент программы, который представляет собой процедуру обработки для объекта CheckListBox1.
procedure TForm1.CheckListBox1Click(Sender: TObject); //Выбор панели управления и изменение ее свойства Visible begin C.Item [CheckListBox1.ItemIndex+1].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex]; end; procedure TForm1.ComboBox1Change(Sender: TObject); //Изменение расположения панели begin C.Item[CheckListBox1.ItemIndex+1].Position:= ComboBox1.ItemIndex; end;
Результат работы приложения изображен на рисунке 1. В данном случае для панели Стандартная свойство Position имеет значение msoBarLeft (0).
Рис.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; ComboBox1: TComboBox; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure CheckListBox1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W: Variant; C: 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 begin C.Item [CheckListBox1.ItemIndex+1].Visible := CheckListBox1.Checked[CheckListBox1.ItemIndex]; end; procedure TForm1.ComboBox1Change(Sender: TObject); //Изменение расположения панели begin C.Item[CheckListBox1.ItemIndex+1].Position:= ComboBox1.ItemIndex; end; end.
На следующем шаге мы продолжим изучение этого вопроса.