Главное меню

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

   
В отличие от панели инструментов, главное меню и его элементы имеют несколько иные свойства, основным отличием
является возможность для каждого элемента меню содержать свою коллекцию элементов. Проще говоря, каждый
элемент меню может содержать подменю, элементы которого также могут содержать свое подменю. Таким образом,
меню имеет древовидную структуру. В этом случае доступ к любым элементам обеспечивается посредством элементов
коллекций Controls, принадлежащих индивидуально каждому элементу меню. На рисунке 1 представлен пример
объектной модели меню.


Рис.1. Объектная модель главного меню

   
Используя коллекции Controls и методы элементов этих коллекций Execute и SetFocus, можно
развернуть главное меню примерно так, как показано на рисунке 2.


Рис.2. Анализ объекта Главное меню

   
Из рисунка 2 понятно, что мы раскрываем подменю (дочерний набор элементов меню), используя свойства и методы
родительских объектов, которым принадлежат коллекции Controls (раскрываемое подменю). Метод Execute запускает команду,
связанную с данным элементом меню, а если с этим элементом связано подменю, то данная команда раскрывает его.
Метод SetFocus устанавливает фокус на данный элемент меню.

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

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    Label1: TLabel;
    CheckBox1: TCheckBox;
    Button3: TButton;
    Button4: TButton;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Button5: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E: Variant;
  MM,MI: Variant;
  Kol:Integer;
{$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
  if Kol=0 then
    begin
      MM:=E.CommandBars.Item['WorkSheet Menu bar'];
      Kol:=Kol+1;
    end
  else MM:=MI;
  ListBox1.Clear;
  for i:=1 to MM.Controls.Count do
  begin
    S:=MM.Controls.Item[i].Caption+' = '+ MM.Controls.Item[i].TooltipText;
    ListBox1.Items.Add(S);
  end;
  MI:=MM.Controls.Item[1];
end;

procedure TForm1.Button4Click(Sender: TObject);
//Выполнение действия
begin
  MI.Execute;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Показать
begin
  MI.SetFocus;
end;


procedure TForm1.ListBox1Click(Sender: TObject);
//Запомнить выбранный элемент и вывести его свойства
begin
   MI:=MM.Controls.Item[ListBox1.ItemIndex+1];
   CheckBox1.Checked:=MI.Visible;
   Edit2.Text:=MI.DescriptionText;
   Memo1.Lines.Text:=MI.HelpFile+' |'+IntToStr(MI.HelpContextID)+'|';
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Видимость/невидимость элемента управления
begin
  MI.Visible:=CheckBox1.Checked;
end;

procedure TForm1.FormCreate(Sender: TObject);
//Количество обращений к форме
begin
  Kol:=0;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Кнопка "Открыть"
begin
  Button2Click(Self);
end;

end.

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

   
От исследования существующих элементов меню и элементов управления на обычных панелях перейдем к созданию
собственных элементов управления.

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



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

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