Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TrayIcon hält das Abmelden auf (https://www.delphipraxis.net/31040-trayicon-haelt-das-abmelden-auf.html)

daniel8520 3. Okt 2004 12:00


TrayIcon hält das Abmelden auf
 
Hallo Leute,

wenn mein Programm im Tray steht, und ich mich abmleden bzw. den Rechner ausschalten will, geht das nicht mehr. Schließe ich mein programm dann vollständig, geht alles wie immer einwandfrei.
Woran kann das denn liegen, und wie bekomme ich das weg. Alle anderen Programme werden doch auch von Windows beendet, aber meins nicht! :roll:
Kann jemand helfen?

MfG
Daniel L.

BKempf 3. Okt 2004 12:03

Re: TrayIcon hält das Abmelden auf
 
Hast du evtl. im CloseQuery-Ereignis eine Userabfrage vergessen, die das Schließen z.B. bei ungespeicherten Dokumenten verhindert?

Dax 3. Okt 2004 12:04

Re: TrayIcon hält das Abmelden auf
 
Wenn Windows beendet wird, sendet es an alle offenen Programme eine WM_CLOSE und WM_CLOSEQUERY. Bei einer dieser Messages solltest du dein TrayIcon zerstören und das Programm schliessen.

Luckie 3. Okt 2004 12:13

Re: TrayIcon hält das Abmelden auf
 
Nein. Windows sendet ein MSDN-Library durchsuchenwm_queryendsession. Wenn man diese Nachricht abfängt und nicht den richtigen Wert zurückgibt, bricht Windows das Runterfahren ab.

Eventuell verhindert Code in deinem Delphi-Referenz durchsuchenOnCloseQuery-Ereignis das Beenden deines Programmes und somit das Runterfahren von Windows.

daniel8520 3. Okt 2004 12:18

Re: TrayIcon hält das Abmelden auf
 
Zitat:

Eventuell verhindert Code in deinem OnCloseQuery-Ereignis das Beenden deines Programmes und somit das Runterfahren von Windows.
Genau so war es. Ich hatte im CloseQuery CanClose := false stehen, weil die Applicaktion sich nicht beenden sollte, sonder das Prog in den Tray gehen sollte.
Da das posten von Lösungen immer gern gesehen wird, poste ich hier mal meine Lösung:
Ich hab im ClosQuery abgefragt, ob dass Form sichtbar ist, falls es so ist, dann verschiebt er es in den Tray, falls es nicht sichtbar ist, wird es geschlossen.

Danke für den Denkanstoß

:dp:

Luckie 3. Okt 2004 12:22

Re: TrayIcon hält das Abmelden auf
 
Und wenn es sichtbar ist, fährt Windows jetzt immer noch nicht runter. Nutze eine globale Variable und wenn ein WM_QUERYENDSESSION von Windows kommt, setzt du sie auf True, damit sich dein Programm beendet.

Robert Marquardt 3. Okt 2004 12:27

Re: TrayIcon hält das Abmelden auf
 
Delphi-Quellcode:
  ...
  private
    FCanClose: Boolean;
    procedure WMQueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION;
    procedure WMEndSession(var Msg: TMessage); message WM_ENDSESSION;
  ...

procedure TJoyMainForm.WMQueryEndSession(var Msg: TMessage);
begin
  // allow close of program on shutdown
  FCanClose := True;
  Msg.Result := 1;
end;

procedure TJoyMainForm.WMEndSession(var Msg: TMessage);
begin
  if Msg.WParam = 1 then
    Msg.Result := 0;
end;
So mache ich das. Wichtig ist zu wissen das die Form kein OnDestroy mehr bekommt, falls man dort
noch Finalisierungen macht, so muss man sie auch im WMEndSession erledigen.

Luckie 3. Okt 2004 12:28

Re: TrayIcon hält das Abmelden auf
 
Genau so habe ich es mir gedacht. :thumb:

mirage228 3. Okt 2004 12:29

Re: TrayIcon hält das Abmelden auf
 
Zitat:

Zitat von Robert Marquardt
So mache ich das. Wichtig ist zu wissen das die Form kein OnDestroy mehr bekommt, falls man dort
noch Finalisierungen macht, so muss man sie auch im WMEndSession erledigen.

Hi,

das wurde mit dem 7.1er Update für Delphi 7 behoben. (Er verwendet ja Delphi 7 Enterprise)

Zitat:

Zitat von D7.1 Update Readme
PROBLEME, DIE DIESES UPDATE BESEITIGT:

Ist beim Beenden einer Windows-Sitzung (durch Abmelden oder
Herunterfahren) eine VCL-basierte Delphi-Anwendung noch aktiv,
werden keine OnDestroy-Ereignisse für die Formulare der
Anwendung aufgerufen und es werden auch keine Finalisierungs-
routinen ausgeführt. Das kann zum Verlust von Daten und
Benutzereinstellungen führen (Quality Central 5332).

mfG
mirage228

Luckie 3. Okt 2004 12:32

Re: TrayIcon hält das Abmelden auf
 
Wo wurde da was behoben?
Zitat:

Zitat von Robert
das die Form kein OnDestroy mehr bekommt

Zitat:

Zitat von Readme
werden keine OnDestroy-Ereignisse für die Formulare der
Anwendung aufgerufen und es werden auch keine Finalisierungs-
routinen ausgeführt

Ich sehe da keinen Widerspruch zu Roberts Aussage.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr.
Seite 1 von 2  1 2      

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