На этом шаге мы рассмотрим создание панелей.
Для создания пользовательской панели используем метод 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.
Мы исследовали общие свойства панели, одинаково присущие как панелям с кнопками, так и меню. Чтобы понять отличия, необходимо рассмотреть содержание самих панелей.
На следующем шаге мы рассмотрим элементы управления.