Элементы коллекции CommandBars (продолжение)

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

   
Рассмотрим свойства коллекции, отображающие состояние элементов управления, - ActionControl и
ActiveMenuBar. Они являются ссылками на объекты-элементы коллекции и позволяют определить, какой элемент
панели активен (т. е. какая кнопка запустила на выполнение команду) и какая панель, содержащая меню, активна в
настоящее время. Далее представлен исходный текст процедуры, которая возвращает и отображает имя панели, на
которой размещено активное меню.

procedure TForm1.Button2Click(Sender: TObject);
//Получение названия активного меню
var
  S:String;
begin
  S:=E.CommandBars.ActiveMenuBar.Name;
  MessageBox(handle,PChar(S),'', 0);
end;

   
Коллекция CommandBars также включает в себя список панелей управления, доступ к которым осуществляется
с помощью метода Item(i), где i - индекс или имя панели. Этот метод возвращает ссылку на элемент
коллекции.

   
Получим список всех элементов коллекции CommandBars. Для этого, используя свойство Count коллекции
и свойство Name элемента коллекции, загрузим список элементов в объект типа TCheckListBox (список с
флажками). Свойство Name имеет строковый тип и представляет собой имя элемента. Его можно использовать
для доступа к любому элементу коллекции так же, как индекс, имеющий числовой тип. Рассмотрим следующую процедуру.

procedure TForm1.Button3Click(Sender: TObject);
//Получение списка панелей
var
  i:Integer;
  S:String;
begin
  for i:=1 to E.CommandBars.Count do
  begin
   S:=E.CommandBars.Item[i].Name+' = '+E.CommandBars.Item[i].NameLocal;
   CheckListBox1.Items.Add (S);
   CheckListBox1.Checked[i-1]:=E.CommandBars.Item[i].Visible;
  end;
end;

   
Данная процедура, последовательно перебирая все элементы коллекции, загружает их имена в объект CheckListBox1.

   
После этого можно загрузить значения двух свойств элемента коллекции:

  • NameLocal - определяет имя, отображаемое в заголовке панели, которое соответствует национальной версии
    Excel (в данном случае - русскоязычной версии);
  • Visible - определяет режим отображения элемента в окне Excel.

   
Далее, после загрузки, перемещаясь по списку имен загруженных в CheckListBox1 элементов, можно получить и
изменить значения некоторых свойств выбранной панели. Можно использовать и другие свойства, например
Position, Left, Top, Width, Height:Integer (положение и размеры панели) и RowIndex:Integer (номер строки,
которую занимает панель, когда панели собраны в какой-либо части главного окна). Если панель содержит кнопки или
другие элементы управления, то свойство BuiltIn: Boolean находится в состоянии True, иначе - в состоянии
False. Context:String - свойство панели, которое содержит строку со ссылкой на файл шаблона. Свойство
Protection:Integer определяет режим зашиты панели от изменений со стороны пользователя.

   
Рассмотрим исходный текст процедуры, позволяющей скрывать/отображать выбранные панели с помощью свойства Visible панели.

procedure TForm1.CheckListBox1Click(Sender: TObject);
//Выбор панели элементов управления и задание ее отображения
begin
  try
    E.CommandBars.Item[CheckListBox1.ItemIndex+1].Visible:=
       CheckListBox1.Checked[CheckListBox1.ItemIndex];
  except
    CheckListBox1.Checked[CheckListBox1.ItemIndex]:=
      not CheckListBox1.Checked[CheckListBox1.ItemIndex];
    MessageBox(handle,'Ошибка изменения свойства Visible!','Внимание!',0);
  end;
end;

   
Обработка исключительных ситуаций позволяет управлять значением свойства Checked в случаях возникновения ошибок.
На рисунке 1 представлена форма, которая отображает список элементов коллекции CommandBars главного
окна приложения Excel и позволяет изменять положение панелей управления, выбранных в списке.

   
Для управления положением панели предназначено свойство Position. Оно имеет тип Integer, может
принимать одно из нескольких значений констант и определяет положение панели в главном окне редактора Excel.
Панели могут располагаться вдоль верхней, нижней, левой или правой стороны этого окна, а также в центральной части
окна. В таблице 1 представлены константы, соответствующие различным положениям панели в главном окне Excel.

Таблица 1. Возможные положения панели

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

   
Для изменения положения панели достаточно в свойство Position записать то или иное значение, указанное в
таблице 1, например, с помощью следующей процедуры.

procedure TForm1.ComboBox1Click(Sender: TObject);
//Изменение положения панели
begin
  try
    E.CommandBars.Item[CheckListBox1.ItemIndex+1].Position:=
      ComboBox1.ItemIndex;
  except
    ComboBox1.ItemIndex:=
      E.CommandBars.Item[CheckListBox1.ItemIndex+1].Position;
  end;
end;

   
Обратите внимание на то, что в этой процедуре используется обработка исключительной ситуации. Это необходимо в тех
случаях, когда положение панели не может быть изменено. В таких случаях состояние объекта Position будет
восстановлено в первоначальное состояние. Используя эту процедуру, изменим, положение панели Стандартная
и поместим ее вдоль левой стороны главного окна (рисунок 1).


Рис.1. Изменение положения панели Стандартная

   
Приведем полный текст приложения.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, CheckLst;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    CheckListBox1: TCheckListBox;
    Button2: TButton;
    Label2: TLabel;
    ComboBox1: TComboBox;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ComboBox1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure CheckListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  E:variant;

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и отображение окна
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;


procedure TForm1.Button2Click(Sender: TObject);
//Получение названия активного меню
var
  S:String;
begin
  S:=E.CommandBars.ActiveMenuBar.Name;
  MessageBox(handle,PChar(S),'', 0);
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
//Изменение положения панели
begin
  try
    E.CommandBars.Item[CheckListBox1.ItemIndex+1].Position:=
      ComboBox1.ItemIndex;
  except
    ComboBox1.ItemIndex:=
      E.CommandBars.Item[CheckListBox1.ItemIndex+1].Position;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Получение списка панелей
var
  i:Integer;
  S:String;
begin
  for i:=1 to E.CommandBars.Count do
  begin
   S:=E.CommandBars.Item[i].Name+' = '+E.CommandBars.Item[i].NameLocal;
   CheckListBox1.Items.Add (S);
   CheckListBox1.Checked[i-1]:=E.CommandBars.Item[i].Visible;
  end;
end;

procedure TForm1.CheckListBox1Click(Sender: TObject);
//Выбор панели элементов управления и задание ее отображения
begin
  try
    E.CommandBars.Item[CheckListBox1.ItemIndex+1].Visible:=
       CheckListBox1.Checked[CheckListBox1.ItemIndex];
  except
    CheckListBox1.Checked[CheckListBox1.ItemIndex]:=
      not CheckListBox1.Checked[CheckListBox1.ItemIndex];
    MessageBox(handle,'Ошибка изменения свойства Visible!','Внимание!',0);
  end;
end;

end.

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий