Menu inserted twice - Или меню из DLL
Проблема такая!
Пишу плагин (DLL), при загрузке которого должно появляться дополнительное меню в основном MainMenu1 формы.
Нюансы:
При статической загрузке DLL - все работает отлично, грузится без проблем, в MainMenu1 добавляется новый пункт меню.
А вот при динамической загрузке этой DLL - вылетает ошибка: "Menu inserted twice" !!!
Подскажие пожалуйста, как загрузить/добавить новое меню из DLL?
Меню в DLL многоуровневое.
Мой код:
V.1
Код:
procedure LoadMenu(MainMenu: TMainMenu; ToolBar: TToolBar); stdcall;
var
MyM: array of TMenuItem;
begin
SetLength(MyM, 7);
MyM[2]:=NewItem('Пинг по IP', 0, False, True, MyProcedure.SelPingIP, 0, 'SelPingIP');
MyM[3]:=NewItem('Пинг по имени', 0, False, True, MyProcedure.SelPingName, 0, 'SelPingName');
MyM[1]:=NewSubMenu('Выбранный компьютер', 0, 'SelComp', [MyM[2], MyM[3]], True);
MyM[5]:=NewItem('Пинг по IP', 0, False, True, MyProcedure.AllPingIP, 0, 'AllPingIP');
MyM[6]:=NewItem('Пинг по имени', 0, False, True, MyProcedure.AllPingName, 0, 'AllPingName');
MyM[4]:=NewSubMenu('Все компьютеры', 0, 'AllComp', [MyM[5], MyM[6]], True);
MainMenu.ParentBiDiMode:=False; { Это на всякий случай
(как с ParentFont:=False при ошибке TFont to a TFont }
MainMenu.Items.Add(NewSubMenu('Пинг', 0, 'ping', [MyM[1], MyM[2]]));
ToolBar.ParentFont:=False;
ToolBar.Menu:=nil;
ToolBar.Menu:=MainMenu;
end;
Вызываю:
Код:
LoadMenu(MainMenu1, ToolBar1);
V.2
Код:
function LoadMenu: TMenuItem; stdcall;
var
MyM: array of TMenuItem;
begin
SetLength(MyM, 7);
Result:=TMenuItem.Create(nil);
MyM[2]:=NewItem('Пинг по IP', 0, False, True, MyProcedure.SelPingIP, 0, 'SelPingIP');
MyM[3]:=NewItem('Пинг по имени', 0, False, True, MyProcedure.SelPingName, 0, 'SelPingName');
MyM[1]:=NewSubMenu('Выбранный компьютер', 0, 'SelComp', [MyM[2], MyM[3]], True);
MyM[5]:=NewItem('Пинг по IP', 0, False, True, MyProcedure.AllPingIP, 0, 'AllPingIP');
MyM[6]:=NewItem('Пинг по имени', 0, False, True, MyProcedure.AllPingName, 0, 'AllPingName');
MyM[4]:=NewSubMenu('Все компьютеры', 0, 'AllComp', [MyM[5], MyM[6]], True);
Result:=NewSubMenu('Пинг', 0, 'ping', [MyM[1], MyM[2]]);
end;
Вызываю:
Код:
MainMenu1.Items.Insert(0, LoadMenu);
{ или так: MainMenu1.Items.Add(LoadMenu); }
ToolBar1.ParentFont:=False;
ToolBar1.Menu:=nil;
ToolBar1.Menu:=MainMenu1;
Помогите пожалйста разобраться!
__________________
Мой мир! Мои правила! Как хочу, так и нарушаю!
|