Шаг 102.
Автоматизация Microsoft Word. Программирование свойств MS Word. Элементы коллекции CommandBars

    На этом шаге мы рассмотрим отображение и расположение элементов коллекции 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.
Текст этого приложения можно взять здесь (6,5 Кб).

    На следующем шаге мы продолжим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг