Para isso vamos usar o projeto proposto na postagem "Trabalhando com herança" e a modificaremos.
Na unit uFoPadrao:
Evento OnClick do BtFechar, manteremos o código:
procedure TFoPadrao.BtFecharClick(Sender: TObject);Vamos criar um ponteiro da classe TFoPadrao.
begin
Self.close;
end;
type
PonteiroPadrao = ^tfopadrao;
TFoPadrao = class(TForm)
Agora vamos criar uma variável do tipo PonteiroPadrao.
private
{ Private declarations }
Ponteiro : PonteiroPadrao;
Agora vamos adicionar uma procedure pública para criar os formulários.
procedure TFoPadrao.pCriaFormulario(out Formulario; FormClass: TFormClass);Ainda no ufopadrao teremos que criar um método para destruir uma classe filha.
begin
If TForm(Formulario) = Nil Then
TForm(Formulario) := FormClass.Create(Application);
If TForm(Formulario) Is TFoPadrao Then
// Passa o endereco do formulario
TFoPadrao(Formulario).Ponteiro := @TForm(Formulario);
TForm(Formulario).Show;
end;
// Vai liberar o objeto da memória, override para que o metodo seja disparado na classe filha
Destructor Destroy(); override;
destructor TFoPadrao.Destroy;No OnClose do fopadrao adicionaremos a chamada para o método destruidor, desta forma todos os formulários serão liberados da memória após serem fechados.
begin
inherited Destroy;
// Se o endereço não tiver destruido destroi o mesmo
if TForm(Ponteiro) <> nil then
Ponteiro^ := nil;
end;
procedure TFoPadrao.FormClose(Sender: TObject; var Action: TCloseAction);No onClick do botão CriaHerdeiro de foPrincipal, adicione o seguinte código:
begin
Destroy;
end;
procedure TFoPrincipal.BtCriaHerdeiroClick(Sender: TObject);
begin
// Passar o nome do formulario a ser criado
FoPadrao.pCriaFormulario(FoHerdado,TFoHerdado);
end;
Nenhum comentário:
Postar um comentário