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

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: 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.

{/codecitation}

Добавить комментарий