Problemas para fechar form.
Sou novo nesse fantástico mundo da programação, estou usando o Delphi 2010, mas estou enfrentando alguns problemas, um deles é quando programo um botão para fechar um determinado form, coloco o comando para fechar (close;)para um determinado botão e no evento Formclose do formulário digito o seguinte:
begin
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
application.Run;
end; Mas em tempo de execução, quando se pede para fechar, ao clicar no botão ‘’Não’’ da tela de confirmação de fechamento, o programa continua rodando, até ai tudo bem, mas se pedir para fechar novamente o programa, mensagem alguma e mostrada e não se consegue fechar o mesmo.
Alguém poderia me dar uma luz...
Desde já agradeço a ajuda.
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
application.Run;
end; Mas em tempo de execução, quando se pede para fechar, ao clicar no botão ‘’Não’’ da tela de confirmação de fechamento, o programa continua rodando, até ai tudo bem, mas se pedir para fechar novamente o programa, mensagem alguma e mostrada e não se consegue fechar o mesmo.
Alguém poderia me dar uma luz...
Desde já agradeço a ajuda.
Reinaldo M.
Curtidas 0
Respostas
Marco Salles
02/06/2010
O problema pode estar na criação desses formulários ???
Como vc esta istanciando esses formulários ??
São Craidos Automaticamente ou vc os Esta Craindo ???
ps: O Codigo que vc esta usando não é muito usual
Geralmente se faz assim
Mas pode ser problema na Instanciação
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
application.Run;
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
Acction:=cafree
else
Action:=caNone;
GOSTEI 0
Marco Salles
02/06/2010
O problema pode estar na criação desses formulários ???
Como vc esta istanciando esses formulários ??
São Craidos Automaticamente ou vc os Esta Craindo ???
ps: O Codigo que vc esta usando não é muito usual
Geralmente se faz assim
Mas pode ser problema na Instanciação
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
application.Run;
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
Acction:=cafree
else
Action:=caNone;
GOSTEI 0
Marco Salles
02/06/2010
O problema pode estar na criação desses formulários ???
Como vc esta istanciando esses formulários ??
São Craidos Automaticamente ou vc os Esta Craindo ???
ps: O Codigo que vc esta usando não é muito usual
Geralmente se faz assim
Mas pode ser problema na Instanciação
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
application.Run;
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
Acction:=cafree
else
Action:=caNone;
GOSTEI 0
Marco Salles
02/06/2010
O problema pode estar na criação desses formulários ???
Como vc esta istanciando esses formulários ??
São Craidos Automaticamente ou vc os Esta Craindo ???
ps: O Codigo que vc esta usando não é muito usual
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
application.Run;
Geralmente se faz assim if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
Acction:=cafree else Action:=caNone; Mas pode ser problema na Instanciação
application.Run;
Geralmente se faz assim if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) <> IdYes then
Acction:=cafree else Action:=caNone; Mas pode ser problema na Instanciação
GOSTEI 0
Marco Salles
02/06/2010
Podiam Resolver este perrengue
GOSTEI 0
Rafael Ribeiro
02/06/2010
VOCÊ JÁ TENTOU FAZER O INVERSO?
[CODE]
begin
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) = IdYes then
application.terminate;
end;
[CODE]
begin
if application.MessageBox ('Deseja Realmente Sair?','Sair do Sistema', Mb_YesNo+MB_iconQuestion) = IdYes then
application.terminate;
end;
GOSTEI 0
Rafael Ribeiro
02/06/2010
CARA, NO EVENTO ONCLICK DO PRÓPRIO BOTÃO VOCÊ DIGITA O CÓDIGO:
NÃO SERÁ NECESSÁRIO COLOCAR A PERGUNTA NO FORMCLOSE.
ESPERO TER AJUDADO.
begin
if MessageDlg('Deseja sair do Sistema?', mtconfirmation, [mbYes, mbNo], 0)
= mrYes then
begin
application.terminate;
end;
NÃO SERÁ NECESSÁRIO COLOCAR A PERGUNTA NO FORMCLOSE.
ESPERO TER AJUDADO.
GOSTEI 0
Eduardo
02/06/2010
Olha eu uso assim, precisa ver em realação ao banco de dados. Não sei se tem à ver (Firebird, DBExpress)..
Para abrir o formulário e tirar ele da memória uso assim:
procedure TformPrincipal.opcVendasClick(Sender: TObject);
var
formulario:tformPedidos;
begin
if (Application.FindComponent('formPedidos')=nil) then
begin
Formulario:=tformPedidos.Create(Application);
end;
end; E para fechar com a pergunta é mais ou menos assim: Você faz a pergunta, se for verdadeira você usa .........Application.Terminate; end else begin Abort; end; end; Acho que é mais ou menos isto. Tenta aí
var
formulario:tformPedidos;
begin
if (Application.FindComponent('formPedidos')=nil) then
begin
Formulario:=tformPedidos.Create(Application);
end;
end; E para fechar com a pergunta é mais ou menos assim: Você faz a pergunta, se for verdadeira você usa .........Application.Terminate; end else begin Abort; end; end; Acho que é mais ou menos isto. Tenta aí
GOSTEI 0
Reinaldo M.
02/06/2010
valew! muito obrigado.....
GOSTEI 0
Alberto
02/06/2010
tente colocar
Application.Terminate; ou
Halt;
isso ira força fechar a tela.
Application.Terminate; ou
Halt;
isso ira força fechar a tela.
GOSTEI 0
Lartedesign
02/06/2010
voce quer fechar a tela ou continuar a aplicação ??
se for fechar a aplicação.. utilize
se for fechar a aplicação.. utilize
if MessageDlg('Deseja realmete finalizar esta sessão ?',mtConfirmation,[mbYes,mbNo],0) = mrNo then
exit
else
application.terminate;
end;
GOSTEI 0
Lartedesign
02/06/2010
voce quer fechar a tela ou continuar a aplicação ??
se for fechar a aplicação.. utilize
se for fechar a aplicação.. utilize
if MessageDlg('Deseja realmete finalizar esta sessão ?',mtConfirmation,[mbYes,mbNo],0) = mrNo then
exit
else
application.terminate;
end;
GOSTEI 0
Marco Salles
02/06/2010
Danou-se
GOSTEI 0
Marco Salles
02/06/2010
Não vai não vai ne a pau
GOSTEI 0
Elton Ésqui
02/06/2010
Antes tarde do que nunca!
begin
case MessageDlg('Deseja mesmo encerrar o programa?', mtConfirmation, [mbYes, mbNo], 0) of
mrYes:
begin
Close;
end;
mrNo:
begin
Action := caNone;
end;
end;
end;
begin
case MessageDlg('Deseja mesmo encerrar o programa?', mtConfirmation, [mbYes, mbNo], 0) of
mrYes:
begin
Close;
end;
mrNo:
begin
Action := caNone;
end;
end;
end;
GOSTEI 0
Deivison Melo
02/06/2010
Elton Ésqui,
Vamos lá!
Nunca utilize o Halt, ele fecha o aplicativo de forma anormal, encerrando a aplicação de forma desordenada (sem retirar da memória a instância dos objetos). O correto é utilizar o Close (que internamente chama o comando Terminate), ou Terminate (Fecha a aplicação de forma ordenada, garantindo assim que eventos sejam respeitados, mensagens pendentes executadas e etc).
sempre utilizei no formulário principal da aplicação, no evento "OnCloseQuery" o seguinte comando:
if Application.MessageBox('Tem certeza que deseja sair?', 'Confirmação',
MB_IconQuestion + MB_YesNO) = idNO then
CanClose := false;
Qualquer coisa estou à disposição!!!
Emanoel Deivison
Recife - PE
Vamos lá!
Nunca utilize o Halt, ele fecha o aplicativo de forma anormal, encerrando a aplicação de forma desordenada (sem retirar da memória a instância dos objetos). O correto é utilizar o Close (que internamente chama o comando Terminate), ou Terminate (Fecha a aplicação de forma ordenada, garantindo assim que eventos sejam respeitados, mensagens pendentes executadas e etc).
sempre utilizei no formulário principal da aplicação, no evento "OnCloseQuery" o seguinte comando:
if Application.MessageBox('Tem certeza que deseja sair?', 'Confirmação',
MB_IconQuestion + MB_YesNO) = idNO then
CanClose := false;
Qualquer coisa estou à disposição!!!
Emanoel Deivison
Recife - PE
GOSTEI 0
Marco Salles
02/06/2010
Elton Ésqui,
Nunca utilize o Halt, ele fecha o aplicativo de forma anormal, encerrando a aplicação de forma desordenada (sem retirar da memória a instância dos objetos). O correto é utilizar o Close (que internamente chama o comando Terminate), ou Terminate (Fecha a aplicação de forma ordenada, garantindo assim que eventos sejam respeitados, mensagens pendentes executadas e etc).
Esta afirmação não esta 100%
O que se pensa .....
"
Halt fecha a aplicação de forma anormal, não liberando a memória alocada pelos objetos, recursos consumidos, etc. (...) Nunca utilize o Halt, ele fecha o aplicativo de forma anormal, encerrando a aplicação de forma desordenada (sem retirar da memória a instância dos objetos). O correto é utilizar o Close (que internamente chama o comando Terminate), ou Terminate (Fecha a aplicação de forma ordenada, garantindo assim que eventos sejam respeitados, mensagens pendentes executadas e etc).
" Mas lendo a documentação do Delphi e após umas "olhadas" no código fonte da VCL.
Halt respeita os objetos criados pela aplicação, que tenha sido inicializados com o parâmetro Owner apontando para algo gerenciado pelo aplicativo, como o formulário principal. Desta forma chamar Halt não irá deixar memória desalocada desnecessariamente. É claro que o sistema operacional pode não repor totalmente a memória consumida, mas isso tbm poderia ocorrer com Terminate.
GOSTEI 0
Carlos Mazzi
02/06/2010
Só pra entender o problema ainda persiste?
GOSTEI 0
Pedro Saraiva.
02/06/2010
Programa com códigos fontes
Ola pessoal,
você programador que quer um aplicativo exemplo para fins comerciais, tenho uma
dica, compre o WinPhar que vem com todos os códigos fontes e faça um programa
baseado nele, sim ele também vêm com todos os componentes para instalar, voce
além de ganhar um programa complidao, ganha tb os seus códigos fontes e seus
componentes. O programa foi desenvolvido em Delphi 7 com banco de dados
paradox, e custa apenas 20,00 reais
deem uma olhadinha ai no produto
http://produto.mercadolivre.com.br/MLB-149256966-winphar-2008-sistema-para-farmacias-e-drogarias-_JM
e ente em contato pelo e-mail pedroluissaraiva@yahoo.com.br.!
deem uma olhadinha ai no produto
http://produto.mercadolivre.com.br/MLB-149256966-winphar-2008-sistema-para-farmacias-e-drogarias-_JM
e ente em contato pelo e-mail pedroluissaraiva@yahoo.com.br.!
GOSTEI 0