Главная страница
    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.041 c
1-1082730271
CTAC
2004-04-23 18:24
2004.05.16
Не могу поменять charset в TRadiobutton :(


3-1082433154
SerKom
2004-04-20 07:52
2004.05.16
Тип объекта неизвестен, а имя свойство точно известно


14-1083118463
Думкин
2004-04-28 06:14
2004.05.16
С днем рождения! 28 апреля.


14-1083172924
Yanis
2004-04-28 21:22
2004.05.16
Почему закрыто обсуждение?


1-1083061788
siriusP
2004-04-27 14:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский