Ich denke, dass du nur deine Benutzeroberfläche verriegeln musst!!
(Tip: Actions verwenden)
Damit wird verhindert, dass eine Message in Application.ProcessMessages verarbeitet wird und du erneut in deiner Prozedur landest.
Delphi-Quellcode:
begin
BtnStart.Enabled := False; // <===
try
MachEtwasHier;
MachEtwasDort;
while (...) do
begin
MachHierWasSpektakulaeres;
Application.ProcessMessages;
end;
finally
BtnStart.Enabled := True; // <===
end;
end;
Nachtrag:
wenn das oben eine Methode deiner eigenen Klasse ist, dann wäre Folgendes empfehlenswert:
Delphi-Quellcode:
begin
// BtnStart.Enabled := False; // wird ins Formular verlagert
MachEtwasHier;
MachEtwasDort;
while (...) do
begin
MachHierWasSpektakulaeres;
// Eventhandler aufrufen, falls vorhanden
if Assigned(FOnProgress) then
FOnProgress(self); // <===
end;
// BtnStart.Enabled := True; // wird ins Formular verlagert
end;
Mit dieser Änderung kannst du von Aussen vorgeben, was passieren soll, während die Methode arbeitet.