![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще вопрос по форме в DLL [D7, XP]
Alex_C © (2007-04-04 10:37:00)Создаю форму в DLL :
вот ф-ция инициализации формы в DLL:
function Init( AppHandle: THandle; )
begin
Application.Handle := AppHandle;
ScoreForm := TScoreForm.Create(Application);
ebd;
и далее
procedure ShowForm;
begin
ScoreForm.Show;
end;
При показе формы по отношению к форме в основной проге, форма из DLL становится как бы Stay on top - поверх, хотя должна быть обычной. Почему?
_Аноним (2007-04-05 15:08:00) [1]А еще лучше, вообще не пихать
Amoeba (2007-04-05 14:49:00) [2]А еще лучше, вообще не пихать формы в DLL.
Loginov Dmitry (2007-04-04 20:42:00) [3]> А на место нужно возвращать оригинальный Application перед
> выгрузкой !
А еще лучше компильнуть все в пакетами, и не заморачиваться на всякие там Application'ы
Сергей М. (2007-04-04 14:03:00) [4]
> При завершении работы с DLL основное окно проги самопроизвольно
> сворачивается.
А на местонужно возвращать оригинальный Application перед выгрузкой !
Неужели это так трудно дотумкать самому ?)
Alex_C (2007-04-04 13:58:00) [5]Сергей М. : так не очень хорошо! При завершении работы с DLL основное окно проги самопроизвольно сворачивается.
clickmaker: то что надо! Спасибо!
clickmaker (2007-04-04 13:52:00) [6]*.dpr
procedure DLLMain(dwReason: DWORD);
begin
case dwReason of
dll_Process_Attach :;
dll_Process_Detach :
begin
if DllHandle <> 0 then Application.Handle := DllHandle;
end;
dll_Thread_Attach : {Statements here};
dll_Thread_Detach : {Statements here};
end;
end;
begin
DLLProc := @DLLMain;
end.
Unit
if DllHandle = 0 then begin
DllHandle := Application.Handle;
Application.Handle := AppHandle; // from EXE
end;
Сергей М. (2007-04-04 13:50:00) [7]function Init( App: TApplication )
begin
Application := App;
ScoreForm := TScoreForm.Create(Application);
eтd;
Alex_C (2007-04-04 13:47:00) [8]Ок! Заменил!
function Init( App: TApplication )
begin
ScoreForm := TScoreForm.Create(App);
ebd;
Теперь окна работают как надо, а вот при выходе из проги вылезает ошибка доступа к адресу 00000000. Из-за чего?
Сергей М. (2007-04-04 10:40:00) [9]Потому что передавать нужно не хэндл объекта Application, а ссылку на сам объект Application.