Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Timer in einer Schleife!! (https://www.delphipraxis.net/129398-timer-einer-schleife.html)

daNiii 18. Feb 2009 12:26


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]

Frankfurtoder 18. Feb 2009 12:35

Re: Timer in einer Schleife!!
 
Und wie ist dein Problem? Weißt du nicht wie man einen Timer aktiviert?

Delphi-Quellcode:
Timer.Enabled := true;
Nicht vergessen den Timer wieder zu deaktivieren...

Meflin 18. Feb 2009 12:37

Re: Timer in einer Schleife!!
 
Dann läuft die procedure aber trotzdem weiter und Eingabe kann immernoch keine erfolgen :zwinker:

mr_emre_d 18. Feb 2009 12:37

Re: Timer in einer Schleife!!
 
Schau dir mal die Enabled Eigenschaft vom TTimer an !

MfG

Frankfurtoder 18. Feb 2009 12:41

Re: Timer in einer Schleife!!
 
Zitat:

Zitat von Meflin
Dann läuft die procedure aber trotzdem weiter und Eingabe kann immernoch keine erfolgen :zwinker:

Wie wäre es mit einem Inputdialog. Da bleibt zumindest die Prozedur stehen.

DP-Maintenance 18. Feb 2009 12:44

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist je eine Delphi-Frage

Hybrid666 18. Feb 2009 13:44

Re: Timer in einer Schleife!!
 
SERVUS,


Delphi-Quellcode:
//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;
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 ;))

Hoffe das hilft dir, viel spaß!

daNiii 18. Feb 2009 18:20

Re: Timer in einer Schleife!!
 
Vielen Dank im Voraus!
Ich werde es gleich mal ausprobieren!
LG Daniela
:hi:

daNiii 20. Feb 2009 14:38

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;

ATSV 20. Feb 2009 14:42

Re: Timer in einer Schleife!!
 
Zitat:

Zitat von daNiii
Was genau bewirkt der Befehl: Timer.enabled:= true;?

Der Befehl bewirkt das der Timer eingeschaltet wird.
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 18:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz