Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.057 c
6-1080020097
NAlexey
2004-03-23 08:34
2004.05.16
Подтверждение о доставке сообщения.


9-1073339831
$iD
2004-01-06 00:57
2004.05.16
Пожалуйста, помогите с алгоритмами!!!!!!!!!!!!!!!


1-1083136882
Sectey
2004-04-28 11:21
2004.05.16
Можно ли узнать имя метода во время его выполнения


14-1082719868
ИМХО
2004-04-23 15:31
2004.05.16
Netscape и Mozilla


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский