Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.02.2010, 13:03
Аватар для Rastaman
Rastaman Rastaman вне форума
Прохожий
 
Регистрация: 09.09.2009
Адрес: Ставрополь
Сообщения: 6
Репутация: 10
По умолчанию 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;

Помогите пожалйста разобраться!
__________________
Мой мир! Мои правила! Как хочу, так и нарушаю!
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter