Moin!
Ich habe etliche Möglichkeiten schon durch probiert, die hier im Forum auch genannt werden, doch keine schafft es Windows nicht, mein Programm beim Herunterfahren zu beenden. Windows lässt sich folglich erst herunterfahren, wenn ich das Programm manuell beende.
Hier die mir am einleuchtesten erscheinende, nicht funktionierende Möglichkeit:
Delphi-Quellcode:
procedure WMQUERYENDSESSION(var msg: TMessage); message WM_QUERYENDSESSION;
[...]
procedure TForm1.WMQUERYENDSESSION(var msg: TMessage);
begin
inherited;
//Falls eingestellt, dass das Programm bei Klick auf "X" minimiert werden soll
MinimizeAtClose := false;
//Falls eingestellt, dass Nachfrage beim Beenden erscheint
AskForClose := false;
msg.Result := 1;
end;
Die evtl. relevanten Stellen meines Code sehen wie folgt aus:
Delphi-Quellcode:
//TNA - auf Mausklicks reagieren:
procedure TForm1.WndProc(
var Msg: TMessage);
var
Point: TPoint;
begin
if Msg.Msg = WM_USER + 20
then
begin
case Msg.lParam
of
WM_RBUTTONDOWN:
begin
SetForegroundWindow(
Handle);
GetCursorPos(Point);
PopUpMenu1.PopUp(Point.X, Point.Y);
end;
WM_LBUTTONDBLCLK:
begin
Form1.Show;
Shell_NotifyIcon(NIM_DELETE, @IconData);
end;
end;
end;
inherited;
end;
Delphi-Quellcode:
//Beim Minimieren Icon in TNA:
procedure TForm1.WMSysCommand(
var Message: TWMSysCommand);
begin
if Message.CmdType
and $FFF0 = SC_MINIMIZE
then
begin
MinimizeToTray;
end
else
inherited;
end;
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if AskForClose and (not MinimizeAtClose) then
begin
if Application.MessageBox('Programm beenden?', 'Hinweis', MB_YESNO) = IDYes then
begin
AskForClose := false;
MinimizeAtClose := false;
CanClose := true;
Application.MainForm.Close;
end else
CanClose := false;
end;
end;
Sieht jemand von euch da einen Fehler? Ich kann beim besten Willen keinen entdecken.