Fórum Descobrir se form estar aberto #496793

06/10/2014

0

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

Responder

Post mais votado

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

Renato Rubinho

Renato Rubinho
Responder

Gostei + 1

Mais Posts

07/10/2014

Francisco Júnior

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

Gostei + 0

07/10/2014

Renato Rubinho

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;
Responder

Gostei + 1

07/10/2014

Francisco Júnior

Amigo muito obrigado era somente isto mesmo agradeço de mais a força...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar