Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уничножение формы из самой себя, Как правильно? 
V
    Опции темы
superVad
Дата 17.8.2011, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Не модальная форма создается и показывается в классовом методе:

Код

class procedure TForm1.show_form;
var
  _form: TForm1;
begin
  Application.CreateForm(TForm1, _form);
  _form.Show;
end;


Ссылок на нее нигде нету.

Уничтожаю ее в экшене. Примерно так

Код

procedure TForm1.FreeActExecute(Sender: TObject);
begin
  Close;
  Free;
end;


Вроде как все и работает.
Смущает, что экшн вызывается из меню например. А после уничтожения формы - мы выходим из него. Не ждет ли этого выхода контрол (которого уже нет)?
Да и мало ли...
PM MAIL   Вверх
Frees
Дата 17.8.2011, 19:26 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Код

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;


Close освободит форму...


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
superVad
Дата 17.8.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Frees, спасибо за быструю реакцию smile

Т.е. это получается не тоже самое? 
Action := caFree происходи в onClose который происходит когда я делаю Close в экшене.
Он дождется выхода из екшена?
PM MAIL   Вверх
Frees
Дата 17.8.2011, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(superVad @  17.8.2011,  22:32 Найти цитируемый пост)
Он дождется выхода из екшена?

Грубо говоря, да.

Добавлено через 1 минуту и 1 секунду
Цитата(superVad @  17.8.2011,  22:32 Найти цитируемый пост)
Т.е. это получается не тоже самое? 

не совсем
Action := caFree 
в итоге вызовет
 PostMessage(Handle, CM_RELEASE, 0, 0);

окно будет уничтожено после обработки этого сообщения.


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
rodnover
Дата 17.8.2011, 19:44 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Код

class procedure TForm1.show_form;
var
  _form: TForm1;
begin
  Application.CreateForm(TForm1, _form); // Создаем
  try
    _form.Show;  // Используем
  finally
    _form.Free;  // Удаляем
  end;
end;


PM MAIL   Вверх
superVad
Дата 17.8.2011, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(Frees @  17.8.2011,  18:38 Найти цитируемый пост)

не совсем
Action := caFree в итоге вызовет
PostMessage(Handle, CM_RELEASE, 0, 0);


Т.е. Action := caFree можно заменить на Release.

Добавлено через 1 минуту и 33 секунды
rodnover, ты Show с ShowModal перепутал наверное. Иначе окно не успеет появится. smile
PM MAIL   Вверх
Frees
Дата 17.8.2011, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(superVad @  17.8.2011,  22:45 Найти цитируемый пост)
Т.е. Action := caFree можно заменить на Release.

да


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
rodnover
Дата 17.8.2011, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Ой, точно. :-[ Не заметил. Думал там ShowModal smile
PM MAIL   Вверх
malor
  Дата 13.11.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Почему у меня форма мелькает на экране, хотя в дизайн-тайме указал Visible равным false ?

Есть еще такой код 
Код
procedure TForm1.FormShow(Sender: TObject);
begin

  btReportClick(Form1);
  Close();
end;


Это чтоб выполнились некоторые действие (повешенные на кнопку btReport) и форма закрылась (вообще приложение завершилось). Как это правильнее организовать ?..
PM MAIL   Вверх
Akella
Дата 13.11.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а form1 := nil забыли?
PM MAIL   Вверх
superVad
Дата 27.1.2012, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Цитата(Akella @  13.11.2011,  12:30 Найти цитируемый пост)
а form1 := nil забыли?

Нету form1. Нечему nil присваивать.

Это сообщение отредактировал(а) superVad - 27.1.2012, 10:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.