Главная страница
    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.47 MB
Время: 0.03 c
1-1082953631
WondeRu
2004-04-26 08:27
2004.05.16
Cursor in RUNTIME


1-1083492460
TechnoDreamer
2004-05-02 14:07
2004.05.16
Выезжающая боковая панель


6-1080127550
rimd
2004-03-24 14:25
2004.05.16
idSMTP and idAntifreez


1-1083219222
WondeRu
2004-04-29 10:13
2004.05.16
GetDIBBits - нот а гуд!!!


3-1082087860
Dark Man
2004-04-16 07:57
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский