Создание элементов меню во время выполнения программы

 

Как и все компоненты коллекции VCL, пункт меню вооружен своим конструктором и деструктором. Эти методы выполняют задачи по созданию и уничтожению элемента меню:

constructorCreate(AOwner: TComponent); override;

destructorDestroy; override;

 

При создании нового экземпляра класса TMenuItem конструктор делает пункт меню видимым (Visible=true) и включенным (Enabled=True). В качестве владельца (AOwner) нового элемента TMenuItem следует назначать пункт меню, к которому мы рассчитываем подключить новый элемент. Операция присоединения нового пункта меню осуществляется одной из следующих функций:

procedureAdd(Item: TMenuItem); overload;

procedureAdd(constAItems: array ofTMenuItem); overload;

procedureInsert(Index: Integer; Item: TMenuItem);

 

Первые два метода перегружаемые и поэтому называются одинаково – Add().

Разница между ними в том, что первый добавляет только один элемент Item,

а второй способен подключить целый массив пунктов меню AItems. Если методы Add() присоединяют новые пункты меню к концу списка, то метод Insert() вставит новый пункт меню Item в позицию, определяемую параметром Index.

В качестве индексов группировки старайтесь не использовать значения 1, 3 и 5. Эти значения применяются при слиянии меню приложения и серверов OLE-объектов. Впрочем, если в приложении не планируется работа с OLE, то можно не обращать внимания на это ограничение. Подробнее о технологии OLE 2.0 мы поговорим в главе 26 «Связывание и внедрение объектов – технология OLE».

Допустим, что в нашем проекте существует некий пункт меню с именем miMenuItem. Тогда простейший пример создания нового пункта меню и присоединения его к пункту miMenuItem программным способом будет выглядеть примерно так:

procedureTForm1.miFileClick(Sender: TObject);

varmi:TMenuItem;

Begin

mi:=TMenuItem.Create(miMenuItem); //создание нового пункта меню mi

mi.Caption:='Новый пункт меню'; //назначение заголовка этому пункту

miMenuItem.Add(mi); //присоединение нового пункта меню к miMenuItem

end;

 

А теперь реализуем пример посложнее. Наше приложение будет создавать

три новых пункта меню и назначать им обработчики события OnClick(). Начните новый пустой проект и разместите на нем всего один компонент – главное меню. В свою очередь в главном меню определите один-единственный пункт меню с именем miMenuItem. В секции частных объявлений проекта (private) опишите процедуру NewMenuClick(). Она будет выполнять роль обработчика события OnClick() для новых пунктов меню. Сами пункты меню создаются при вызове процедуры OnCreate() главной формы проекта. Все остальное вы найдете в следующем листинге:

unitUnit1;

Interface

usesWindows, Graphics, Controls, Forms, Menus, Classes;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

miMenuItem: TMenuItem;

procedureFormCreate(Sender: TObject);

Private

procedureNewMenuClick(Sender: TObject);

end;

varForm1: TForm1;

Implementation

{$R *.dfm}

procedureTForm1.FormCreate(Sender: TObject);

varAItems: array ofTMenuItem;

i:integer;

Begin

SetLength(AItems,3); //распределяем память динамического массива для 3-х элементов

AItems[0]:=TMenuItem.Create(miMenuItem); //создаем первый элемент

AItems[0].Caption:='Красный'; //назначаем ему заголовок

AItems[1]:=TMenuItem.Create(miMenuItem);

AItems[1].Caption:='Синий';

AItems[2]:=TMenuItem.Create(miMenuItem);

AItems[2].Caption:='Зеленый';

forI:=Low(AItems) toHigh(AItems) do{инициализируем созданные пункты меню}

Begin

AItems[I].Tag:=I; //пункты меню различаются значением в свойстве Tag

AItems[I].AutoCheck:=True;

AItems[I].RadioItem:=True;

AItems[I].OnClick:=NewMenuClick; //назначаем реакцию на щелчок по пункту

end;

miMenuItem.Add(AItems); //подключаем все три новых пункта меню к элементу miMenuItem AItems[0].Click; //программным образом щелкаем по пункту меню 'Красный'

end;

procedureTForm1.NewMenuClick(Sender: TObject);

Begin

{Процедура проверяет свойство Tag источника Sender и в зависимости от значения перекрашивает форму в один из трех цветов}








Дата добавления: 2016-03-15; просмотров: 713;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.