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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
3-93384
Julia
2004-01-05 07:13
2004.01.29
Запрос из подчиненной таблицы


1-93455
ИМХО
2004-01-16 07:21
2004.01.29
Большой список строк


1-93554
Mox Fulder
2004-01-17 13:18
2004.01.29
TerminateProcess


1-93537
Cardinal
2004-01-17 10:25
2004.01.29
Как закрыть консоль при отсутствии ошибок?


14-93624
Думкин
2004-01-09 07:15
2004.01.29
С днем рождения! 9 января.