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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 19:35   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Уничтожать созданные формы при закрытии? Как?

Делал так:
Код:
procedure TForm2.ShowTopic(topic: TTopic);
begin
  with TFormNotification.Create(self) do
  begin
    OnHide:=NotificationClosed;
    Show;
  end;
end;

procedure TForm2.NotificationClosed(Sender: TObject);
begin
  Sender.Free;
end;
Но вылетает Access Violation. Я понимаю, что пытаюсь уничтожить ещё не "спрятанную" форму, поэтому и спрашиваю здесь) Конечно мжно написать поток, который будет запускать в OnHide и ждать, пока Visible не станет равным false, а потом уничтожит форму, ноя более чем уверен, что есть более простой способ)
TwiX вне форума Ответить с цитированием
Старый 08.04.2010, 20:47   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Не OnHide а OnClose пробуйте. Там self.Free; должно выйти. А вообще, делается это не так вовсе.
1. Главное окно - создает дочернее
2. Главное окно - показало дочеренее (к примеру как модальное, но это не важно даже)
3. Главное окно - вызвало Дочернее Окно.Free;
Думаю идея ясна. Так верно делать.
BOBAH13 вне форума Ответить с цитированием
Старый 08.04.2010, 21:57   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Я понимаю, что пытаюсь уничтожить ещё не "спрятанную" форму
Из-за того что уничтожается еще не "спрятанная" форма AV генерится не может.
Цитата:
ноя более чем уверен, что есть более простой способ
Если правильно понял, что задача в том чтобы уничтожить форму в самой форме, то да, существует метод Release. Позволяет корректно освобождать память от объекта заканчивая все не выполненные события, предназначенные этой форме.
Скандербег вне форума Ответить с цитированием
Старый 09.04.2010, 00:00   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

В OnClose сработало...
Странно, я сначала OnClose использовал - вылетал Acces Violation. Посмотрел что происходит, когда вызывается Close - там увидел Hide - решил написать для OnHide)
Спасибо)
TwiX вне форума Ответить с цитированием
Старый 09.04.2010, 09:49   #5
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
procedure Tfrm_Bank.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action:= caFree; // уничтожение объекта
end;
при вызове формы писать так
Код:
procedure Tfrm_Main.btn_CreditClick(Sender: TObject);
begin
    Application.CreateForm(Tfrm_Bank, frm_Bank);
    frm_Bank.ShowModal;
end;
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск процесса при закрытии формы RUSlan48 Общие вопросы Delphi 3 29.03.2010 21:49
Потоки. FreeOnTerminate или где уничтожать созданные объекты. TwiX Общие вопросы Delphi 3 10.03.2010 03:04
При закрытии формы, закрываеться книга Excel Even Microsoft Office Excel 2 10.01.2010 12:38
Сворачивание в трей при закрытии формы xxxsas Общие вопросы C/C++ 0 22.01.2009 08:11
Как сделать чтобы динамически созданные объекты оставались после закрытия формы? AHAPXUCT2007 Общие вопросы Delphi 7 28.09.2007 08:46