Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm beenden (https://www.delphipraxis.net/99579-programm-beenden.html)

Nico80 14. Sep 2007 10:40


Programm beenden
 
Hallo an alle,

ich habe ein kleines Problem, was sicherlich leicht zu lösen ist.

Ich habe im OnCloseQuery-Ereignisbehandlungsroutine eine Abfrage eingebaut, die den Anwender fragt,
ob er die Anwendung wirklich schließen möchte.
So weit so gut.
Nun ist es so, dass das Beenden von Windows auf diese Weise behindert wird, da sich das Programm unter Umständen nicht von alleine schließt.
Wie kann man die Abfrage nur beim manuellen Schließen anzeigen.

Danke für Tips

ralfschwalbe 14. Sep 2007 10:46

Re: Programm beenden
 
Hallo,

sieh mal in der Hilfe unter WM_QUERYENDSESSION nach...

Wenn Du diese Message selbst behandelst, kannst Du auf das Beenden von Windows in gewünschter Weise reagieren.

Ralf

grenzgaenger 15. Sep 2007 14:02

Re: Programm beenden
 
oder du machst 'n kleinen timer, wo du nach 'n paar sekunden, automatisch das close aufrufst.. z.b. nach 3 oder 5 sekunden...

s-off 15. Sep 2007 14:08

Re: Programm beenden
 
Zitat:

Zitat von grenzgaenger
oder du machst 'n kleinen timer, wo du nach 'n paar sekunden, automatisch das close aufrufst.. z.b. nach 3 oder 5 sekunden...

Was soll so ein Gefrickel, wenn die Lösung schon genannt worden ist?

In die Private-Deklaration folgendes
Delphi-Quellcode:
procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
und ausgeführt sieht das dann so aus:
Delphi-Quellcode:
procedure TFRMmain.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
   Inherited;
   Message.Result := 1;
end;

Helmi 15. Sep 2007 14:46

Re: Programm beenden
 
Hallo,

ich mach das immer so:

Delphi-Quellcode:
private
  Windows_Session_End: Boolean;
Delphi-Quellcode:
procedure TMainForm.WMQueryEndSession (var Msg : TWMQueryEndSession);
begin
  //Windows erlauben zu beenden
  Msg.Result := 1;

  //Wenn Windows beendet wird, dann Variable auf true setzen
  Windows_Session_End := true;

  //Programm schliessen
  close;

  inherited;
end;
und im OnCloseQuery der form:
Delphi-Quellcode:
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  If Windows_Session_End or
    (MessageDlg(Msg10, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
    begin
      //Beenden erlauben
      CanClose := true;

    {...}
  else
    //Beenden nicht erlauben
    CanClose := false;
end;
Damit wird gleich beendet, ohne dass die Meldung ob man wirklich beenden will kommt.
(Bei mir werden somit gleich mal alle Sachen gespeichert)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz