Hallo,
ich schaffe es nicht, eine Schleife extern abzubrechen und auf den erledigten Abbruch zu warten.
Bisher habe ich das so gemacht (nur das Nötige):
Formular mit zwei Schaltern.
Der eine läßte die Schleife los, der andere hält sie an.
Der Implementations-Teil:
Delphi-Quellcode:
var Abbruch: Boolean = False;
abgebrochen: Boolean = false;
procedure TForm1.Button1Click(Sender: TObject);
begin
abbruch:=false;
while true do begin
application.processmessages;
if Abbruch then begin
abgebrochen:=true;
break;
end;
end;
If abbruch then begin
showmessage(inttostr(integer(abgebrochen))+'Abbruch');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i: LongInt;
begin
abgebrochen:=false;
abbruch:=true;
application.ProcessMessages;
{Wird ordentlich abgebrochen. Das "showmessage in Button1Click ist nur zum Gucken. Muss nicht sein!
Nun will ich auf den Abbruch warten und das geht nicht. Abgebrochen bleibt false und es wird auch keine Meldung im ersten //Schalter generiert. Nehme ich diese Schleife weg, geht es ordentlich. Hintergrund: Ich benutze
rekursive Funktionen und er soll erst weitermachen, wenn auch wirklich alles beendet wurde.
Man kann übrigens nicht mal mit Systemmenü oder oben rechts das Programm beenden!!!
Es sieht fast so aus, als wenn er Abbruch:=true erst an das restliche Programm sendet, wenn die
zweite Ereignisprocedure verlassen wird! Aber das ist doch Quatsch, oder?
Button2click geht so weiter:}
Delphi-Quellcode:
while not abgebrochen do begin
label1.caption:=inttostr(i);
inc(i);
application.ProcessMessages;
end;
end;
Wo mache ich meinen Denklfehler und wie geht es? Hat jemand einen Tipp?
Gruß
Matthias