Dll. Dialog. и проблемы с этим
От: Strag  
Дата: 15.07.04 15:52
Оценка:
этот вопрос я здесь уже видел, но ответа на него я не очень понял
Вопрос:
Вызываю форму из DLL, вызываю в этой форме стандартный диалог, после чего форма (DLL) прячется за окно основной программы. Я примерно понимаю что нужно
передать DLL-е указатель на родительское окно, но после этого при закрытии DLL выдается ошибка . Особенно это проявляется когда сначала вызывается одна DLL из нее другая и в последней диалог.
Re: Dll. Dialog. и проблемы с этим
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 15.07.04 16:52
Оценка:
Рекомендую яснее выражать свои мысли, сэкономите кучу времени читающим
S>Я примерно понимаю что нужно передать DLL-е указатель на родительское окно, но после этого при закрытии DLL выдается ошибка .
Какая ошибка (ну видимо AV) и, главное, после чего "этого"? В смысле — если выполнить любым способом передачу DLL указателя на родительское окно? Даже если его не использовать?
По существу — проверьте, не используется ли полученный указатель где-нибудь при финализации DLL или вообще после того, как родительская форма уже уничтожена?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Dll. Dialog. и проблемы с этим
От: DenisTST  
Дата: 17.07.04 21:07
Оценка:
Здравствуйте, Strag, Вы писали:

S>этот вопрос я здесь уже видел, но ответа на него я не очень понял

S>Вопрос:
S>Вызываю форму из DLL, вызываю в этой форме стандартный диалог, после чего форма (DLL) прячется за окно основной программы. Я примерно понимаю что нужно
S>передать DLL-е указатель на родительское окно, но после этого при закрытии DLL выдается ошибка . Особенно это проявляется когда сначала вызывается одна DLL из нее другая и в последней диалог.

у нас тоже были такие проблемы, но не навсех OS (чаще всего в NT4)

например сообщение через ShowMessage("") проваливалось под окно програмы и достать его можно только
переключаясь туда-сюда по Alt-tab. Ну или если программу снять ....
Пользователи этого непонимали и жаловались на "зависание программы"

Правильно, в Dll нужно присваивать Application.Handle:=MAIN_Application_Handle,
но это не всегда помогает, нужно в форме переопределить CreateParams

procedure TARMForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    Style := Style or ws_Overlapped;
    WndParent := Main_FORM_Handle;
  end;

end;


а вместо ShowMessage нужно вызывать Application.MessageBox

... << Rsdn@Home 1.1.4 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.