Fórum Ajuda com Fechamento de Tela #425158
01/10/2012
0
Estou com um probleminha básico e não gostaria de fazer gambiarras para resolver, então estou recorrendo aqui ao forum para saber se alguém poderia me ajudar ou me dar algumas dicas de como eu poderia resolver o seguinte problema:
Ao abrir uma tela de pagamento que eu montei, preciso que ele execute o código abaixo. Se a condição do vReceber for verdadeira será executado o FecharPedido em seguida será apresentada a mensagem "MsgDlg" e, após o usuário clicar OK na mensagem a tela terá de ser fechada "SairClick(Self)" - é um botão com um Close.
Está tudo funcionando, exceto o comando para fechar a tela "SairClick(Self)" que já substitui por close, mas não adiantou.
O comando abaixo eu testens no OnShow, mas não ficou legal porque ele executa tudo e nem mostra a tela.
Então coloquei no OnActive, que funcionou do jeito que eu queria, mas não esta fechando a tela.
if (not dm.qCupomfpopsolic.IsNull) and (dm.qCupomfpopsolic.AsInteger > 0) then
begin
EfetuarPagamentoFPopular(fpopValor, fpopCPFSolic, fpopNomeSolic, fpopNumAut, opCXdt);
if vReceber <= 0 then begin
FecharPedido;
MsgDlg('Pagamento conluido com sucesso!',mtInformation,[mbOK]);
SairClick(Self);
end
else
dbgFormas.SetFocus;
end;
Agradeço desde já qulauqer ajuda
Vagner Almeida
Curtir tópico
+ 0Posts
01/10/2012
Deivison Melo
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
Onde na procedure abaixo eu uso o mesmo comando inserido no primeiro botão.
procedure TForm1.Button2Click(Sender: TObject);
begin
Button1Click(Sender);
end;
Gostei + 0
01/10/2012
Marcos Iwazaki
Será que vc não tem algum outra função ae que esta causando o problema?
tenta fazer um teste em uma aplicação nova...
Gostei + 0
02/10/2012
Vagner Almeida
Obrigado pela atenção de vocês. ;)
Gostei + 0
02/10/2012
Alisson Santos
Gostei + 0
02/10/2012
Deivison Melo
Forte abraço e bons códigos!
Gostei + 0
03/10/2012
Vagner Almeida
Fiz os teste como abrindo a janela como Show e funcionou, ou seja, no onShow e no onActive da janela que eu abro coloco o comando Close; e funciona. abre a ajanela e em seguida é fechada.
Mas quando abro a janela como ShowModal, não funciona.
Inicio o formulário/janela da seguinte forma
Application.CreateForm(Tfrm_venda,frm_venda); try frm_venda.ShowModal; //Se eu abrir assim frm_venda.Show; - o close no onShow funciona except FreeAndNil(frm_venda); end;
E no evento onShow faço o seguinte:
procedure Tfrm_venda.FormShow(Sender: TObject); begin Close; end;
Não precisa necessariamente ser um close, mas qualquer outra coisa que feche essa janela resolve, dentro do onShow ou onActive.
Gostei + 0
03/10/2012
Gilvanio Gonçalves
vou te ajudar, mas também preciso que me responda:
vamos basear na nova aplicação ok.
este codigo vc esta aplicando ele onde?
Application.CreateForm(Tfrm_venda,frm_venda); try frm_venda.ShowModal; except FreeAndNil(frm_venda); end;
para abrir este frm_venda é por um outro form( um form principal de aplicativo no caso por um menu, ou por um botão)?
o outro codigo já li que esta no onshow do form Frm_venda
vc quer que o frm_venda.showmodal, seja fechado no evento onshow dele, e que seja showmodal e não modal, certo?
mas na sua explicação acima vc se refere a dois forms?
e na nova aplicação esta se referindo somente a um form, o frm_venda?.
se o que vc deseja é apenas que o frm_venda.showmodal seja fechado dentro do evento dele onshow, só me diga
a aplicação do primeiro codigo acima, e acabamos com este lemga lemga, ok.
Gostei + 0
04/10/2012
Vagner Almeida
vou te ajudar, mas também preciso que me responda:
vamos basear na nova aplicação ok.
este codigo vc esta aplicando ele onde?
Application.CreateForm(Tfrm_venda,frm_venda); try frm_venda.ShowModal; except FreeAndNil(frm_venda); end;
para abrir este frm_venda é por um outro form( um form principal de aplicativo no caso por um menu, ou por um botão)?
o outro codigo já li que esta no onshow do form Frm_venda
vc quer que o frm_venda.showmodal, seja fechado no evento onshow dele, e que seja showmodal e não modal, certo?
mas na sua explicação acima vc se refere a dois forms?
e na nova aplicação esta se referindo somente a um form, o frm_venda?.
se o que vc deseja é apenas que o frm_venda.showmodal seja fechado dentro do evento dele onshow, só me diga
a aplicação do primeiro codigo acima, e acabamos com este lemga lemga, ok.
Sim, tenho a seguinte estrutura: frm_principal (que possui o menu onde tenho o menu VENDA) através dele é que eu chamo a tela de vendas (frm_vendas) e da tela de vendas eu chamo a tela de pagamento (frm_pagamento).
Existe um tipo de venda em específico, Venda Farmácia Popular, que quando se trata desse tipo de venda, e o valor coberto pelo MS (Ministério da Saúde) for o valor total da venda, então é preciso executar um procedimento e em seguida fechar a tela, pois não há mais valor a ser pago, devido ao MS ter pago o valor total da venda.
Esse procedimento eu posso colocar no evendo onShow, mas no onShow (da tela de pagamento) a tela não é visualizada. Os procedimentos são executados, mas a tela não fica visível para o usuário. Só vem aparecer quando termina toda execução.
Já no onActive, os procedimentos são executados somente quando a tela fica visível para o usuário, do jeito que eu quero, mas em ambos os eventos o close não funciona.
O que eu observei nos testes que eu fiz é que quando abro a tela frm_pagamento como SHOW, se eu colocar um close dentro do onShow ou onCreate, ele funcionará.
Mas se eu abro a tela frm_pagamento como SHOWMODAL, e colocar um close dentro do onShow ou onCreate, ele não funcionará.
O que eu fiz: coloquei um TIMER com um comando "close" que será executado assim que o procedimento de pagamento é finalizado. Resolveu o problema. Mas isso é uma gambiarra!
Eu falei somente com relação a tela de venda porque qualquer formulário que vocâ abrir como showmodal irá se comportar, com relaçãoao Close, da forma como eu descrevi acima.
Obs.: o stilo dos formulários é NORMAL.
Abraços e muito obrigado pela ajuda
Gostei + 0
04/10/2012
Vagner Almeida
Sim, tenho a seguinte estrutura: frm_principal (que possui o menu onde tenho o menu VENDA) através dele é que eu chamo a tela de vendas (frm_vendas) e da tela de vendas eu chamo a tela de pagamento (frm_pagamento).
Existe um tipo de venda em específico, Venda Farmácia Popular, que quando se trata desse tipo de venda, e o valor coberto pelo MS (Ministério da Saúde) for o valor total da venda, então é preciso executar um procedimento e em seguida fechar a tela, pois não há mais valor a ser pago, devido ao MS ter pago o valor total da venda.
Esse procedimento é executado na tela de pagamento (frm_pagamento) e eu posso colocar no evendo onShow, mas no onShow a tela não é visualizada. Os procedimentos são executados, mas a tela não fica visível para o usuário. Só vem aparecer quando termina toda execução.
Já no onActive, os procedimentos são executados somente quando a tela fica visível para o usuário, do jeito que eu quero, mas em ambos os eventos o close não funciona.
O que eu observei nos testes que eu fiz é que quando abro a tela frm_pagamento como SHOW, se eu colocar um close dentro do onShow ou onActive, ele funcionará.
Mas se eu abro a tela frm_pagamento como SHOWMODAL, e colocar um close dentro do onShow ou onActive, ele não funcionará.
O que eu fiz: coloquei um TIMER com um comando "close" que será executado assim que o procedimento de pagamento é finalizado. Resolveu o problema. Mas isso é uma gambiarra!
Eu falei, anteriormente, somente com relação a tela de venda porque qualquer formulário que você abrir como showmodal irá se comportar, com relaçãoao Close, da forma como eu descrevi acima.
Obs.: o estilo dos formulários é NORMAL.
Abraços e muito obrigado pela ajuda
Gostei + 0
04/10/2012
Alisson Santos
if (not dm.qCupomfpopsolic.IsNull) and (dm.qCupomfpopsolic.AsInteger > 0) then
begin
EfetuarPagamentoFPopular(fpopValor, fpopCPFSolic, fpopNomeSolic, fpopNumAut, opCXdt);
if vReceber <= 0 then begin
FecharPedido;
MsgDlg('Pagamento conluido com sucesso!',mtInformation,[mbOK]);
SairClick(Self);
end
else
dbgFormas.SetFocus;
end;Amigo basta você dar um Self.close no lugar do SairClick, pois vai estar falando para fechar o formulário ativo no momento.
Gostei + 0
04/10/2012
Gilvanio Gonçalves
Sim, tenho a seguinte estrutura: frm_principal (que possui o menu onde tenho o menu VENDA) através dele é que eu chamo a tela de vendas (frm_vendas) e da tela de vendas eu chamo a tela de pagamento (frm_pagamento).//OK
Existe um tipo de venda em específico, Venda Farmácia Popular, que quando se trata desse tipo de venda, e o valor coberto pelo MS (Ministério da Saúde) for o valor total da venda, então é preciso executar um procedimento e em seguida fechar a tela, pois não há mais valor a ser pago, devido ao MS ter pago o valor total da venda.
Esse procedimento é executado na tela de pagamento (frm_pagamento) e eu posso colocar no evendo onShow, mas no onShow a tela não é visualizada. Os procedimentos são executados, mas a tela não fica visível para o usuário. Só vem aparecer quando termina toda execução.
Já no onActive, os procedimentos são executados somente quando a tela fica visível para o usuário, do jeito que eu quero, mas em ambos os eventos o close não funciona.
vamos lá o procedimento que vc diz é este Abaixo:
if (not dm.qCupomfpopsolic.IsNull) and (dm.qCupomfpopsolic.AsInteger > 0) then
begin
EfetuarPagamentoFPopular(fpopValor, fpopCPFSolic, fpopNomeSolic, fpopNumAut, opCXdt);
if vReceber <= 0 then begin
FecharPedido;
MsgDlg('Pagamento conluido com sucesso!',mtInformation,[mbOK]);
SairClick(Self);
end
else
dbgFormas.SetFocus;
end;
este procedimento faz uma verificação com valores de tabelas se vreceber é <= 0 ele chama uma function qué para fecharPedido; ( um form) que deve ser frm_vendas,ok?
e logo abaixo envia uma mensagem para o usuario que o pagamento foi concluido, ok.
vc apos a mensagem colocou SairClick(self), se refere a algum botão não sei, o que o sairclick(self) tem que fazer?
ai se foi maior ou diferente de 0, dbgforma.setfocus// é um dbedit acredito eu, de qual form?
depois da mensagem é que vc quer que feche um formulario é isto?
qual formulario, o nome dele?
me responda esta coisas que te passo o comando de facahar sendo showmodal.
o cologa ai disse para mudar de SairClick(self) para self.close, nem um dos dois ira funcionar se vc não disser qual form tera que ser fechado, apos a mensagem!
Gostei + 0
04/10/2012
Vagner Almeida
Lembre-se de chamara o formulário como showmodal, e no evendo onshow desse form que você abriu como showmodal, coloque um close, veja se vai fechar!
Gostei + 0
04/10/2012
Vagner Almeida
Quando é executado e concluido todo o procedimento de pagamento, é apresentado a mensagem "Pagamento conluido com sucesso!".
O SairClick é um menu e eu utilizo o codigo dele para fechar a tela de pagamento após ter concluido o pagamento.
Ou seja, Abro a tela de pagamento, executo procedimento de pagamento, e fecho a tela de pagamento, tudo de forma automática.
Então o problema é esse, ele faz tudo direitinho, mas na hora de fechar.... não fecha.
Gostei + 0
05/10/2012
Gilvanio Gonçalves
Lembre-se de chamara o formulário como showmodal, e no evendo onshow desse form que você abriu como showmodal, coloque um close, veja se vai fechar!
se entendi, vc chama o frm_vendas no estilo sowmodal e deseja que no evento onshow deste mesmo form o frm_vendas ele seja
fechado?
assim ele nem vai abrir, se esta sendo chamado por um botão ou um menu, ou por outro form, modal ou showmodal, e no evento onshow que é o evento para uso de rotinas de verificação etc.
se for para fechar no onshow somente close, não funcionará.
se vc que chamar um form showmodal e ao mesmo tempo ele seja fechado no evento on show do mesmo, vamos usar o handle.
no on show do form coloque esta codigo:
PostMessage(FrmVendas.Handle, WM_CLOSE, 0, 0);
como disse, ele antes de abrir sera fechado, dai basta vc determinar um tempo para ele ser fechado.
tai então o codigo que fecha o mesmo form no evento onshow sendo modal ou showmdal.
Gostei + 0
05/10/2012
Gilvanio Gonçalves
Quando é executado e concluido todo o procedimento de pagamento, é apresentado a mensagem "Pagamento conluido com sucesso!".
O SairClick é um menu e eu utilizo o codigo dele para fechar a tela de pagamento após ter concluido o pagamento.
Ou seja, Abro a tela de pagamento, executo procedimento de pagamento, e fecho a tela de pagamento, tudo de forma automática.
Então o problema é esse, ele faz tudo direitinho, mas na hora de fechar.... não fecha.
veja como se usa o handle:
se for fechar o proprio formulario :
PostMessage(Handle, WM_CLOSE, 0, 0);
Passe como parâmetro o Handle do form que você deseja fechar.
vamos supor assim, vc esta no form FrMvendas e você está criando o form Frmpagamento, então ficaria assim:
Código:
PostMessage(Frmpagamento.Handle, WM_CLOSE, 0, 0);
e é isto.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.