![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция DestroyWindow
bers01 © (2003-12-26 13:27:00)
Доброго времени суток Уважаемые Мастера!
Подскажите пожалуйста:
При использовании функцииDestroyWindow(Handle)
вызываются ли методыonCloseиonHideсоответствующей формы?
С Уважением, Андрей.
YuRock (2003-12-26 15:52:00) [1]
Так надо было просто в OnClose написать Action := caFree
Bers01 (2003-12-26 15:35:00) [2]
>>YuRock ©
>>Но вот проблема - врядли получится
Как ни странно - получилось... :)
Но если вызываешь просто метод TForm.Close, то при закрытии основного приложения все равно выдается ошибка, а вот если после него еще и TForm.Free вызвать, то все замечательно получается!!!
Всем спасибо!
YuRock (2003-12-26 15:03:00) [3]
На самом деле, действительно лучше не делать такого - это не стиль Delphi.
Конечно, лучше использовать указатель! Но вот проблема - врядли получится, т.к. Свойства класса хранятся в сегменте данных dll, и когда ты попытаешься их пользовать - будет конец...
Попробуй PostMessage(FHandle,WM_CLOSE,0,0);
Bers01 (2003-12-26 14:44:00) [4]
>Тогда стоит посылать окну WM_CLOSE.
Сначала я и посылал окну:
SendMessage(FHandle,WM_CLOSE,0,0);
И оно при этом даже закрывалось, но при закрытии основного приложения возникала ошибка памяти, поэтому и начал пользоватьDestroyWindow.
Может знаете почему?
С Уважением, Андрей.
MBo (2003-12-26 14:36:00) [5]
>чтобы выполнилось его событие onClose
Тогда стоит посылать окну WM_CLOSE.
>типа TForm вместо дескриптора. Может так лучше?
Если пакеты (BPL) вместо DLL использовать - это, наверно, самое лучшее.
Bers01 (2003-12-26 14:27:00) [6]
В Dll-ке хранится описание класса формы и функция
...
function MCreateForm: TForm; stdcall;
begin
result:=nil;
result:=TMyForm.Create(nil);
result.Show;
end;
...
Export MCreateForm;
После выполнения данной функции из основной программы в списке сохраняется Дескрипторы динамически загруженной библиотеки и открытого окна.
По опред. действию в основной программе это вспомогательное окно нужно корректно закрыть, чтобы выполнилось его событие onClose;
Вот примерно так...
Есть еще мысль сохранять указатель на объект типа TForm вместо дескриптора. Может так лучше?
C Уважением, Андрей.
MBo (2003-12-26 14:13:00) [7]
Задачу расскажи подробнее.
Bers01 (2003-12-26 14:08:00) [8]
>>MBo © (26.12.03 13:33)
>> Не делай так. Не надо.
А как надо? Если есть только Handle Формы...
С Уважением, Андрей.
YuRock (2003-12-26 13:40:00) [9]
Должен вызываться OnDestroy. OnClose - нет
MBo (2003-12-26 13:33:00) [10]
Не делай так. Не надо.