Главная страница
    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.84 MB
Время: 0.032 c
1-6018
fROT
2004-02-19 12:07
2004.03.03
ivalid class typecast


14-6183
Daemys
2004-02-11 17:45
2004.03.03
Всемирный День Больного


14-6228
ZeCChiN
2004-02-10 20:33
2004.03.03
О потрепаться


4-6270
Bless
2003-12-25 15:19
2004.03.03
обработка сообщений в консольном приложении


14-6248
Makhanev A.S.
2004-02-11 22:07
2004.03.03
Помогите плиз...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский