![]() |
Timer in einer Schleife!!
Hallo!
In meinem Programm möchte ich einen Prozess 20 mal durchlaufen lassen. - Deshalb habe ich eine Schleife erstellt (wie unten nachgestellt). Während dem Durchgang sollte das Programm eine kurze Pause einlegen. In dieser Zeit soll der Benützer ein EditFeld ausfüllen können. Danach soll die Schleife ungestört weiterlaufen und den Timer bei jeden Durchgang aktivieren. Ich hoffe ihr könnt mir helfen. :gruebel:
Delphi-Quellcode:
procedure TForm1.Start1Click(Sender: TObject);
var I: integer; begin For I := 1 to 20 do begin Fragestellung(); // -> [b]Hier möchte ich den Timer aktivieren[/b] <- Edit1.Visible:= false; if Edit1.Text = Label1.caption then begin RoderF.Font.Color:= clgreen; RoderF.Caption:= 'Richtig!!!'; end else begin RoderF.Font.Color:= clred; RoderF.Caption:= 'Leider falsch!'; end; Label1.Visible:= true; Label1.Visible:= false; Label2.Visible:= true; end; showmessage('Das Spiel ist beendet'); lb_green.Caption:= ''; lb_blue.Caption:= ''; end; procedure TForm1.Timer1Timer(Sender: TObject); begin end; DANKE !! :dancer: [edit=Sharky]Pre-Tags eingefügt. Mfg, Sharky[/edit] [edit=mkinzler]Delphi-Tag ist besser, da Fettschrift bei Pre auch nicht funktioniert Mfg, mkinzler[/edit] |
Re: Timer in einer Schleife!!
Und wie ist dein Problem? Weißt du nicht wie man einen Timer aktiviert?
Delphi-Quellcode:
Nicht vergessen den Timer wieder zu deaktivieren...
Timer.Enabled := true;
|
Re: Timer in einer Schleife!!
Dann läuft die procedure aber trotzdem weiter und Eingabe kann immernoch keine erfolgen :zwinker:
|
Re: Timer in einer Schleife!!
Schau dir mal die Enabled Eigenschaft vom TTimer an !
MfG |
Re: Timer in einer Schleife!!
Zitat:
|
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist je eine Delphi-Frage |
Re: Timer in einer Schleife!!
SERVUS,
Delphi-Quellcode:
das wäre jetzt mal mein lösungsansatz, für fehler entschuldige ich mich ma, ich hab das grade zusammengeschustert sogut es ging (ich weiß der code ist bescheiden formattiert, aber wie mans bekommt gibt mans auch wieder ab ;))
//globale var:
var Counter : Integer; // wenn ein neues spiel gestartet wird, bitte Counter auf 1 initialisieren, das schreib ich hier net in den code *trivial* procedure TForm1.Start1Click(Sender: TObject); var I: integer; begin timer1.interval := 10000; // zeit für den nutzer, das editfeld zu bearbeiten (in ms) Fragestellung(); timer1.enabled := true; // timer1 sollte bis zum spielstart nicht enabled sein! erst hier wird er gestartet! end; procedure TForm1.Timer1Timer(Sender: TObject); begin inc (counter) // den counter um 1 erhöhen // hier ist dein code aus der anderen procedure Edit1.Visible:= false; if Edit1.Text = Label1.caption then begin RoderF.Font.Color:= clgreen; RoderF.Caption:= 'Richtig!!!'; end else begin RoderF.Font.Color:= clred; RoderF.Caption:= 'Leider falsch!'; end; Label1.Visible:= true; Label1.Visible:= false; Label2.Visible:= true; if counter < 20 then // wurden weniger als 20 fragen gestellt, weitermachen! Fragestellung () else //wurden schon 20 gestellt, dann das spiel beenden (auch wieder ein stück deines codes aus der procedure weiter oben) begin showmessage('Das Spiel ist beendet'); lb_green.Caption:= ''; lb_blue.Caption:= ''; timer1.enabled := false; // timer stoppen, da spiel beendet end; end; Hoffe das hilft dir, viel spaß! |
Re: Timer in einer Schleife!!
Vielen Dank im Voraus!
Ich werde es gleich mal ausprobieren! LG Daniela :hi: |
Re: Timer in einer Schleife!!
Hi!
Danke für eure Hilfe. Leider konnte mir aber keiner bei meinem Problem helfen. Meinen aktuellen Programmiercode habe ich unten angeführt. Info: bei meinem Programm handelt es sich um einen Vokabeltrainer. Problem: Der Timer funktioniert nicht (das Programm läuft durch ohne zu halten) Kann mir bitte jemand helfen. Oder mir erklären wie ein Timer genau funktioniert! Was genau bewirkt der Befehl: Timer.enabled:= true;? Vielen DAnk im Voraus.
Delphi-Quellcode:
procedure TForm1.Fragestellung();
begin Fragencounter:= Fragencounter +1; lb_Fragenzahl.Caption:= inttostr(Fragencounter) + ':' + inttostr(Fragenanzahl); lb_blue.Visible:= true; VZufallszahl := trunc(random(Vokabelcounter) + 1); randomize; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.Add('Select * from Englisch where '+inttostr(VZufallszahl)+'= VID'); adoquery1.Open; while not adoquery1.eof do begin Deutsch:= adoquery1.FieldValues['Deutsch']; Fremdsprache:= adoquery1.FieldValues['Fremdsprache']; adoquery1.next; end; adoquery1.close; timer1.interval:= 1000; timer1.Enabled:= true; starten(); end; procedure TForm1.starten(); begin if Fragencounter < 20 then begin Fragestellung(); end else begin timer1.Enabled:= false; showmessage('Das Spiel ist beendet'); lb_green.Caption:= ''; lb_blue.Caption:= ''; end; end; procedure TForm1.Start1Click(Sender: TObject); begin Fragencounter:= 0; Fragestellung(); end; procedure TForm1.FormShow(Sender: TObject); begin Fragenanzahl:= 20; Zeit:= 10000 ; end; procedure TForm1.Timer1Timer(Sender: TObject); begin // Warten auf die Lösung Ed_Loesung.Visible:= false; //Richtig oder Falsch if Ed_Loesung.Text = lb_green.caption then begin RoderF.Font.Color:= clgreen; RoderF.Caption:= 'Richtig!!!'; end else begin RoderF.Font.Color:= clred; RoderF.Caption:= 'Leider falsch!'; end; lb_green.Visible:= true; if mED.checked=true then begin lb_blue.Caption:= Fremdsprache; lb_green.Caption:= Deutsch; end else begin lb_blue.Caption:= Deutsch; lb_green.Caption:= Fremdsprache; end; sleep(300); //Warten bis zur nächsten Übung lb_green.Visible:= false; Ed_Loesung.Visible:= true; end; |
Re: Timer in einer Schleife!!
Zitat:
Timer.Enabled := False schaltet ihn wieder ab. d.h. nur solange der Timer Enabled = True ist wird er überhaupt verwendet |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz