Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие их использования. Табстопы вообще отсутствуют.
1-й способ создания дочернего окна из dll
Plug:=TPlug.CreateParented(ParentControl.Handle);
2-й споcоб
Plug:=TPlug.Create(Application);
Plug.Parent:=ParentControl;
И оба неработают так как нужно, можно скзаать вообще не работают.
При запуске dll происходит замена Application (из dll) на Application из самого приложения, результат тот же.
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/ LT>Во-вторых, кроме Application есть еще хуча глоб. переменных. LT>В-третьих, формам не место в dll.
Это и правда вопрос для другого форума. Но формы и окна в dll помещать можно. Проблема как раз в Application. В exe и dll они разные! Это кривость VCL. Не помню уже как проблема решается, но решение реально. Возможно, что будет достаточно просто передать Aplication из exe и форму создавать уже с ним.
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Здравствуйте, cscreator, Вы писали:
C>>Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие
LT>Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/
и что? в этот раздел этот вопрос тоже подходит.
LT>Во-вторых, кроме Application есть еще хуча глоб. переменных.
например? в статьях говорится заменять только апп...
LT>В-третьих, формам не место в dll.
с каких это пор им не место?
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>>Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/ LT>>Во-вторых, кроме Application есть еще хуча глоб. переменных. LT>>В-третьих, формам не место в dll.
N>Это и правда вопрос для другого форума. Но формы и окна в dll помещать можно. Проблема как раз в Application. В exe и dll они разные! Это кривость VCL. Не помню уже как проблема решается, но решение реально. Возможно, что будет достаточно просто передать Aplication из exe и форму создавать уже с ним.
замену производил, об этом писал: LT>> При запуске dll происходит замена Application (из dll) на Application из самого приложения, результат тот же.
толку никакого
Здравствуйте, Leonid Troyanovsky, Вы писали:
C>>Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие
LT>Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/
Согласен.
LT>Во-вторых, кроме Application есть еще хуча глоб. переменных.
Для DLL нужно при инициализации как минимум делать :
Procedure InitPlugin(MainAppHandle:THandle;....); stdcall;
begin
Application.Handle:=MainAppHandle;
//..... дальнейшая инициализация ....
end;
LT>В-третьих, формам не место в dll.
С этим я могу поспорить.
1) В книге "Mastering Delphi ..." есть рабочие примеры размещения форм в DLL.
2) Плагины для Total Commander — направо и налево пользуются формами в DLL — (у многих есть исходники для ознакомления)
3) Сам такое неоднократно делал
P.S. Могут быть проблемы при обработке некоторых сообщений (они могут не доходить до контролов на форме плагина), но проблемы тоже достаточно легко решаются.
Здравствуйте, cscreator, Вы писали:
C>Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие их использования. Табстопы вообще отсутствуют.
C>1-й способ создания дочернего окна из dll C> Plug:=TPlug.CreateParented(ParentControl.Handle); C>2-й споcоб C> Plug:=TPlug.Create(Application); C> Plug.Parent:=ParentControl;
C>И оба неработают так как нужно, можно скзаать вообще не работают. C>При запуске dll происходит замена Application (из dll) на Application из самого приложения, результат тот же.
Может быть лучше будет из DLL посылать родительскому окну сообщение (какое-нить WM_CREATE_CHILD_WINDOW — определить самому) с нужными параметрами, а в обработчике родительского окна создавать форму?
Здравствуйте, DarkMaster, Вы писали:
LT>Для DLL нужно при инициализации как минимум делать :
LT>Procedure InitPlugin(MainAppHandle:THandle;....); stdcall; LT>begin LT>Application.Handle:=MainAppHandle; LT>//..... дальнейшая инициализация .... LT>end;
яж говорил что замену App... производил.
пробовал еще и Screen заменять. результат тот же.
Здравствуйте, DarkMaster, Вы писали:
DM>1) В книге "Mastering Delphi ..." есть рабочие примеры размещения форм в DLL. DM>2) Плагины для Total Commander — направо и налево пользуются формами в DLL — (у многих есть исходники для ознакомления) DM>3) Сам такое неоднократно делал
DM>P.S. Могут быть проблемы при обработке некоторых сообщений (они могут не доходить до контролов на форме плагина), но проблемы тоже достаточно легко решаются.