Главная страница
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.017 c
3-5981
Lisa
2004-02-04 13:55
2004.03.03
в DBGrid не работает мышинный скроллинг


4-6274
JS
2003-12-24 19:45
2004.03.03
перемещение окна


14-6221
Dmitrich
2004-02-07 04:33
2004.03.03
Диспетчер задач Windows


14-6208
Style
2004-02-10 15:52
2004.03.03
Stack Overflow при компиляции 8)


14-6246
fag2000
2004-02-10 14:03
2004.03.03
Тысячи по английскому.