Главная страница
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.018 c
1-93498
vlgrig1961
2004-01-19 09:01
2004.01.29
Как в TreeView писать итемы своим цветом


3-93397
kiko
2003-12-30 08:58
2004.01.29
Вопрос о системных таблицах IB


1-93419
Вомбат
2004-01-16 15:56
2004.01.29
Запись / чтение компоненты из ресурса


3-93357
don
2003-12-30 11:32
2004.01.29
Возможно ли отключить создание лок-файла в Embedded Firebird


3-93402
guest123
2003-12-29 17:18
2004.01.29
Дистрибутив InterBase 5.0-5.5