Como Destruir um formulario executado em Show ?
Olá bom dia!
Tenho o seguinte problema:
Tenha uma aplicacao rodando em ShowModal e desejaria
passar para somente Show, até ai tudo bem.
O problema começa quando quero destruir o Formulario usando esta instrução FreeAndNil(frm)
Quando usando ShowMNodal tenho o conmtrole do fluxo quando desejo fechar um modulo da aplicacao,
até ai tudo bem, mas com Show somente, não tem como eu saber quando a aplicacao encerra o modulo,
pois preciso destruir este formulario.
Consigo destruir os outros objetos, mas o formulario não vejo como.
Então, pergunto como destruir este formulario ?
Desde já meus agradecimentos a quem puder ajudar.
100+
ANT.CARLOS/SP
-------exemplo------------------------------------
If Frm_Grupos = nil Then Begin
Application.CreateForm(TDMGRU, DMGRU);
DMGRU.Cds_Grupos.open;
Application.CreateForm(TFrm_Grupos,Frm_Grupos);
Frm_Grupos.Show;
End Else Begin
Frm_Grupos.Show;
End;
--------------------------------------------------
Tenho o seguinte problema:
Tenha uma aplicacao rodando em ShowModal e desejaria
passar para somente Show, até ai tudo bem.
O problema começa quando quero destruir o Formulario usando esta instrução FreeAndNil(frm)
Quando usando ShowMNodal tenho o conmtrole do fluxo quando desejo fechar um modulo da aplicacao,
até ai tudo bem, mas com Show somente, não tem como eu saber quando a aplicacao encerra o modulo,
pois preciso destruir este formulario.
Consigo destruir os outros objetos, mas o formulario não vejo como.
Então, pergunto como destruir este formulario ?
Desde já meus agradecimentos a quem puder ajudar.
100+
ANT.CARLOS/SP
-------exemplo------------------------------------
If Frm_Grupos = nil Then Begin
Application.CreateForm(TDMGRU, DMGRU);
DMGRU.Cds_Grupos.open;
Application.CreateForm(TFrm_Grupos,Frm_Grupos);
Frm_Grupos.Show;
End Else Begin
Frm_Grupos.Show;
End;
--------------------------------------------------
Antonio Jesus
Curtidas 0
Respostas
Gustavo Bretas
13/07/2012
Antonio, no evento OnClose do formulário, eu faço da seguinte forma:
No meu caso é viável por que eu utilizo formulário herdado, então não preciso redeclarar nos demais formulários!
procedure TfrmCadPadrao.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
No meu caso é viável por que eu utilizo formulário herdado, então não preciso redeclarar nos demais formulários!
GOSTEI 0
Eliel Martins
13/07/2012
Bom dia, Antonio !
Não sei se entendi direito, mas você pode fazer da seguinte forma :
No evento onclose do form que você vai chamar, ele é destruido.
FreeAndNil(Form2);
Ai no caso você não precisará do ELSE, sempre que chamar será criado.
Espero ter ajudado, qualquer coisa se não forma dessa forma que gostaria de fazer me avise.
Atenciosamente,
Eliel G. Martins
Não sei se entendi direito, mas você pode fazer da seguinte forma :
No evento onclose do form que você vai chamar, ele é destruido.
FreeAndNil(Form2);
Ai no caso você não precisará do ELSE, sempre que chamar será criado.
Espero ter ajudado, qualquer coisa se não forma dessa forma que gostaria de fazer me avise.
Atenciosamente,
Eliel G. Martins
GOSTEI 0
Antonio Jesus
13/07/2012
Olá bo tarde!
Obrigado pela atenção!
Fiz destruindo o form no onClose, funcionou, mas com uma resalva, gera um Exception depois de
destruido.
Meu form é herdado de um formPai, o erro não aconte lá, pois não destru-o no form-Pai.
O erro acontece depois da destruição dos objetos no End da procedure onclose;
Postei no 4Shared as imagens de erro.
favor acessar este link e ver o erro gerado.
http://www.4shared.com/photo/220J2JkM/imagem3.html
100+
ANT.CARLOS/SP
Obrigado pela atenção!
Fiz destruindo o form no onClose, funcionou, mas com uma resalva, gera um Exception depois de
destruido.
Meu form é herdado de um formPai, o erro não aconte lá, pois não destru-o no form-Pai.
O erro acontece depois da destruição dos objetos no End da procedure onclose;
Postei no 4Shared as imagens de erro.
favor acessar este link e ver o erro gerado.
http://www.4shared.com/photo/220J2JkM/imagem3.html
100+
ANT.CARLOS/SP
GOSTEI 0
Joel Rodrigues
13/07/2012
Você está destruindo vários forms que talvez sejam usados após o fechamento deste. Acredito que a melhor opção seja esta dada pelo amigo acima, definindo a variável Action como caFree.
GOSTEI 0
Antonio Jesus
13/07/2012
Olá boa noite!
então fiz o teste com um form herdado usei destruir no formPai e no form sem herança usei destruir no onclose e funcionou, blz e muito obrigado pela atenção de todos.
100+
ANT.CARLOS/SP
então fiz o teste com um form herdado usei destruir no formPai e no form sem herança usei destruir no onclose e funcionou, blz e muito obrigado pela atenção de todos.
100+
ANT.CARLOS/SP
GOSTEI 0