Шаг 103.
Автоматизация Microsoft Word. Программирование свойств MS Word. Элементы коллекции CommandBars (продолжение)

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

    Когда панель находится в центре как самостоятельное окно, ее положение можно изменить - как по вертикали, так и по горизонтали. Для этого достаточно изменить значения свойств Left и Тор. Следующая процедура позволяет смещать панель вправо.

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

    Результат выполнения приложения на рисунке 1.


Рис.1. Смещение положения панели

    Нужно отметить, что не все панели доступны для изменений их свойств. Некоторые панели не могут находиться в главном окне и располагаются в других окнах, например в окне просмотра печати. Изменение их свойств вызовет ошибку выполнения. Но большинство панелей все же доступны для изменения их свойств. В качестве примера можно отобразить некоторые панели в главном окне и придать им новое расположение. Рассмотрим процедуру, отображающую панель Цвет заливки.

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

    В результате получим панель, представленную на рисунке 2.


Рис.2. Открываем панель Цвет заливки

    Если попытаться изменить положение панели Цвет заливки, т. е. пристыковать к одной из сторон главного окна, то результат будет отрицательным, т. к. тип этой панели не предусматривает таких изменений. Тип определяется при создании панели, для стандартных панелей изменить его нельзя; также к этим панелям нельзя применять метод Delete; есть и другие ограничения. Если тип панели позволяет, то ее расположение можно изменить, например, пристыковав к одной из сторон главного окна. Для этого свойству Position объекта "панель" нужно присвоить одно из значений, указанных в таблице 1.

Таблица 1. Значение свойства Position
Константа Значение Описание
msoBarLeft 0 Панель с кнопками, расположенная вдоль левой стороны главного окна
msoBarTop 1 Панель с кнопками, расположенная вдоль верхней стороны главного окна
msoBarRight 2 Панель с кнопками, расположенная вдоль правой стороны главного окна
msoBarBottom 3 Панель с кнопками, расположенная вдоль нижней стороны главного окна
msoBarFloating 4 Отдельная панель в центральной части главного окна экрана
msoBarPopup 5 Всплывающее меню
msoBarMenuBar 6 Системное меню

    В заключение приведем полный текст приложения:

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;
    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);
  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;

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

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




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