Проблема создания дочерней формы из .dll
От: cscreator  
Дата: 07.07.09 17:57
Оценка:
Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие их использования. Табстопы вообще отсутствуют.

1-й способ создания дочернего окна из dll
Plug:=TPlug.CreateParented(ParentControl.Handle);
2-й споcоб
Plug:=TPlug.Create(Application);
Plug.Parent:=ParentControl;

И оба неработают так как нужно, можно скзаать вообще не работают.
При запуске dll происходит замена Application (из dll) на Application из самого приложения, результат тот же.

Как выполняются данные процедуры, описаны по ссылке: http://www.citforum.ru/programming/digest/dlldelphi.shtml.

Скриншот с проблемой по ссылке:
дочернее окно dll
Re: Проблема создания дочерней формы из .dll
От: Leonid Troyanovsky  
Дата: 08.07.09 04:37
Оценка: -1
Здравствуйте, cscreator, Вы писали:

C>Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие


Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/
Во-вторых, кроме Application есть еще хуча глоб. переменных.
В-третьих, формам не место в dll.
--
С уважением, LVT
Re[2]: Проблема создания дочерней формы из .dll
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.09 05:31
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:

LT>Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/

LT>Во-вторых, кроме Application есть еще хуча глоб. переменных.
LT>В-третьих, формам не место в dll.

Это и правда вопрос для другого форума. Но формы и окна в dll помещать можно. Проблема как раз в Application. В exe и dll они разные! Это кривость VCL. Не помню уже как проблема решается, но решение реально. Возможно, что будет достаточно просто передать Aplication из exe и форму создавать уже с ним.
Re[3]: Проблема создания дочерней формы из .dll
От: Leonid Troyanovsky  
Дата: 08.07.09 05:56
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N> Но формы и окна в dll помещать можно.


Флаг — в руки и барабан на шею.

N> Проблема как раз в Application. В exe и dll они разные!


Не спорил. Правда, заметил, что кроме оного есть еще переменных.

N> Это кривость VCL.


Это проблема выбравших dll для размещения форм.
--
С уважением, LVT
Re[2]: Проблема создания дочерней формы из .dll
От: cscreator  
Дата: 08.07.09 06:37
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:

LT>Здравствуйте, cscreator, Вы писали:


C>>Главная проблема — это невозможность наведения фокуса на редактируемые компоненты и как следствие


LT>Во-первых, это вопрос для http://rsdn.ru/?forum/delphi/

и что? в этот раздел этот вопрос тоже подходит.

LT>Во-вторых, кроме Application есть еще хуча глоб. переменных.

например? в статьях говорится заменять только апп...

LT>В-третьих, формам не место в dll.

с каких это пор им не место?
Re[3]: Проблема создания дочерней формы из .dll
От: cscreator  
Дата: 08.07.09 06:38
Оценка:
Здравствуйте, 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 из самого приложения, результат тот же.
толку никакого
Re[4]: Проблема создания дочерней формы из .dll
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.09 06:43
Оценка:
Вот интересное обсуждение
Re[5]: Проблема создания дочерней формы из .dll
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.09 06:44
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Вот интересное обсуждение


Перепутал
N>Здесь
Re[2]: Проблема создания дочерней формы из .dll
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 08.07.09 07:40
Оценка:
Здравствуйте, 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. Могут быть проблемы при обработке некоторых сообщений (они могут не доходить до контролов на форме плагина), но проблемы тоже достаточно легко решаются.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re: Проблема создания дочерней формы из .dll
От: -prus-  
Дата: 09.07.09 11:01
Оценка:
Здравствуйте, 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 — определить самому) с нужными параметрами, а в обработчике родительского окна создавать форму?
С уважением,
Евгений
Re[3]: Проблема создания дочерней формы из .dll
От: cscreator  
Дата: 16.07.09 20:50
Оценка:
Здравствуйте, DarkMaster, Вы писали:

LT>Для DLL нужно при инициализации как минимум делать :


LT>Procedure InitPlugin(MainAppHandle:THandle;....); stdcall;

LT>begin
LT>Application.Handle:=MainAppHandle;
LT>//..... дальнейшая инициализация ....
LT>end;

яж говорил что замену App... производил.
пробовал еще и Screen заменять. результат тот же.
Re[3]: Проблема создания дочерней формы из .dll
От: cscreator  
Дата: 28.07.09 16:55
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>1) В книге "Mastering Delphi ..." есть рабочие примеры размещения форм в DLL.

DM>2) Плагины для Total Commander — направо и налево пользуются формами в DLL — (у многих есть исходники для ознакомления)
DM>3) Сам такое неоднократно делал

DM>P.S. Могут быть проблемы при обработке некоторых сообщений (они могут не доходить до контролов на форме плагина), но проблемы тоже достаточно легко решаются.


В книге формы не дочерние !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.