Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2010, 16:48   #1
Ivankin
Новичок
Джуниор
 
Регистрация: 25.01.2010
Сообщений: 1
По умолчанию Объединение TMainMenu

Приветствую!
Есть приложение, которое подключает из DLL динамически создаваемое меню. При создании TMenuItem вместо OnClick вешается своя функция DynamicClick. После объединения Merge главная форма полностью видит меню, но некоторые пункты меню DLL вызывают процедуры главного приложения вместе с DynamicClick.

Создаём меню так:
Код:
var
  I,J : Integer;
  MenuItems : array of TMenuItem;
  ToItem    : TMenuItem;
Begin
  SP_IO_TEMPLATES_W.First;
    for I := 0 to SP_IO_TEMPLATES_W.RecordCount - 1  do
      Begin
        J := I + SP_IO_CONTRAGENTS_W.RecordCount - 1;
        if SP_IO_TEMPLATES_WEXPORT.AsInteger = 0    // Обрабатываем ветку импорта
          Then
            Begin
              ToItem := ImportSub.Find(SP_IO_TEMPLATES_WCONTRACTOR_NAME.AsString);
              MenuItems[J] := TMenuItem.Create(ToItem);
              MenuItems[J].Name := 'N'+IntToStr(1000+J);
              MenuItems[J].Caption := SP_IO_TEMPLATES_WTEMPLATE_NAME.AsString;
              ToItem.OnClick := DynamicClick;
              ToItem.Insert(ToItem.Count,MenuItems[J]);
          end
            Else                                    // Обрабатываем ветку экспорта
              Begin
                ToItem := ExportSub.Find(SP_IO_TEMPLATES_WCONTRACTOR_NAME.AsString);
                MenuItems[J] := TMenuItem.Create(ToItem);
                MenuItems[J].Name := 'N'+IntToStr(2000+J);
                MenuItems[J].Caption := SP_IO_TEMPLATES_WTEMPLATE_NAME.AsString;
                ToItem.OnClick := DynamicClick;
                ToItem.Insert(ToItem.Count,MenuItems[J]);
              end;
        SP_IO_TEMPLATES_W.Next;
      end; 
End;
Объединяем в основном приложении так:

Код:
JvMainMenu1.Merge(InitIOLib(SessDM.OrSession));

InitIOLib:
----------------------
  DM := TDM.Create(Nil);

      try
          DM.OracleSession := OrSession;
          for I := 0 to DM.ComponentCount-1 do
            Begin
              if DM.Components[I] is TOracleDataSet then
                (DM.Components[I] as TOracleDataSet).Session := OrSession;

            end;

           DM.SP_IO_CONTRAGENTS_W.Open;
           DM.SP_IO_TEMPLATES_W.Open;
           DM.FillAddMenu;
      finally
        Result := DM.AddMainMenu;

      end;
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 25.01.2010 в 17:05.
Ivankin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как скрыть/показать TMainMenu blackstersl Общие вопросы Delphi 3 13.06.2009 18:12
TMainMenu LKf Компоненты Delphi 3 19.10.2008 22:28
Фокус на раздел TMainMenu kraw2 Общие вопросы Delphi 5 19.02.2008 19:32
TMainMenu и его подменю Albenous Компоненты Delphi 3 06.02.2007 07:03
Проблемма с компонентой TMainMenu Nik_K Компоненты Delphi 2 05.02.2007 22:25