Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форма создана or нет [D7, WinXP]


Страницы:   1 2

Kot Andrei ©   (2005-07-01 09:19:00) 

Вообщем-то сабж...
Грубо говоря по нажатию на Button1 происходит FormCreat, по нажатию на Button2 - FormFree. Так вот при нажатии на Button1 нужно проверить данная форма уже создана или нет (чтоб не создавать 2-ой раз).

Подскажите плиз как! С уважением!


Dimous   (2005-07-01 10:30:00) [21]

>> Digitman ©   (01.07.05 10:24) [7]
Можно добавить

procedure TMyForm.FormDestroy(Sender: TObject);
begin
 MyForm := nil;
end;


-=XP=-   (2005-07-01 10:28:00) [22]

Сорри за повтор.


-=XP=-   (2005-07-01 10:28:00) [23]

А такой вариант чем плох? Покритикуйте.

А чего тут критиковать? Если автор задает такой вопрос, то он не совсем понимает, что на самом деле происходит. Поэтому, не исключена ситуация:

procedure TMyForm.OnFormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;


Ваш код в нокдауне.


Digitman   (2005-07-01 10:24:00) [24]


> Чапаев ©   (01.07.05 10:20) [5]


он плох тем что форма м.б. уничтожена в т.ч. и интерактивно, самим юзером, щелчком на "крестике"

при этом переменная MyForm, о которой уничтожаемая форма ничего не знает, останется <> nil


-=XP=-   (2005-07-01 10:24:00) [25]

Вариант 1. Assigned? > Глупость
Зависит от реализации.

Вариант 2. Screen.Forms
Зависит от реализации.

Минусы:

Вариант 1. Можно "забыть" присвоить nil переменной, хранящей ссылку на форму. Соответсвенно, может быть AV.

Вариант 2. Можно "забыть" проверить существование формы, и создать еще одну. Тогда в Screen.Forms будет несколько "одинаковых форм". Так как "забыли" проверить существование формы - то и ситуацию дубликатов обрабатывать, скорее всего, не будут.

Плюсы (с точностью до "наоборот"):

Вариант 1. В переменной формы может хранится ссылка только на одну форму, поэтому нет ситуации с дубликатами. Хотя, можно и "потерять" форму.

Вариант 2. А тут все формы будут присутствовать, по любому.

Вывод:Вопрос не в алгоритме, а в его реализации. Точнее - в кривизне рук.


Чапаев   (2005-07-01 10:20:00) [26]


procedure B1Click();
begin
 if not Assigned(MyForm) then
   MyForm:=TMyForm.Create();
end;
procedure B2Click();
begin
 if Assigned(MyForm) then
   FreeAndNil(MyForm);
end;

А такой вариант чем плох? Покритикуйте.


Tor   (2005-07-01 10:17:00) [27]

if form1 <> nil then
form1.Show
else form1 := TForm.Create(Application);


Anatoly Podgoretsky   (2005-07-01 10:11:00) [28]

stone ©   (01.07.05 09:49) [2]
Глупость


stone   (2005-07-01 09:49:00) [29]

Assigned ?


Anatoly Podgoretsky   (2005-07-01 09:21:00) [30]

Screen.Forms


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо