Also eine private Variable im Formular sollte schon drin sein. Man darf auch nicht vergessen, das Windows mal runtergefahren wird, da ist ein einfaches verbieten des Close auch nicht so nett.
Ich hab' mal ein Copy&Paste aus einem meiner Programme, das je nach Einstellung beim "X" schließt, minimiert oder versteckt.
Delphi-Quellcode:
{TForm1}
private
procedure WMQueryEndSession (var M: TWMQueryEndSession); message WM_QUERYENDSESSION;
ShootDown : Boolean
procedure TForm1.WMQueryEndSession (var M: TWMQueryEndSession);
begin
inherited;
ShootDown := TRUE;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
// Wenn ShootDown, dann beenden
if ShootDown then begin
CanClose := TRUE;
// Kein ShootDown, nur minimieren eingestellt?
end else begin
if CBoxMinimize.Checked then begin
if CBoxNotifyIcon.Checked then AppShowHide(False) else Application.Minimize;
CanClose := FALSE;
end else begin
CanClose := TRUE;
end;
end;
end;
Zum Beenden mit einem anderen Button, wird einfach ebenfalls ShootDown vorm Close auf True gesetzt.