Главная страница
    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.46 MB
Время: 0.035 c
1-1083322967
Amid
2004-04-30 15:02
2004.05.16
Ошибка при читении функции из DLL


11-1069715731
APXi
2003-11-25 02:15
2004.05.16
Подскажите почему не работает? Applet.OnMessage


6-1080487828
iu2320
2004-03-28 19:30
2004.05.16
Shared resources


1-1083500489
AndrewVolkov
2004-05-02 16:21
2004.05.16
Какой-то странный глюк при работе с тхт файлом


7-1080671449
Kme
2004-03-30 22:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский