Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Windows beendet Programm nicht

  Alt 6. Aug 2005, 13:22
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.
  Mit Zitat antworten Zitat