Fórum Como saber se o sistema está finalizando? #341767

15/05/2007

0

Olá amigos, preciso gravar numa tabela no meu banco quando o sistema é fechado, mas pra isso preciso saber quando ele está finalizando, antes da conexão ser destruída, ir no banco e gravar que o sistema foi fechado.


Como faço isso?

[]s


Titanius

Titanius

Responder

Posts

15/05/2007

Paullsoftware

não fiz esse teste mais será que no evento OnDestroy do Form Principal você não consegue isso?


Responder

Gostei + 0

15/05/2007

Nightshade

tenta o onCloseQuery
esse evento á acionado antes do formulario fechar..
se tu utiliza application.terminate;
não funcionará.
mas clicanco no [X] para finalizar ela sim.
tu ainda pode fzr assim

procedure TFMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   try
    salva;
    except
      canclose := false;
      showmessage(´ocorreu um erro ao salvar..´);
   end;
end;


breckando a aplicação de ser fechada caso de algo errado


Responder

Gostei + 0

15/05/2007

Titanius

Eu já utilizo no OnCloseQuery... mas de vez em quando não grava... me parece que já foi fechado a conexão de dados..

E Utilizo o Application.Terminate;


Qual seria melhor usar sem ser ele? Visto que meu Form Principal é um DM depois vem o Form principal da aplicação...

[]s


Responder

Gostei + 0

15/05/2007

Ipc$

procedure WndProc(var Msg: TMessage); override;
Aí vc pega todas as msgs antes que ela feche.


Responder

Gostei + 0

15/05/2007

Titanius

valeu ipc, mas qual é a mensagem de fechar, não consegui ver no debug...


[]s


Responder

Gostei + 0

15/05/2007

Ipc$

Não tenho certeza mas acho que uma delas é o WM_Close.
Vc pode gerar um txt nessa procedure, gravar e verificar as últimas msgs
que o Windows enviou para sua aplicação antes de fechar.


Responder

Gostei + 0

15/05/2007

Ipc$

Oops, não esqueça de colocar [b:18b97192dc]inherited[/b:18b97192dc] nesta procedure pq ela é override.


Responder

Gostei + 0

15/05/2007

Titanius

valeu ipc.. vou tentar aki...

[]s


Responder

Gostei + 0

16/05/2007

Rvano

Colocar uma linha antes do ´Application.Terminate;´ com a rotina de gravação não resolve o problema?


Responder

Gostei + 0

16/05/2007

Rvano

Colocar uma linha antes do ´Application.Terminate;´ com a rotina de gravação não resolve o problema?

Poderia criar uma procedure que fecha a aplicação


procedure FechaAplicativo;
begin
  DataModule.Query1.Insert;
  DataModulo.Query1.FieldByName(´Campo´).AsDate := now;
  DataModule.Query1.Post;
  Application.Terminate;
end;


Coloque esse código no seu dataModule, como público. Substitua as linhas do seu fonte que estão com ´Application.Terminate;´ por esta rotina ´FechaAplicativo´.


Responder

Gostei + 0

16/05/2007

Paullsoftware

Colocar uma linha antes do ´Application.Terminate;´ com a rotina de gravação não resolve o problema? Poderia criar uma procedure que fecha a aplicação
procedure FechaAplicativo;
begin
  DataModule.Query1.Insert;
  DataModulo.Query1.FieldByName(´Campo´).AsDate := now;
  DataModule.Query1.Post;
  Application.Terminate;
end;
Coloque esse código no seu dataModule, como público. Substitua as linhas do seu fonte que estão com ´Application.Terminate;´ por esta rotina ´FechaAplicativo´.
Eu creio que isso ele já tentou, agora me diz uma coisa!!! se o kra for no X do form e dé um clickizinho, como ele vai disparar essa procedure?? :lol:


Responder

Gostei + 0

16/05/2007

Rvano

No onClose do form coloca assim:

  
if Application.MessageBox(´Deseja fechar?´, ´Aviso´, MB_YESNO+MB_ICONQUESTION) = mrYes then
  FechaAplicativo;


Assim, sempre que alguém clicar no X do form, o aplicativo executa essa rotina!!!


Responder

Gostei + 0

16/05/2007

Rvano

No onClose do form coloca assim:

  
if Application.MessageBox(´Deseja fechar?´, ´Aviso´, MB_YESNO+MB_ICONQUESTION) = mrYes then
  FechaAplicativo;


Assim, sempre que alguém clicar no X do form, o aplicativo executa essa rotina!!!


Responder

Gostei + 0

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

Aceitar