Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Server-Client Spiel : Datenspeicherung

  Alt 21. Apr 2011, 08:57
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."
  Mit Zitat antworten Zitat