Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.03;
Скачать: CL | DM;

Вниз

Функция DestroyWindow   Найти похожие ветки 

 
bers01   (2003-12-26 13:27) [0]

Доброго времени суток Уважаемые Мастера!
Подскажите пожалуйста:
При использовании функции DestroyWindow(Handle)
вызываются ли методы onClose и onHide соответствующей формы?

С Уважением, Андрей.


 
MBo ©   (2003-12-26 13:33) [1]

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


 
YuRock ©   (2003-12-26 13:40) [2]

Должен вызываться OnDestroy. OnClose - нет


 
Bers01   (2003-12-26 14:08) [3]

>>MBo © (26.12.03 13:33)
>> Не делай так. Не надо.

А как надо? Если есть только Handle Формы...
С Уважением, Андрей.


 
MBo ©   (2003-12-26 14:13) [4]

Задачу расскажи подробнее.


 
Bers01   (2003-12-26 14:27) [5]

В 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:36) [6]

>чтобы выполнилось его событие onClose
Тогда стоит посылать окну WM_CLOSE.

>типа TForm вместо дескриптора. Может так лучше?
Если пакеты (BPL) вместо DLL использовать - это, наверно, самое лучшее.


 
Bers01   (2003-12-26 14:44) [7]

>Тогда стоит посылать окну WM_CLOSE.
Сначала я и посылал окну:
SendMessage(FHandle,WM_CLOSE,0,0);

И оно при этом даже закрывалось, но при закрытии основного приложения возникала ошибка памяти, поэтому и начал пользовать DestroyWindow.
Может знаете почему?

С Уважением, Андрей.


 
YuRock ©   (2003-12-26 15:03) [8]

На самом деле, действительно лучше не делать такого - это не стиль Delphi.
Конечно, лучше использовать указатель! Но вот проблема - врядли получится, т.к. Свойства класса хранятся в сегменте данных dll, и когда ты попытаешься их пользовать - будет конец...

Попробуй PostMessage(FHandle,WM_CLOSE,0,0);


 
Bers01   (2003-12-26 15:35) [9]

>>YuRock ©
>>Но вот проблема - врядли получится

Как ни странно - получилось... :)
Но если вызываешь просто метод TForm.Close, то при закрытии основного приложения все равно выдается ошибка, а вот если после него еще и TForm.Free вызвать, то все замечательно получается!!!

Всем спасибо!


 
YuRock ©   (2003-12-26 15:52) [10]

Так надо было просто в OnClose написать Action := caFree



Страницы: 1 вся ветка

Текущий архив: 2004.03.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-6020
TUser
2004-02-19 12:07
2004.03.03
Breakpoint


3-5990
Zx77
2004-02-05 08:15
2004.03.03
Базы данных


1-6134
Expan
2004-02-19 16:52
2004.03.03
function IncDay


3-5987
AlexLine
2004-02-04 10:06
2004.03.03
DbCtrlGrid


14-6207
Samoilov
2004-02-11 15:49
2004.03.03
Драйвер