Советы по Delphi

Динамическое добавление пунктов меню 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]



Содержание раздела