Problemas as fechar um formulário
Olá pessoal, tenho um problema ao fechar um formulário, vejam o seguinte:
Utilizo a forma abaixo:
frmFat_NF:=TfrmFat_NF.Create(Self);
Try
frmFat_NF.ShowModal;
finally
frmFat_NF.Release;
frmFat_NF:=Nil;
end;
Até ali, tudo bem, sempre utilizei dessa forma, mas depois de aberto o meu form, faço o que preciso e ao dar um close no formulario, ele não entra no finally do chamado acima, ele apenas fecha, e depois qdo quisermos usar, as vezes ele da mensagem que está em uso.
Alguém sabe as causas ou uma forma de resolvermos isso?
Utilizo a forma abaixo:
frmFat_NF:=TfrmFat_NF.Create(Self);
Try
frmFat_NF.ShowModal;
finally
frmFat_NF.Release;
frmFat_NF:=Nil;
end;
Até ali, tudo bem, sempre utilizei dessa forma, mas depois de aberto o meu form, faço o que preciso e ao dar um close no formulario, ele não entra no finally do chamado acima, ele apenas fecha, e depois qdo quisermos usar, as vezes ele da mensagem que está em uso.
Alguém sabe as causas ou uma forma de resolvermos isso?
Cristiano
Curtidas 0
Respostas
Joel Rodrigues
22/08/2013
Você pode simplificar isso dessa forma:
frmFat_NF:=TfrmFat_NF.Create(Self); frmFat_NF.ShowModal; FreeAndNil(frmFat_NF);
GOSTEI 0
Cristiano
22/08/2013
Olá Joel, obrigado pela dica, mas dessa forma ainda persite o problema, após o close, ele não segue a rotina o que está depois do showmodal, ou seja, não destrói o objeto!!
GOSTEI 0
Deivison Melo
22/08/2013
Crie essa PROCEDURE em uma Unit utilizada como repositório para funções:
procedure ChamaForm(aClasseForm: TComponentClass; aForm: TForm);
Depois implemente ela:
procedure ChamaForm(aClasseForm: TComponentClass; aForm: TForm);
begin
{método para chamar form}
Application.CreateForm(aClasseForm, aForm);
try
aForm.ShowModal;
finally
aForm.Free; //ou FreeAndNil(aForm);
end;
end;
Usando a PROCEDURE:
ChamaForm(TfrmPrincipal, frmPrincipal); //Primeiro parâmetro é a classe, segundo o nome DO formulário...
PS. Estou sem Delphi aqui no trabalho, então se houver algum erro na sintaxe desculpem...
Forte abraço e bons códigos!!!
Qualquer dúvida estou à disposição!
Emanoel Deivison
Recife - PE
procedure ChamaForm(aClasseForm: TComponentClass; aForm: TForm);
Depois implemente ela:
procedure ChamaForm(aClasseForm: TComponentClass; aForm: TForm);
begin
{método para chamar form}
Application.CreateForm(aClasseForm, aForm);
try
aForm.ShowModal;
finally
aForm.Free; //ou FreeAndNil(aForm);
end;
end;
Usando a PROCEDURE:
ChamaForm(TfrmPrincipal, frmPrincipal); //Primeiro parâmetro é a classe, segundo o nome DO formulário...
PS. Estou sem Delphi aqui no trabalho, então se houver algum erro na sintaxe desculpem...
Forte abraço e bons códigos!!!
Qualquer dúvida estou à disposição!
Emanoel Deivison
Recife - PE
GOSTEI 0
Joel Rodrigues
22/08/2013
Existe algum código específico no OnClose, OnShow ou OnCloseQuery deste form?
GOSTEI 0
Marco Salles
22/08/2013
Olá pessoal, tenho um problema ao fechar um formulário, vejam o seguinte:
Utilizo a forma abaixo:
frmFat_NF:=TfrmFat_NF.Create(Self);
Try
frmFat_NF.ShowModal;
finally
frmFat_NF.Release;
frmFat_NF:=Nil;
end;
Até ali, tudo bem, sempre utilizei dessa forma, mas depois de aberto o meu form, faço o que preciso e ao dar um close no formulario, ele não entra no finally do chamado acima, ele apenas fecha, e depois qdo quisermos usar, as vezes ele da mensagem que está em uso.
Alguém sabe as causas ou uma forma de resolvermos isso?
Utilizo a forma abaixo:
frmFat_NF:=TfrmFat_NF.Create(Self);
Try
frmFat_NF.ShowModal;
finally
frmFat_NF.Release;
frmFat_NF:=Nil;
end;
Até ali, tudo bem, sempre utilizei dessa forma, mas depois de aberto o meu form, faço o que preciso e ao dar um close no formulario, ele não entra no finally do chamado acima, ele apenas fecha, e depois qdo quisermos usar, as vezes ele da mensagem que está em uso.
Alguém sabe as causas ou uma forma de resolvermos isso?
MOACIR CHISTE legal este erro , nunca tinha visto utilizando o Proprietário self , apenas com o Application.
Sua rotina aparenremente esta correta apenas varia tres alterações
1) O release não é indicado .. Somente quando se quer detruir dentro dele mesmo
2)Usaria o Free
3)Seguido de Nil se a Variavel frmFat_NFnão for Local e caso tenha necessidade de testa-la seu endereço em outro local do Código
Porém esses passos aparentemente não resolvem o seu problema
Vc disse que :
ele não entra no finally
????
O Finally é a certeza que tudo que tiver abaixo dela será Executado
Coloque uma mensagem no Finally , debugue , pois o Finally é para ser sempre executado
O Joel Rodrigues tb citou alguma perguntas .. Tente responder
O Amigo Deivison colocou um método , porém tenho razões para não gostar muito do método apresentado Se me permite colocar desta forma
apesar que o método apresentado aparece aos eitos nas rebistas e artigos espalhados por ai .. Um dos motivos esta retratado aqui
https://www.devmedia.com.br/forum/carregar-o-dataset-no-datasource-do-formulario/394165
Mas como eu disse não te nada aver com o seu problema . Logo não nos percamos e seguimos
[]sds
GOSTEI 0
Cristiano
22/08/2013
Joel Rodrigues, apenas temos o close de duas tabelas, mais nada.
Marco Antonio Salles, legal a sua explicação referente ao release e tal, bom saber dessas informações, mas eu já coloquei um ponto de depuração abaixo do finally e realmente ele não passa por lá, acho super estranho isso, sobre a técnica do Deivison, eu já conhecia, mas optei por não usar.
Eu não sei mais como testar isso...
Marco Antonio Salles, legal a sua explicação referente ao release e tal, bom saber dessas informações, mas eu já coloquei um ponto de depuração abaixo do finally e realmente ele não passa por lá, acho super estranho isso, sobre a técnica do Deivison, eu já conhecia, mas optei por não usar.
Eu não sei mais como testar isso...
GOSTEI 0
Cristiano
22/08/2013
Olá galera,
Venho através deste post informar que resolvemos a parada, era cagada de programador mesmo, erro grotesco, mas encontrado.
Valeu a todos que tentaram ajudar....e fica as minhas desculpas.
Venho através deste post informar que resolvemos a parada, era cagada de programador mesmo, erro grotesco, mas encontrado.
Valeu a todos que tentaram ajudar....e fica as minhas desculpas.
GOSTEI 0
Joel Rodrigues
22/08/2013
Poderia compartilhar qual foi erro? Pois pode ser o mesmo problema de outros futuramente.
Obrigado.
Obrigado.
GOSTEI 0
Marco Salles
22/08/2013
Olá galera,
Venho através deste post informar que resolvemos a parada, era cagada de programador mesmo, erro grotesco, mas encontrado.
Valeu a todos que tentaram ajudar....e fica as minhas desculpas.
Venho através deste post informar que resolvemos a parada, era cagada de programador mesmo, erro grotesco, mas encontrado.
Valeu a todos que tentaram ajudar....e fica as minhas desculpas.
Bom vc ter informado , mas coloque o tipo de erro para arquivarmos no nosso dia a dia
[]sds
GOSTEI 0
Cristiano
22/08/2013
Olá, havia duas maneiras e lugares chamando o mesmo formulario, e não havia visto isso, e ficava depurando o chamado errado!!
GOSTEI 0
José
22/08/2013
Olá MOACIR obrigado por sinalizar que teve seu problema solucionada e por compartilhar a solução conosco.
sendo assim estou dando o tópico por concluído.
sendo assim estou dando o tópico por concluído.
GOSTEI 0