Освобождение экземпляров формы
Автор: Jeff Fisher
В нашем примере для решения задачи мы передаем конструктору переменную формы.
Затем, при закрытии формы, мы сбрасываем эту переменную.
Естественно, эта технология подразумевает написание некоторого кода, поэтому,
если вы не расположены к этому действию, пропустите мое дальнейшее
повествование.
TMyForm = class(TForm)
...
private
FormVar: ^TMyForm;
public
constructor Create(AOwner: TComponent; var AFormVar: TMyForm);
destructor Destroy; override;
end;
constructor TMyForm.Create(AOwner: TComponent; var AFormVar: TMyForm);
begin
FormVar := @AFormVar;
inherited Create;
.....
end;
destructor TMyForm.Destroy;
begin
FormVar^ := nil;
inherited Destroy;
end;
MyForm := TMyForm.Create(Self, MyForm);
MyOtherForm := TMyForm.Create(Self, MyOtherForm);
|
Этот код при разрушении окна автоматически сбрасывает все, что вы передаете в
AFormVar, в nil.
Как вы, наверное, заметили, частный член FormVar реально является указателем
на указатель. Так, читая содержимое памяти, адрес которой содержится в FormVar,
мы реально получаем переменную формы. Таким образом мы можем просто установить
ее в nil.
|