Wie kann man während der Bearbeitung einer Schleife auf Ereignisse reagieren?


Wie kann ich innerhalb einer Schleife mit jedem Durchlauf beispielsweise ein OnClick Ereignis abfragen? Ich will die Berechnung die in dieser Schleife durchgefuehrt wird auf Knopfdruck abbrechen, falls die Berechnung zu lange dauert. Nur wird die Queue in der die Ereignisse zwischengelagert werden erst am Ende der Berechnung abgefragt. Gibt es eine Funktion, daß das Programm den Knopfdruck trotzdem während der Berechnung mitbekommt?

Die Grundfunktion heißt

  Application.ProcessMessages;

mit diesem Aufruf werden die Nachrichten der Anwendung abgearbeitet. So kann man beispielsweise in einem OnClick Ereignis eines Stop-Buttons eine Variable auf true setzen, die innerhalb der Schleife zum Abbruch der Berechnungen führt:

var Abbruch : Boolean;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  Abbruch := True;
end;

procedure Schleife;
begin
  Abbruch := False;
  while ... and not(Abbruch) do begin
    Application.ProcessMessages;
    ...
  end;
end;
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ