Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Вниз

Функция 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
1-6046
ARTOSHKA
2004-02-19 01:50
2004.03.03
Перехват панели часов


4-6269
DillerXX
2003-12-23 20:06
2004.03.03
Перезагрузка+БАТ2


14-6188
Анонимщик
2004-02-11 14:45
2004.03.03
Шахматы


3-5941
Balepa
2004-02-06 00:32
2004.03.03
Вычисл поле


1-6012
Серёга
2004-02-19 13:44
2004.03.03
RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский