Шаг 105.
Автоматизация Microsoft Word. Программирование свойств MS Word. Создание пользовательской панели или меню

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

    Для создания пользовательской панели используем метод Add коллекции CommandBars. У этого метода есть несколько аргументов. Синтаксис вызова метода Add:

    Add(Name, Position, MenuBar, Temporary);

где

    Используя данные аргументы и их комбинации, мы можем как создать обычную панель с кнопками или меню, так и заменить существующее главное меню приложения Word. Любой из создаваемых компонентов коллекции CommandBars может быть создан как временный объект (на время одного сеанса работы приложения) или как постоянный объект. Рассмотрим создание новой панели в приложениях Delphi на примере следующей процедуры.

procedure TForm1.Button8Click(Sender: TObject);
//Создание пользовательской панели
const msoBarFloating=4;
var
  CB: Variant;
begin
  CB:=W.CommandBars.Add('Пользовательская панель',
        msoBarFloating, False, True);
  CB.Enabled:=True;
  CB.Visible:=True;
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;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    CheckBox1: TCheckBox;
    Button8: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure CheckListBox1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button8Click(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;

procedure TForm1.Button3Click(Sender: TObject);
//Перемещение панели вверх
begin
  C.Item[CheckListBox1.ItemIndex+1].Top:=
    C.Item[CheckListBox1.ItemIndex+1].Top-10;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Перемещение панели вниз
begin
  C.Item[CheckListBox1.ItemIndex+1].Top:=
    C.Item[CheckListBox1.ItemIndex+1].Top+10;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Перемещение панели влево
begin
  C.Item[CheckListBox1.ItemIndex+1].Left:=
    C.Item[CheckListBox1.ItemIndex+1].Left-10;
end;

procedure TForm1.Button6Click(Sender: TObject);
//Перемещение панели вправо
begin
  C.Item[CheckListBox1.ItemIndex+1].Left:=
    C.Item[CheckListBox1.ItemIndex+1].Left+10;
end;

procedure TForm1.Button7Click(Sender: TObject);
//Отображение панели "Цвет заливки"
begin
  C.Item['Fill Color'].Visible:=True;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Отключение панелей управления
var
  i: Integer;
begin
  for i:=1  to C.Count do
    C.Item[i].Enabled:=CheckBox1.Checked;
end;

procedure TForm1.Button8Click(Sender: TObject);
//Создание пользовательской панели
const msoBarFloating=4;
var
  CB: Variant;
begin
  CB:=W.CommandBars.Add('Пользовательская панель',
        msoBarFloating, False, True);
  CB.Enabled:=True;
  CB.Visible:=True;
end;

end.
Текст этого приложения можно взять здесь (8,1 Кб).

    Мы исследовали общие свойства панели, одинаково присущие как панелям с кнопками, так и меню. Чтобы понять отличия, необходимо рассмотреть содержание самих панелей.

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




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