Problemas as fechar um formulário

Delphi

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?
Cristiano

Cristiano

Curtidas 0

Respostas

Joel Rodrigues

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

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

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
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/08/2013

Existe algum código específico no OnClose, OnShow ou OnCloseQuery deste form?
GOSTEI 0
Marco Salles

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?


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

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...
GOSTEI 0
Cristiano

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/08/2013

Poderia compartilhar qual foi erro? Pois pode ser o mesmo problema de outros futuramente.
Obrigado.
GOSTEI 0
Marco Salles

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.


Bom vc ter informado , mas coloque o tipo de erro para arquivarmos no nosso dia a dia

[]sds
GOSTEI 0
Cristiano

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é

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.
GOSTEI 0
POSTAR