Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция 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]

Не делай так. Не надо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо