Динамическое добавление пунктов меню I
Решение 1
Честно говоря, я так и не понял к чему вы хотите добавлять новые пункты меню - к верхнему уровню или в качестве подменю. На всякий случай я публикую оба метода. Выбирайте любой.
Новый элемент верхнего уровня:
procedure tform1.addmainitem(s:string); var newitem : Tmenuitem;begin newitem:=tmenuitem.create(Mainmenu1);newitem.caption:=s;{если вы хотите определить событие onclicknewitem.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;{если вы хотите определить событие onclicknewitem.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 ofTMenuitem): 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]