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

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

заNILить форму после Close;


Страницы:   1 2 3 4 5 6 7 8 9 10

ничтожная козявка ©   (2008-08-21 12:37:00) 

В некой dll есть функция, показывающая форму. Перед созданием формы, она проверяет ее на NIL:

 if not Assigned(Form1) then Form1 := TForm1.Create(AOwner);


также требуется, что бы после закрытия (Close) форма была уничтожена:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 ...
 Action := caFree;
 ...
end;


ВОПРОС: как сделать так, чтоб она была не только уничтожена, но и переменная Form1 приняла значение NIL. Т.к. поскольку эта переменная не NIL, при повторной попытке создать форму, ее конструктор
  if not Assigned(Form1) then Form1 := TForm1.Create(AOwner);
не вызывается, и в последствии сыпятся AV.


{RASkov}   (2008-08-21 14:08:00) [181]

А зачем эта ссылка на форму вообще? убрать ее нафик...
И будет достаточно Action := caFree; а "единичность формы"(если именно ее преследует автор) можно будет сделать "такой же" глобальной переменной, только например Булевого типа.... и делов.


Юрий Зотов   (2008-08-21 14:04:00) [182]

> @!!ex ©   (21.08.08 12:41) [1]

Зачем такие извраты?

procedure TForm1.FormClose(...);
begin
  Action := caFree;
end;

procedure TForm1.OnDestroy(...);
begin
 Form1 := nil;
end;


И вся морковь.


Сергей М.   (2008-08-21 14:00:00) [183]


> ничтожная козявка   (21.08.08 13:58) [6]


А как она, форма, там завелась ?
Что ей не жилось спокойно в ехе ?


ничтожная козявка   (2008-08-21 13:58:00) [184]

Leonid Troyanovsky

> Это ошибка

 как полагается реализовывать это?


@!!ex   (2008-08-21 13:08:00) [185]

> А нельзя ли Self для этих целецей использовать?

Нет.


Leonid Troyanovsky   (2008-08-21 13:01:00) [186]


> ничтожная козявка   (21.08.08 12:37)  

> В некой dll есть функция, показывающая форму.

Это ошибка.

--
Regards, LVT.


ничтожная козявка   (2008-08-21 12:52:00) [187]

@!!ex
 Ок, спасибо! Это работает. А нельзя ли Self для этих целецей использовать?

Ega23
 Модальной ее делать нельзя, к сожалению.


@!!ex   (2008-08-21 12:41:00) [188]

TForm1 = class
public
 FormLinkPointer:^TForm1;
end;

....
Form1:TForm;
Form1:=TForm.Create();
Form1.FormLinkPointer:=@Form1;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 FormLinkPointer^:=nil;
end;


Ega23   (2008-08-21 12:41:00) [189]

Ну самого себя занилить у тебя не получится.
Форма модальная?


Страницы:   1 2 3 4 5 6 7 8 9 10

Наверх

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