Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#12

AW: Pausenfunktion

  Alt 11. Jan 2015, 03:45
Du willst aber wohl nicht alles anhalten, sondern nur etwas bestimmtes. Was das genau ist, weißt aber nur du. Also musst du es auch selbst programmieren.
Genau

@OrakelvonDelphi:
Nehmen wir mal an, du hast eine lange dauernde Methode, sagen wir mal für das Einlesen einer großen Liste von Dateien in irgendwelche Records oder Datenbank-Tabellen. Diese Liste klapperst du normalerweise mit einer For-To-Schleife ab:

for i := 0 to z-1 do LeseDatei(Liste[i]); (LeseDatei ist deine Methode, um die Datei im übergebenen String einzulesen.)

Nun möchtest du, weil du nebenher was anderes am selben PC machen willst, eine Pausenfunktion für diese Einlese-Methode einrichten. Du setzt einen Button aufs Formular, den du z.B. Btn_PauseWeiter nennst. Nun genügen die Möglichkeiten der For-To-Schleife nicht mehr, du benötigst eine While-Schleife:
Delphi-Quellcode:
...
private
  Var
    Pause : Boolean;
    LeseId : Integer;
  
  procedure Einlesen(const Liste : TStrings);

implementation

procedure TForm1.Einlesen(const Liste : TStrings);
var
  i,z : Integer;
begin
  if not Assigned(Liste) then exit;
  z := Liste.Count;
  if z = 0 then exit;

  i := LeseId;
  LeseId := 1;
  Pause := false;
  Btn_PauseWeiter.Caption := 'Pause';

  while (i < z) and not Pause do
  begin
    LeseDatei(Liste[i]);
    inc(i);
    Application.ProcessMessages;
  end;

  // wenn durch Pause abgebrochen, dann aktuelle Position der Liste merken
  if Pause then LeseId := i else
  // sonst alles wieder zurücksetzen
  begin
    Btn_PauseWeiter.Caption := 'Einlesen';
    LeseId := 0;
  end;
end;

procedure TForm1.Btn_PauseWeiterClick(Sender: TObject);
begin
  If LeseId = 0 then Einlesen else
  begin
    if Pause then
    begin
      Btn_PauseWeiter.Caption := 'Pause';
      Pause := false;
    end else
    begin
      Btn_PauseWeiter.Caption := 'Weiter';
      Pause := true;
    end;
  end;
end;
Klickst du nun auf den Button "Pause", schaut dessen Klick-Methode nach, wie die Variable Pause gerade steht und reagiert entsprechend. Deine Einlese-Schleife fragt ebenfalls die Pause-Variable ab und reagiet entsprechend.
  Mit Zitat antworten Zitat