Главная страница
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.012 c
14-93673
Holy
2004-01-07 11:19
2004.01.29
Инсталятор


14-93626
Knight
2004-01-08 15:43
2004.01.29
Почему у Adobe вечно проблемы с русским?


1-93556
-=Mr.Cold=-
2004-01-17 14:47
2004.01.29
Окно как в FlashGet e


1-93469
TankMan
2003-12-22 20:02
2004.01.29
Как хранить образ файла в памяти?


3-93388
Grihan
2003-12-30 15:06
2004.01.29
InterBase. Ошибка ibtTable.CreateTable;