Советы по Delphi


Динамическое добавление пунктов меню I


Решение 1

Честно говоря, я так и не понял к чему вы хотите добавлять новые пункты меню - к верхнему уровню или в качестве подменю. На всякий случай я публикую оба метода. Выбирайте любой.

Новый элемент верхнего уровня:

    procedure tform1.addmainitem(s:string);
var
newitem : Tmenuitem; begin
newitem:=tmenuitem.create(Mainmenu1); newitem.caption:=s; {если вы хотите определить событие onclick newitem.onclick:=Dynamenuclick; } {добавляем это к верхнему уровню меню} mainmenu1.items.insert(mainmenu1.items.count,newitem); removemenu1.enabled:=true; addmenuitem1.enabled:=true; end;

Создание подменю:

    procedure tform1.addsubitem(s:string; to : integer);
var
newitem, toitem : Tmenuitem; begin
{to = верхний уровень меню для нового пункта} toitem:=mainmenu1.items[to]; newitem:=tmenuitem.create(toitem); newitem.caption:=s; {если вы хотите определить событие onclick newitem.onclick:=Dynamenuclick; } toitem.onclick:=nil; toitem.insert(toitem.count,newitem); removemenuitem1.enabled:=true; end;

Решение 2

Вы можете использовать готовые функции, определенные в модуле Menus. Определения в Delphi 2:

    function NewMenu(Owner: TComponent; const AName: string; Items: array
of
TMenuItem): TMainMenu;
function NewPopupMenu(Owner: TComponent; const AName: string;
Alignment: TPopupAlignment; AutoPopup: Boolean; Items: array of TMenuitem): TPopupMenu; function NewSubMenu(const ACaption: string; hCtx: Word; const AName:
string; Items: array of TMenuItem): TMenuItem; function NewItem(const ACaption: string; AShortCut: TShortCut;
AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: Word; const AName: string): TMenuItem; function NewLine: TMenuItem;

Это превращает вышепоставленную задачу в сущий пустяк. [000176]




- Начало -  - Назад -  - Вперед -