![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
заNILить форму после Close;
ничтожная козявка © (2008-08-21 12:37:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10
В некой 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]Ну самого себя занилить у тебя не получится.
Форма модальная?