Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2009, 16:10   #1
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию Уничтожение формы

В проекте есть форма, в опциях проекта она записана как доступная, т.е. автоматически не создается. Ее имя mOpenFile и создается при нажатии на кнопку:
Код:
mOpenFile := TmOpenFile.Create(Application);
mOpenFile.Show;
Уничтожаем так:
Код:
mOpenFile.Close;
mOpenFile.Free;
Но при уничтожении (при освобождении памяти от формы) возникает ошибка в модуле программы "Access violation at adress ###". Форма закрывается но память не освобождается. Что-то я не так делаю?
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 17.02.2009, 16:22   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

mOpenFile.Free - не обязательно ...
достаточно будет mOpenFile.Close ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 17.02.2009, 16:22   #3
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Если уничтожаем, то mOpenFile.Destroy
Hottabych вне форума Ответить с цитированием
Старый 17.02.2009, 16:28   #4
FANATID
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 62
По умолчанию

Код:
try
mOpenFile.Close;
except
end;
FANATID вне форума Ответить с цитированием
Старый 17.02.2009, 16:34   #5
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Если уничтожаем, то mOpenFile.Destroy
Да но потом в процессе работы наверное понадобится опять показать окно и тогда опять придется mOpenFile := TmOpenFile.Create ...
Просто при закрытии основной программы она вычистит все созданные ею формы и Destroy вообще может не понадобится.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 17.02.2009, 17:10   #6
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Ну, chandrasecar хотел уничтожить окно...
Hottabych вне форума Ответить с цитированием
Старый 17.02.2009, 17:31   #7
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Благодарю всех за ответы. Дело вот в чем. Форма mOpenFile имеет кнопку "Отмена", к которой привязан
Код:
mOpenFile.Close;
mOpenFile.Free;
А если сделать кнопку на главной форме и привязать этот же код, то все становится ОК.
При запуске программы, она занимает память в 18 Мб, а при вызове окна mOpenFile - 26 Мб. После уничтожения этого окна - 25 Мб. Я думаю что память не вычищяется полностью.?
И потом как привязать код выше к кнопке на форме которую уничтожаем?
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 17.02.2009, 17:42   #8
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Чо-то слишком много у вас форма занимает памяти...
Если я правильно понял, то лучше сделать так: mOpenFile.ShowModal, кнопкам присвоить mOpenFile.ModalResult и всё.
Hottabych вне форума Ответить с цитированием
Старый 17.02.2009, 17:45   #9
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
При запуске программы, она занимает память в 18 Мб
Используется контроль памяти в программе ?
Цитата:
После уничтожения этого окна - 25 Мб. Я думаю что память не вычищяется полностью.?
Просто память остается выделенной для него или на другие нужды основной программы... и очистится после закрытия основной проги
Цитата:
И потом как привязать код выше к кнопке на форме которую уничтожаем?
Здесь считаю только mOpenFile.Close достаточно ...
Если же конечно форма немодальная. С модальной немного проще - просто кнопке в этом случае присваиваешь какой-нибудь ModalResult и окно закроется само и к тому же вернет этот результат.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 17.02.2009, 18:47   #10
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

У меня форма mOpenFile получается модальной. Назначение таких форм - экономия ресурсов памяти. А у меня при каждом новом вызове формы занимаемая программой память увеличивается на 160 Кб (смотрел через диспетчер задач). Запуская проект, как я говорил выше, выделяется 18 Мб, запуская форму - 26 (+160 Кб при каждом новом вызове). По идее, применяя процедуру Free, должно сново быть 18 Мб. Дело в том что таких форм много, и при работе с программой, придется запастись большим объемом ОЗУ.
Судя по всему, созданные формы копятся в памяти... Как память освободить от таких форм?
Кстати, пробовал ShowModal - ничего...
Вот так вызываем:
Код:
mOpenFile := TmOpenFile.Create(Self);
try
  mOpenFile.ShowModal;
finally 
  mOpenFile.Free;
end;
Вот так закрываем:
Код:
mOpenFile.ModalResult:=mrCancel;
Я уже, вроде, все перепробовал, а память не очищается.
лучший подарок женщине-программисту

Последний раз редактировалось chandrasecar; 17.02.2009 в 18:56.
chandrasecar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уничтожение потока SNUPY Общие вопросы Delphi 2 11.02.2009 22:47
Автоматическое уничтожение объекта mutabor Общие вопросы Delphi 6 25.06.2008 22:25
Создание/уничтожение объектов nimf Общие вопросы Delphi 10 14.04.2008 10:54
Уничтожение окна Kashp Win Api 20 07.09.2007 14:15