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