Descobrir se form estar aberto

Delphi

06/10/2014

Olá sou novo em Delphi estou criando um formgrupo que utiliza varias tabelas o problema é que este formgrupo pode vir a chamar outro form (formsecao) que ao ser finalizado fecha algumas tabelas gerando erro tentei resolver desta maneira mas não deu certo onde posso está errando...

Chama formgrupo:

procedure TfrmPrincipal.Grupo1Click(Sender: TObject);
var grupo:tfrmgrupo;
begin
grupo:=tfrmgrupo.Create(self);
grupo.showModal;
end;

Chama formsecao

procedure TfrmPrincipal.S1Click(Sender: TObject);
var secao:tfrmsecao;
begin
secao:=tfrmsecao.Create(self);
secao.showModal;
end;


Evento onclose do formsecao

procedure TfrmSecao.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if tfrmgrupo = nil then
begin
dm.ibSecao.close;
dm.IBControle.Close;
showmessage('Fechou'); //Somente para saber se esta fechando..
end;
end;

Quando chamo o formsecao pelo formgrupo ao fechar o formsecao ele não fecha as tabelas e esta certo não é para fechar mesmo o problema é quando chamo o formsecao direto sem o formgrupo (formgrupo fica fechado) ao fechar o formsecao ele não fecha a tabelas e deveria já que o formgrupo esta fechado...
Alguém pode me ajudar a resolver este problema...
Francisco Júnior

Francisco Júnior

Curtidas 0

Melhor post

Renato Rubinho

Renato Rubinho

07/10/2014

Buenas,

tfrmgrupo é a classe do seu form grupo e não será "nil".

Veja no seu form grupo que deve ter a variável "frmgrupo" declarada:

var
  frmgrupo: tfrmgrupo;


é essa variável que você irá validar se está alimentada

procedure TfrmSecao.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   if          frmgrupo             = nil then
   begin
     dm.ibSecao.close;
     dm.IBControle.Close;
     showmessage('Fechou'); //Somente para saber se esta fechando..
   end;
end;


OBS: Para que isso funcione corretamente, no Close do Form grupo, você limpar a variável do form e, aproveitando, quando limpar a variável, passe tambem o "CloseAction" como CAFree para destruir o objeto.

procedure TfrmGrupo.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := CAFree;
  frmgrupo := nil;
end;


Abraççç,
Renato
GOSTEI 1

Mais Respostas

Francisco Júnior

Francisco Júnior

06/10/2014

Renato, obrigado pela resposta mas infelizmente ainda não resolveu. Colocando da forma que vc falou entrando diretamente no frmsecao ao sair fecha as tabelas ok, blz mas chamando o frmsecao pelo frmgrupo ao fechar o frmsecao para voltar ao frmgrupo as tabelas são fechadas mesmo com o frmgrupo aberto... O que ainda pode estar errado?
GOSTEI 0
Renato Rubinho

Renato Rubinho

06/10/2014

Não tinha visto a forma como você chamava.

Na sua chamada do Grupo pelo frmPrincipal, não precisa declarar uma nova variável para a criação do Form.
Utilize a frmgrupo, pois ela será alimentada e funcionará corretamente o seu controle do form aberto.

procedure TfrmPrincipal.Grupo1Click(Sender: TObject);
begin
  frmgrupo := tfrmgrupo.Create(Self);
  frmgrupo.showModal;
end;
GOSTEI 1
Francisco Júnior

Francisco Júnior

06/10/2014

Amigo muito obrigado era somente isto mesmo agradeço de mais a força...
GOSTEI 0
POSTAR