Entwickler-Ecke

Sonstiges (Delphi) - Abfrage, ob Windows gerade herunterfährt


contondant - Di 04.09.07 06:08
Titel: Abfrage, ob Windows gerade herunterfährt
Hallo zusammen,

ich hab eine (wahrscheinlich) äusserst einfache Frage, auf die Google leider nix findet...

Beim klicken auf das Beenden-Kreuz des Formulars kommt eine Abfrage, ob das Tray-Icon auch beendet werden soll.
Funktioniert soweit, nur: Diese Abfrage kommt auch beim Herunterfahren von Windows (ähnlich wie Word, wenn ein Text nicht gespeichert wurde).


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  a : boolean;
begin
  a :=  MessageDlg('Tray auch beenden?' ,
               mtConfirmation,
               [mbYes,mbNo],
               0) = mrYes;
  if a then
    CanClose:= true
  else
  begin
    CanClose:= false;
    Form1.Visible := false;
    Form1.TrayIcon.HideTaskbarIcon;
  end;
end;


Das Tray-Icon ist ein TCoolTrayIcon


Danke schonmal!

Florian

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Delete - Di 04.09.07 08:08

Mit folgendem Code sollte sich das Problem lösen lassen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  private
    FAllowClose: Boolean;
    procedure WMEndSession(var Message: TMessage); message WM_ENDSESSION;
    procedure WMQueryEndSession(var Message: TMessage); message WM_QUERYENDSESSION;

procedure Tform1.WMEndSession(var Message: TMessage);
begin
  FAllowClose := True;
  Close;
  
  inherited;
end;

procedure Tform1.WMQueryEndSession(var Message: TMessage);
begin
  FTaskIcon.Active := False;
  FAllowClose := True;
  Close;
  
  inherited;
end;


Icon-Namen anpassen.


contondant - Di 04.09.07 11:42

Hallo,

leider lies sich das Problem damit nicht lösen. Dazu muss ich sagen, ich bin Delphi-Anfänger und hab deinen Code nur entsprechend angepasst eingebaut.
Einen Aufruf der Prozeduren hab ich jetzt mal nicht hinzugefügt, die werden vom Programm selbstständig aufgerufen wenn Windows den Beenden-Befehl sendet, oder?

Active := False;

wurde ersetzt durch

Enabled := False,

das Active gibt's beim CoolTrayIcon nicht.


Danke trozdem


Delete - Di 04.09.07 13:03


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
    CanClose:= FAllowClose;
end;


Man könnte auch die ganze Prozedur ersatzlos entfernen...