Советы по Delphi

         

Освобождение экземпляров формы


В нашем примере для решения задачи мы передаем конструктору переменную формы. Затем, при закрытии формы, мы сбрасываем эту переменную.

Естественно, эта технология подразумевает написание некоторого кода, поэтому, если вы не расположены к этому действию, пропустите мое дальнейшее повествование.

    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.

- Jeff Fisher [001053]



Содержание раздела