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

Вниз

Закрытие и уничтожение форм   Найти похожие ветки 

 
dima_matrix   (2004-01-17 13:48) [0]

У меня возникла небольшая проблемка, спешу поделиться с общественностью, буду благодарен за любую помощь!
На сколько корректно удаление формы в обработчике события закрытия формы (то бишь вызов метода Destroy в теле метода OnClose). И вообще какое-то странное поведение у этого метода Destroy, при выполнении следующего фрагмента кода
LocTasks := TLocTasks.Create(nil);
LocTasks.ShowModal;
LocTasks.Destroy;
Вначале память выделяется 60К при создании формы, но после уничтожения по диспетчеру задач не видно, чтобы какая-то память освобождалась. К чему бы это?


 
alex_***   (2004-01-17 14:14) [1]

Судя по всему так работает борландовский менеджер памяти. и Напрямую в OnClose деструктор лучше не вызывать. Пости себе сообщение какое-ть или CloseAction := caFree.


 
dima_matrix   (2004-01-17 14:25) [2]

По поводу постить сообщение я уже думал, все равно боюсь без таймера не обойтись. А вот на счет CloseAction интересная идея. Спасибо!


 
alex_***   (2004-01-17 14:27) [3]

А при чем здесь таймер?


 
KSergey   (2004-01-17 14:47) [4]

Не надо вызывать Destroy напрямую
Нужно вызывать Free.
Для уничтожения формы самой себя (хотя в приведенном коде вы ведь ее и так уничтожаете, но в создавшей процедуре, что еще лучше, на мой взгляд) надо или использовать CloseAction, или вызывать метод Release. Что, впрочем, одно и то же, если посмотреть на реализацию, разве что CloseAction есть только в OnClose, а Release можно вызвать хоть когда и хоть откуда.


 
dima_matrix   (2004-01-17 15:12) [5]

По поводу таймера, постить сообщение надо будет какому то главному управляющему модулю, например главному окну приложения. Если у меня очередь приложения пуста, то обработчик этого сообщения может начаться раньше чем завершатся все действия по закрытию окна.
2 KSergey ©. Не все так просто, к сожалению. Я привел просто элементарный пример для илюстрации вопроса, поскольку я, честно говоря, не знаю и не понимаю, почему память не освобождается после вызова Destroy (может нужно Free использовать, сейчас посмотрю). В примере я привел модальное окно, при том что у него будет владелец - приложение. А на самом деле мне нужно немодальное окно и без владельца-родителя.


 
alex_***   (2004-01-17 15:19) [6]

извещай главное окно в перекрытом destroy, после inherited.

Скорее всего память освобождается ,т.е. объект разрушается, но память не возвращается в систему, как в Oracle размер БД не уменьшается после чистки.



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

Форум: "Основная";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.013 c
1-93556
-=Mr.Cold=-
2004-01-17 14:47
2004.01.29
Окно как в FlashGet e


3-93372
ДЕД
2003-12-31 15:08
2004.01.29
ошибка при обновлении


9-93326
Makep
2003-07-11 00:08
2004.01.29
Странные ошибки!!! =(( DirectX


1-93444
baataars
2004-01-13 17:11
2004.01.29
ООП - вызов родительской функции


1-93414
Plt
2004-01-19 12:41
2004.01.29
язык интерфейса





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