Naja du hast ja mehr oder weniger in der Hand wann das Programm beendet wird/werden darf.
Das Formular hat ein Event "OnCloseQuery". Darin kannst du die Variable "CanClose" auf false setzen um zu verhindern, dass das Programm geschlossen werden kann (per Taskmanager/Prozess beenden kriegt man es natürlich trotzdem noch abgeschossen...).
Du könntest dir merken ob du gerade am Speichern bist oder nicht und je nachdem CanClose setzen...
Bsp:
Delphi-Quellcode:
type
TForm1 = class(TForm)
private
FBenutzerWillBeenden: Boolean;
FImSpeichern: Boolean;
public
procedure Speichern;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not (FBenutzerWillBeenden) then
FBenutzerWillBeenden := true;
CanClose := not FImSpeichern;
end;
procedure TForm1.Speichern;
begin
if not FBenutzerWillBeenden then
begin
FImSpeichern := true;
try
// In Ruhe speichern
finally
FImSpeichern := false;
end;
end
else
Close;
end;
PS: Bin mir nicht sicher obs 100%ig optimal ist, aber ist schonmal ein Ansatz. Wenn der Benutzer das Programm beenden will und er speichert gerade, dann würde das Programm NUR beendet werden wenn der Benutzer das Programm nochmal beenden will (also auf das X klickt) oder wenn das Spiel versucht nochmal zu speichern.
Man könnte auch (noch) folgendes machen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (FBenutzerWillBeenden and not FImSpeichern) then
Close;
end;
Wobei das etwas unschön aussieht...
Musst mal schauen was du mit meinem Text hier anfangen kannst
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."