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.