Renato Reis Postado Outubro 31, 2012 Denunciar Share Postado Outubro 31, 2012 Galera, é o seguinte.Dentro de um form1 eu chamo outro form99 dependendo de alguma condição. Acontece que este form99, poderá ser chamado por outros forms do sistema.Antes de criar uma função para isso, eu chamava o form99 dentro de cada um dos forms do sistema e funcionava perfeito.Para melhorar a funcionalidade da coisa eu criei uma função para executar este form99.Acontece que quando ao fechar o form99 o 'close' não está funcionando.Pra adiantar, já usei close, form99.close, tudo, e o form99 não fecha, nem retorna ao anterior, simplesmente reexibe o form99.Faço assim:Ao sair de um determinado formulario, executo a função para verificar se o form99 será aberto ou não.procedure TfrmDestino.FormClose(Sender: TObject; var Action: TCloseAction);begin dataModule1.qrUsuario.Close; dataModule2.qrDestino.Close; Action := CaFree; frmDestino:= NIL; LerComunicados(StrUsuario);end;No programa de funções faço o seguinte:Function LerComunicados(vUsuario: String): String;begin with dataModule2.qrDestino do begin close; sql.Clear; sql.Text:='Select * from SCCAENC where USUARIO=:xUsuario and DTLEITURA is Null'; parameters.ParamByName('xUsuario').value:=vUsuario; open; end; if dataModule2.qrDestino.RecordCount <> 0 then begin ShowMessage('Você tem comunicado(s) a ser(em) lido(s)!'); dataModule2.qrDestino.First; while not dataModule2.qrDestino.Eof do begin strCodigo:=dataModule2.qrDestinoCODIGO.AsString; try Application.CreateForm(tfrmReadNews,frmReadNews); // AQUI é ONDE EXECUTO o QUE CHAMEI DE FORM99, NA VERDADE É O FRMREADNEWS frmReadNews.showmodal; finally frmReadNews.free; end; dataModule2.qrDestino.Edit; dataModule2.qrDestinoDTLEITURA.AsDateTime:=date(); dataModule2.qrDestino.Post; end; end;end;No Form99(ReadNews) faço o Seguinte:procedure TfrmReadnews.FormCreate(Sender: TObject);begin with dataModule2.qrNews do begin close; SQL.Clear; SQL.Text:='Select * from SCCANEWS where CODIGO=:xCodigo'; Parameters.ParamByName('xCodigo').value:=strCodigo; Open; end; Label2.Caption:=strCodigo; mmDescr.Text:=datamodule2.qrNewsDESCRICAO.AsString; label7.Caption:=datamodule2.qrNewsDATA.AsString; Label6.Caption:=datamodule2.qrNewsAUTOR.AsString;end;procedure TfrmReadnews.dxButton1Click(Sender: TObject);begin close;end;Já tive um evento onclose do form99 com frmReadNews.free e frmReadNews.NIL...E não consigo fechar o form.Alguém sabe o que posso fazer?Abc Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 1, 2012 Denunciar Share Postado Novembro 1, 2012 Antes de criar uma função para isso, eu chamava o form99 dentro de cada um dos forms do sistema e funcionava perfeito.então voce já tem uma ideia onde esta o erro ( na função )ao invés de usar uma função, porque não usa uma procedure para isso ( mude e veja o resultado )abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Renato Reis Postado Novembro 1, 2012 Autor Denunciar Share Postado Novembro 1, 2012 Jhonas,Entrão não posso fazer a chamada de um form por uma função?Na verdade criei um registro de comunicados através do sistema, ou seja, se alguém deseja deixar um comunicado a todos ou a alguém especificamente registra o comunicado.No close de todos os forms, executo a função para verificar se tem algum comunicado para o usuário em questão e se tiver chamo o form para exibir o comunicado.Se isso for real, vou ter que criar a procedure dentro de todos os forms para verificar se tem comunicado e chamar o form.É isso mesmo ou você teria alguma sugestão?Abc. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Renato Reis Postado Novembro 1, 2012 Autor Denunciar Share Postado Novembro 1, 2012 Jhonas,Coloquei a procedure dentro do form, MAS mesmo assim não resolveu, ou seja, o form é chamado mas ao close, não fecha nem retorna ao form chamador.procedure TfrmDestino.FormClose(Sender: TObject; var Action: TCloseAction);begin dataModule1.qrUsuario.Close; dataModule2.qrDestino.Close; LeioComunicados; Action := CaFree; frmDestino:= NIL;end;procedure TfrmDestino.LeioComunicados;begin with dataModule2.qrDestino do begin close; sql.Clear; sql.Text:='Select * from SCCAENC where USUARIO=:xUsuario and DTLEITURA is Null'; parameters.ParamByName('xUsuario').value:=strUsuario; open; end; if dataModule2.qrDestino.RecordCount <> 0 then begin ShowMessage('Você tem comunicado(s) a ser(em) lido(s)!'); dataModule2.qrDestino.First; while not dataModule2.qrDestino.Eof do begin strCodigo:=dataModule2.qrDestinoCODIGO.AsString; try Application.CreateForm(tfrmReadNews,frmReadNews); frmReadNews.showmodal; finally frmReadNews.free; end; dataModule2.qrDestino.Edit; dataModule2.qrDestinoDTLEITURA.AsDateTime:=date(); dataModule2.qrDestino.Post; end; end;end;Acho que o problema esta no forma que é chamado e não fecha e retorna por algum motivo.Help!Abc Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Renato Reis Postado Novembro 1, 2012 Autor Denunciar Share Postado Novembro 1, 2012 Jhonas,Fiz outro teste aqui e no form chamado coloquei:procedure TfrmReadnews.dxButton1Click(Sender: TObject);begin frmReadNews.close;end;procedure TfrmReadnews.FormClose(Sender: TObject; var Action: TCloseAction);begin frmReadNews.Free; frmReadNews:= NIL;end;Fizz o evento onClose liberar da memoria o form. Isso eu faço no retorno deste form ao chamador. Fazendo este evento dentro do form dá erro de access violation Address 000000000e agora irmão? (rsrs) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 2, 2012 Denunciar Share Postado Novembro 2, 2012 experimente assim:procedure TfrmDestino.FormClose(Sender: TObject; var Action: TCloseAction); begin dataModule1.qrUsuario.Close; dataModule2.qrDestino.Close; //LeioComunicados; //Action := CaFree; frmDestino:= NIL; end; procedure TfrmDestino.LeioComunicados; begin with dataModule2.qrDestino do begin close; sql.Clear; sql.Text:='Select * from SCCAENC where USUARIO=:xUsuario and DTLEITURA is Null'; parameters.ParamByName('xUsuario').value:=strUsuario; open; end; if dataModule2.qrDestino.RecordCount <> 0 then begin ShowMessage('Você tem comunicado(s) a ser(em) lido(s)!'); dataModule2.qrDestino.First; while not dataModule2.qrDestino.Eof do begin strCodigo:=dataModule2.qrDestinoCODIGO.AsString; try if frmReadNews = nil then frmReadNews := TfrmReadNews.Create(self); except ShowMessage('Erro na criação do formulário !!'); exit; end; frmReadNews.showmodal; dataModule2.qrDestino.Edit; dataModule2.qrDestinoDTLEITURA.AsDateTime:=date(); dataModule2.qrDestino.Post; end; end; end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Renato Reis
Galera, é o seguinte.
Dentro de um form1 eu chamo outro form99 dependendo de alguma condição. Acontece que este form99, poderá ser chamado por outros forms do sistema.
Antes de criar uma função para isso, eu chamava o form99 dentro de cada um dos forms do sistema e funcionava perfeito.
Para melhorar a funcionalidade da coisa eu criei uma função para executar este form99.
Acontece que quando ao fechar o form99 o 'close' não está funcionando.
Pra adiantar, já usei close, form99.close, tudo, e o form99 não fecha, nem retorna ao anterior, simplesmente reexibe o form99.
Faço assim:
Ao sair de um determinado formulario, executo a função para verificar se o form99 será aberto ou não.
procedure TfrmDestino.FormClose(Sender: TObject; var Action: TCloseAction);
begin
dataModule1.qrUsuario.Close;
dataModule2.qrDestino.Close;
Action := CaFree;
frmDestino:= NIL;
LerComunicados(StrUsuario);
end;
No programa de funções faço o seguinte:
Function LerComunicados(vUsuario: String): String;
begin
with dataModule2.qrDestino do
begin
close;
sql.Clear;
sql.Text:='Select * from SCCAENC where USUARIO=:xUsuario and DTLEITURA is Null';
parameters.ParamByName('xUsuario').value:=vUsuario;
open;
end;
if dataModule2.qrDestino.RecordCount <> 0 then
begin
ShowMessage('Você tem comunicado(s) a ser(em) lido(s)!');
dataModule2.qrDestino.First;
while not dataModule2.qrDestino.Eof do
begin
strCodigo:=dataModule2.qrDestinoCODIGO.AsString;
try
Application.CreateForm(tfrmReadNews,frmReadNews); // AQUI é ONDE EXECUTO o QUE CHAMEI DE FORM99, NA VERDADE É O FRMREADNEWS
frmReadNews.showmodal;
finally
frmReadNews.free;
end;
dataModule2.qrDestino.Edit;
dataModule2.qrDestinoDTLEITURA.AsDateTime:=date();
dataModule2.qrDestino.Post;
end;
end;
end;
No Form99(ReadNews) faço o Seguinte:
procedure TfrmReadnews.FormCreate(Sender: TObject);
begin
with dataModule2.qrNews do
begin
close;
SQL.Clear;
SQL.Text:='Select * from SCCANEWS where CODIGO=:xCodigo';
Parameters.ParamByName('xCodigo').value:=strCodigo;
Open;
end;
Label2.Caption:=strCodigo;
mmDescr.Text:=datamodule2.qrNewsDESCRICAO.AsString;
label7.Caption:=datamodule2.qrNewsDATA.AsString;
Label6.Caption:=datamodule2.qrNewsAUTOR.AsString;
end;
procedure TfrmReadnews.dxButton1Click(Sender: TObject);
begin
close;
end;
Já tive um evento onclose do form99 com frmReadNews.free e frmReadNews.NIL
...E não consigo fechar o form.
Alguém sabe o que posso fazer?
Abc
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.