Hi,
ich denke Du solltest mal dies versuchen:
Delphi-Quellcode:
Interface
Type
tForm1 = class(TForm)
...
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
FEndSession: boolean;
TrayMessageDone: boolean;
protected
procedure WMQueryEndSession(var msg: tMessage); message WM_QUERYENDSESSION;
procedure WMEndSession(var msg: tMessage); message WM_ENDSESSION;
end;
Implementation
procedure tForm1.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := FEndSession; // wenn endsession flag gesetzt, dann kompromisslos beenden
if not CanClose then
begin
if not TrayMessageDone then
begin
TrayMessageDone := true;
showmessage('wir gehen jetzt in den Tray');
end;
// minimieren oder in den tray legen.
Hide;
end;
end;
procedure tForm1.WMEndSession(var msg: tMessage);
begin
FEndSession := bool(msg.wParam);
if FEndSession then
begin
// aufräumarbeiten durchführen
// ich lagere diese in eine Prozedur Finish aus, und rufe sie hier und im FormDestroy auf.
// achtung - nur einmal aufrufen - flag setzen
end;
msg.result := 0;
end;
procedure tForm1.WMQueryEndSession(var msg: tMessage);
begin
FEndSession := true;
bool(msg.result) := TRUE;
end;
ungetestet, aber ähnlich mache ich es in meinen Programmen auch - ausser der TrayMessage.
Gruss