|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
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; Помогите пожалйста разобраться! Мой мир! Мои правила! Как хочу, так и нарушаю! |