Идёт загрузка страницы...

htp://aptem.net.ru





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