Fórum Dúvida para liberar o form da memória #344016
02/08/2007
0
Estou chamando um form da seguinte maneira:
e estou fechando assim:
procedure TfmTeste.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; Self := NIL; end;
Só que mesmo depois de fechar o form, ele não fica como NIL. Dessa forma, na segunda vez que eu tentar abrir ele não vai entrar no IF.
Por que? estou usando o Delphi 2006
Vispo
Curtir tópico
+ 0Posts
02/08/2007
Vitor Alcantara
Gostei + 0
02/08/2007
Vitor Alcantara
Procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := Cafree; Form2 := nil;//Coloco o nome do form atribuindo o valor nil a ele end;
Dai pra chamar eu fasso assim:
begin if Form2 = NIL then Form2 := TForm2.Create(Application) else Form2.Show; end;
Gostei + 0
03/08/2007
Kohl
new_fra:TFrame; if new_fra = nil then begin new_fra := TfraNewLyric.Create(Application); with new_fra do begin Parent := pnlContent; Align := alClient; Show; end; end;
O frame eh criado num TPanel que esta no frmMain. No frmMain tem um botao pra fechar esse frame, da seguinte maneira:
if new_fra <> nil then begin fra_newlyric.Free; fra_newlyric := nil end;
Pois bem, esse botao funciona normalmente, mas eu queria colocar um botao dentro do Frame tambem, pra fechar ele. O unico jeito q eu vi foi esse:
frmMain.btnCloseClick(Self);
Ele até funciona e fecha o frame, mas dá uma mensagem de erro:
Como eu faria pra fazer esse botão fechar de forma eficiente o frame?
Obrigado desde já
Gostei + 0
04/08/2007
Kohl
Grato
Gostei + 0
04/08/2007
Martins
Coloque no OnDestroy
begin Action := caFree; Self := NIL; end;
Gostei + 0
10/08/2007
Kohl
Tentei, mas ele diz q o Action nao foi definido.
Nao entendo o que acontece, pq com o botao no form principal funciona normal, mas no botao dentro do frame sempre dá aquele erro ou dá [i:aa6680b896]Abstract Error[/i:aa6680b896].
Alguem tem uma solucao?
Gostei + 0
10/08/2007
Emerson Nascimento
e estou fechando assim:
procedure TfmTeste.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; Self := NIL; end;
Só que mesmo depois de fechar o form, ele não fica como NIL. Dessa forma, na segunda vez que eu tentar abrir ele não vai entrar no IF.
Por que? estou usando o Delphi 2006[/quote:015781cd69]
isso não tem como dar certo, visto que a variável formTeste é local no procedimento. sempre que vc clicar no botão será criada a variável sem qualquer atribuição.
crie essa variável na seção private do seu form e tente algo como:
procedure TfmTeste.Button1Click(Sender: TObject); begin if (formTeste = nil) or not formTeste.Showing then formTeste := TfmTeste.Create(Application); end; procedure TfmTeste.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TfmTeste.FormCreate(Sender: TObject); begin formTeste := nil; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)