Am Besten machst du sowas in einem Thread.
Es reicht aber auch das hier:
Delphi-Quellcode:
Procedure TMyForm.MyButtonClick (Sender : TObject);
Begin
Repeat
DoSomething;
Application.ProcessMessages;
Until UserPressedCancelButton;
UserPressedCancelButton := False;
End;
Procedure TMyForm.CancelButtonClock (Sender : TObject);
Begin
UserPressedCancelButton := True;
End;
Da Du mit 'Application.ProcessMessages' die Nachrichtenverarbeitung am Laufen hältst, kannst Du auf den 'CancelButton' klicken und das Event wird auch ausgelöst.