Descobrir se form estar aberto
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...
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
Curtidas 0
Melhor post
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:
é essa variável que você irá validar se está alimentada
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.
Abraççç,
Renato
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
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
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.
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
06/10/2014
Amigo muito obrigado era somente isto mesmo agradeço de mais a força...
GOSTEI 0