Ich verwende das:
Delphi-Quellcode:
Type
TMyForm = class (TForm)
Procedure ButtonAbbruchClick(Sender : TObject);
...
FSchleifenAbbruchErwuenscht : Boolean;
Property SchleifenAbbruchErwuenscht : Boolean Read FSchleifenAbbruchErwuenscht Write SetSchleifenAbbruchErwuenscht;
...
Procedure MeineSchleife;
end;
Procedure TMyForm.SetSchleifenAbbruchErwuenscht (value : Boolean);
begin
ButtonAbbruch.Enabled := not Value;
FButtonAbbruch := Value;
End;
Procedure TMyForm.MeineSchleife;
begin
SchleifenAbbruchErwuenscht := false;
try
while true do begin
Application.ProcessMessages;
if SchleifenAbbruchErwuenscht then break;
DoSomething();
end;
finally
SchleifenAbbruchErwuenscht := false;
end
end;
Procedure TMyForm.ButtonAbbruchClick(Sender : TObject);
Begin
SchleifenAbbruchErwuenscht := true;
end;
Durch den Aufruf von
Application.ProcessMessages
wird auch der Click-Handler des
ButtonAbbruch
ausgeführt. Dieser zeigt nun an, das ein Schleifenabbruch erwünscht ist.
Die Schleife bekommt das mit und kann sich beenden.
Diese Property steuert gleichzeitig, ob der Button überhaupt klickbar ist.