Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Корректное уничтожение формы.   Найти похожие ветки 

 
Learner ©   (2004-04-30 21:12) [0]

У меня в проекте есть форма с кучей компонентов.
Она редко нужна, и я хочу ее создавать по вызову,
( Application.CreateForm(TForm2, Form2); )
а при закрытии – уничтожать.( Form2 ).
Подскажите, пожалуйста, как корректно это сделать ?


 
Gero ©   (2004-04-30 21:17) [1]

Для начала нужно убрать ее из auto-create.

Затем можно так:
with TForm2.Create(nil) do
 try
   ShowModal;
 finally
   Free;
 end;


 
Fay ©   (2004-04-30 21:17) [2]

FreeAndNil


 
Gero ©   (2004-04-30 21:18) [3]

Можно и по-другому.
Application.CreateForm(TForm2, Form2);

В TForm2.OnClose:
 Action := caFree;


 
Андрей Сенченко ©   (2004-05-01 11:09) [4]

try
  ShowModal;


А про модальный вызов ничего в вопросе не было. Облегчам себе жизнь, затрудняя ее автору вопроса ?


 
Gero ©   (2004-05-01 12:02) [5]


> А про модальный вызов ничего в вопросе не было

Тогда см. [3].


 
Anatoly Podgoretsky ©   (2004-05-01 12:41) [6]

Более удачный модифицированный универсальный вариант выглядит так

with TForm2.Create(self) do show/showmodal

Action := caFree;

Но вариант [1] лучше для модальных форм.


 
Learner ©   (2004-05-01 13:17) [7]

Спасибо.
А, если таких форм несколько ?
Как бы написать что нибудь следующего типа:
procedure CreateLoadMyForm(Form:TForm);
begin
with Form.Create(nil) do
try
  ShowModal;
finally
  Free;
end;
end;

И использовать ее для Form2, Form3, и т.д. ?


 
Андрей Сенченко ©   (2004-05-01 13:23) [8]

Вы абсолютно уверены, что Вас устраивает модальный вызов формы ? Вы знаете ограничения, происходящие при запуске модальной формы ?


 
KSergey ©   (2004-05-01 13:26) [9]

> [7] Learner ©   (01.05.04 13:17)

Вообще-то, как мне кажется, необходимости в такой вот фигне нет.. Потому как потом возникнет проблема "а в одной из форм надо заполнить Edit1" И начнутся хитрые If"ы... Или еще какая фигня... Тем более, что вариант Anatoly Podgoretsky ©   (01.05.04 12:41) весьма лаконичен в реализации.

Однако, если хотите, пожалуйста:

procedure CreateLoadMyForm(AFormClass: TFormClass);
begin
  with AFormClass.Create(nil) do
  try
    ShowModal;
  finally
    Free;
  end;
end;

// вызов:

CreateLoadMyForm(TForm1);


Вот только пожалуйста, не забудьте убрать формы из AutoCreate!!!! И помните, что ни о каких переменных Form1, Form2 и т.д. уже речи быть не может. Можно их декларации вообще убрать, во избежании.


 
Learner ©   (2004-05-01 15:14) [10]

Всем большое Спасибо !



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
1-1082978090
Влад Сташневский
2004-04-26 15:14
2004.05.16
Double -> Integer


9-1072008573
Jenaxx
2003-12-21 15:09
2004.05.16
Помогите реализовать столкновения


3-1081783672
oleg_SYS
2004-04-12 19:27
2004.05.16
Stream в таблицу Access


8-1077192989
fiction
2004-02-19 15:16
2004.05.16
работа с графическим буфером


1-1083426139
Viner
2004-05-01 19:42
2004.05.16
Возможность вставки рисунков