Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Programm mit repeat anweisung hängt sich auf [gelöst]
CABALxx - Mi 03.03.04 18:57
Titel: Programm mit repeat anweisung hängt sich auf [gelöst]
Hallo
ich habe ein Programm mit einer repeat anweisung darin geschrieben, und es lässt sich auch einwandtfrei compilieren nur wenn ich dann den Button klicke ( in dessen Procedure die repeat anweisung steht ) dann hängt sich das Programm auf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var a , b: integer ; begin
repeat begin a := pos('Mithrandir', Memo1.Text ); Label2.Caption := IntToStr(a); b := StrToInt(Label1.Caption); end; until (a > 0) or (b = 15 ) ........... |
das Programm besitzt ein Memo mit einem text darin, und einen Timer , der im Label1 Secunden zählt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Zeit := Zeit + 1; Label1.Caption := IntToStr(Zeit); end; |
nur es hängt sich wie gesagt auf.....
ausserdem kann es sein das auch wenn eine der beiden bedingungen für die repeat anweisung erfüllt worden ist, nichts passiert , also nicht die anweisungen unter der schleife ausgeführt werden :?: :? ( ist nur eine böse vorahnung )
danke schonmal für die hilfe bin ehrlich gesagt ratlos woran das wieder mal liegt :oops:
Sven - Mi 03.03.04 19:04
Nur der Ordnung halber, den begin/end-Block zwischen repeat/until kannst Du weglassen.
Ansonsten sehe ich keinen Fehler. Hast Du den Timer auch eingeschaltet?
CABALxx - Mi 03.03.04 19:06
joa der timer ist an, den schalte ich mit nem andern button an un der läuft ja auch einwandtfrei
kann man ja ganz gut am Label sehn wenn der da zählt.....
ist nur ne kleine frage: kann es daran liegen das sich der Inhalt von Memo1 etwa alle 2,5 Secunden ändert ???
tomtom62 - Mi 03.03.04 19:14
Zuerst einmal solltest Du mal prüfen, ob diese Bedingungen wirklich erfüllt werden können.
Es muss also entweder 'Mithrandir' im Memotext stehen oder es sollen 15 Sekunden vergehen. In jedem Fall ist es aber wohl so, dass das Programm alle Rechenzeit verbraucht, es muss noch ein
Delphi-Quelltext
1:
| Application.ProcessMessages |
irgendwo stehen, weil sonst für 15 Sekunden nichts mehr geht.
Die Frage, die sich für mich stellt ist: Warum muss das Programm 15 Sekunden warten ?. Nach dem Klick kannst Du sowieso keine Eingabe mehr machen, weil das Programm wegen fehlender Prozessorzeit die Eingabe nicht abfragen kann..
Problematisch ist auch, dass Du scheinbar nirgendwo Zeit auf 0 setzst.
Sven - Mi 03.03.04 19:16
Das liegt wohl daran, daß Variablen bei Borland automatisch mit 0, NIL usw. initialisiert werden 8)
tomtom62 - Mi 03.03.04 19:18
Das ist wohl richtig, aber was ist beim zweiten Durchlauf ? :wink:
tomtom62 - Mi 03.03.04 19:28
CABALxx hat folgendes geschrieben: |
joa der timer ist an, den schalte ich mit nem andern button an un der läuft ja auch einwandtfrei
kann man ja ganz gut am Label sehn wenn der da zählt.....
ist nur ne kleine frage: kann es daran liegen das sich der Inhalt von Memo1 etwa alle 2,5 Secunden ändert ??? |
Und Du bist sicher, dass sich der Memotext ändert ?
Ich würde die Schleife ändern auf
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Ablauf: boolean;
ablauf:=false; Zeit:=0;
while ablauf=false do begin
Application.ProcessMessages;
a := pos('Mithrandir', Memo1.Text );
Label2.Caption := IntToStr(a);
if a > 0 then ablauf:=true; b := StrToInt(Label1.Caption);
if b > 15 then ablauf:=true;
end; |
Eventuell gingen die Abbruchbedingungen auch kürzer:
CABALxx - Mi 03.03.04 19:58
Einwandtfrei
das funktioniert ja optimal :D :D :D :D
ist auch eine wesentlich durchschaubarere Lösung
vielen dank :)
echt klasse :D
wegen den Fragen zu dem Programm :
das ist ein Teil von einem Quiz
und das 15 Secunden warten , ist die Zeit die man hat um die Frage mit zu beantworten andern falls , also falls man 15 sec oder länger braucht kommt ne meldung das die richtige antwort 'Mithrandir' gewesen wäre :wink:
tomtom62 hat folgendes geschrieben: |
Problematisch ist auch, dass Du scheinbar nirgendwo Zeit auf 0 setzst. |
joa das Programm hats nicht gestört.... lol :lol:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!