Шаг 107.
Автоматизация Microsoft Word. Программирование свойств MS Word. Элементы управления и их свойства (окончание)

    На этом шаге мы рассмотрим пример использования свойств элементов управления.

    Исследуем содержание панели и некоторые свойства элементов управления. Если рассматривать меню, то его основное отличие от панели с кнопками состоит в том, что элементом управления в составе меню может быть как пункт меню, так и подменю со своими элементами управления и т.д.

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

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




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