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

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

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

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

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




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