Fórum form:= nil free release #331273
17/10/2006
0
FrmCadCliente := TfrmCadCliente.Create(Application);
try
FrmCadCliente.ShowModal
finally
FrmCadCliente.Release;
FrmCadCliente := nil;
end;
Isso tah cert????
Preciso colocar no evento onclose do form
action:= free
Obrigado?
Souzaaguiar
Curtir tópico
+ 0Posts
17/10/2006
Tnaires
Se você tá colocando o Action := caFree não precisa dar Release no form. Do mesmo modo, se você tá dando Release no form, não precisa colocar o Action := caFree.
Abraços
Gostei + 0
17/10/2006
Massuda
AlgumObjeto := nil;
Em Delphi/Win32, atribuir nil a algum objeto não afeta o objeto anterior (se houver); via de regra, ele simplesmente é ´perdido´ na memória.
Gostei + 0
17/10/2006
Marco Salles
souzaaguiar , voce ´insiste´ em atribuir como Owner a aplicação e depois
destroe o formulário...Use nesse caso nil como proprietário cara. As biografias assim recomendam
Eu acho isso curioso . Porque destruir um form é muito mais que libera-lo da memória... O método release , espera que todas as mensagens pendendes do windows direncionadas ao formulário sejam devidamente processadas , antes de efetivar a destruição do mesmo. Isto evita que erros estranhos ocorram , como um processo externo tente acessar o formulário(ou algum controle filho) , apos sua destruição .
é claro que em aplicaçoes menores pode não fazer diferença.. Mas quando a complexidade aumenta , sera que action substitui o release ??? eu confesso que estou surpreso com esta colocação . Pois nunca li isto en nenhum lugar
Action:=cafree é sempre bem vindo...
o que se deve ter em mente é que quando o usuário clica no ´x´ para fechar a janela(ou pressiona alt+f4, cntr+f4) , as aplicaçoes do tipo SDI , esconde os formulários...No caso de aplicaçoes do tipo MDI , esse formulários são minimizados... Para alterar este comportamento e logo a seguir liberar estes formulários da memoria uses action:=cafree;
Gostei + 0
17/10/2006
Marco Salles
A massuda , vi seu post depois de ter postado o meu... Mas acho que ele esta se referindo sobre Owner = nil e não a atribuir nil ao objeto.
Veja
[b:0dbd95863e]
Gostei + 0
17/10/2006
Tnaires
Confesso que escrevi isso levando em conta apenas a liberação do form da memória... Então, manter o Release e o Action := caFree não fica redundante né?
Gostei + 0
17/10/2006
Marco Salles
Confesso que escrevi isso levando em conta apenas a liberação do form da memória... Então, manter o Release e o Action := caFree não fica redundante né?[/quote:fbfe268a39]
Também confesso a voce que não tenho todo o embasamento teorico para afirmar que sim e nen tampouco afirmar que não... O que disse é que Destruir é diferente do que liberar e que as biografias recomendam o uso do Release para formulários.... Mas acho que este assunto deva ser mais discutido se é ou não uma redundância
Gostei + 0
17/10/2006
Martins
[b:6ca55a60b8]
[color=red:6ca55a60b8]* Self[/color:6ca55a60b8] - [color=darkblue:6ca55a60b8]O próprietário (dono) do formulário é o metodo que o chamou no caso, seria o próprio Form, então, cabe ao programador destruir (liberar) o form da memória.[/color:6ca55a60b8]
[color=red:6ca55a60b8]* Nil [/color:6ca55a60b8] - [color=darkblue:6ca55a60b8]Este metodo especifica que na pratica a aplicação é responsável pelo form, embora teoricamente é como se não houvesse proprietário, sendo assim, o form só será liberado da memória quando a aplicação for encerrada ou quando for chamado o metodo free.[/color:6ca55a60b8]
[color=red:6ca55a60b8]*Application[/color:6ca55a60b8] - [color=darkblue:6ca55a60b8]Esse metodo não é recomendado, aqui sabemos que o dono do form é aplicação, por isso para liberarmos o form temos que encerrar a plicação ou utilizarmos free. [/color:6ca55a60b8]
[/b:6ca55a60b8]
var FrmCli : TFrmCli; begin FrmCli := TFrmCli.Create(nil) ; try FrmCli.ShowModal; finally FrmCli.Free; end; end;
O Colega Michael Benford escreveu certa vez algo sobre isso, aqui no fórum até mesmo na Revista Clube Delphi.
Boa sorte e bons códigos!
Gostei + 0
19/10/2006
Souzaaguiar
De qualquer forma jah ficou bem explicado... obrigado pessoal!!!
Gostei + 0
19/10/2006
Marco Salles
então não tenha mais duvida ... Para formulário as biografias recomendam usar o método [b:a2904d664e]Release[/b:a2904d664e]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)