Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - mein Timer funktioniert nicht!
greendesire - Fr 23.01.09 13:01
Titel: mein Timer funktioniert nicht!
Wir programmieren im Moment zu dritt Sudoku und haben leider nur sehr wenige Grundkenntnisse.
Jetzt wollen wir noch einen Timer einfügen.
Er soll starten wenn man auf "Spiel starten" klickt und dann so lange laufen bis derjenige das Spiel geschafft hat.
wir haben es jetzt mit einem ttimer versucht: hier der quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Zeit := GetTickCount; Zeit := GetTickCount - Zeit; end; |
damit der Timer auch startet, haben wir einen Button Spiel starten:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin label5.Caption:=timetoStr(zeit); end; |
Wenn wir jetzt das Spiel starten und auf den Button klicken, steht in dem Label nur 00:00:00 und der Timer läuft nicht.
Was machen wir falsch?
Wäre nett, wenn uns wer helfen kann.
Liebe Grüße
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Delete - Fr 23.01.09 13:04
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin Timer1.Enabled := true; label5.Caption:=timetoStr(zeit); end; |
[edit] Achja, und was soll der Timer da eigentlich machen?
Zitat: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Zeit := GetTickCount; Zeit := GetTickCount - Zeit; end; | |
Da dürfte aber eine sehr kleine Zahl bei herauskommen.[/edit]
greendesire - Fr 23.01.09 13:09
Haben den Befehl eingefügt. Funktioniert aber nicht.
der Timer steht immer noch auf 00.00.00.
edit: wir dachten, dass er da die Anfangszeit nimmt und dann wenn man den Button klickt, soll er von der Anfangszeit die Zeit abziehen, damit die Zeit abläuft.
Gausi - Fr 23.01.09 13:13
@DeddyH: Das wird nicht reichen, wenn ich mir den Rest so ansehe. Im Timer wird das Label ja gar nciht verändert. Ich würde es mal so probieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin Startzeit := GetTickCount; label5.Caption := '0'; timer1.Enabled := True; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Timer1Timer(Sender: TObject); var Zeitvergangen: Int64; begin Zeitvergangen := GetTickCount - StartZeit; label5.Caption := IntToStr(Zeitvergangen Div 1000); end; |
elundril - Fr 23.01.09 13:16
@Gausi: Funktionierts nicht auch so? da wirs dann wenigstens schön mit Stunde:Minute:Sekunde angezeigt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Timer1Timer(Sender: TObject); var verbrauchteZeit: TDateTime begin verbrauchteZeit := now -Zeit; Label1.Caption := TimeToStr(verbrauchteZeit); end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin Zeit := now; label5.Caption := '0'; timer1.Enabled := True; end; |
das getTickCount ist total unnötig, weil das nur die Sekunden zählt die seit dem Systemstart vergangen sind.
lg elundril
Gausi - Fr 23.01.09 13:20
Ja, das sollte auch funktionieren. Allerdings könnte es sein, dass dabei um Mitternacht was schiefläuft. Deswegen habe ich das so gelassen. ;-)
elundril - Fr 23.01.09 13:50
grad ausprobiert, gibt eine Konflikte mit der Uhrzeit 00:00:00. :)
lg elundril
der organist - Fr 23.01.09 16:07
Titel: Re: mein Timer funktioniert nicht!
Naja, da zwischen dem Ausführen der beiden Befehle doch recht wenig Zeit liegt, können wir davon ausgehen, dass markierte Gettickcount (nahezu) gleich mit dem davor ist. dementsprechend ergibt sich für die Zweite ZEile: Zeit := GetTickCount - GetTickCount;, was nahezu 0 ist, wenn nicht auf 0 gerundet wird.
Andere Frage: Warum schreibt ihr nicht einfach (je nach Intervall, hab mal 1000 angenommen):
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Timer1Timer(Sender: TObject); begin if start then inc(Zeit); end; |
elundril - Fr 23.01.09 16:13
warum dann nicht gleich nur inc(Zeit);? Die Variable Start kann ja dann mit Timer1.Enabled erledigt werden. mann müsst halt den counter immer wieder zurücksetzen. und man müsst es richtig formatieren.
lg elundril
Maweki - Fr 23.01.09 16:14
Titel: Re: mein Timer funktioniert nicht!
der organist hat folgendes geschrieben : |
Andere Frage: Warum schreibt ihr nicht einfach (je nach Intervall, hab mal 1000 angenommen):
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Timer1Timer(Sender: TObject); begin if start then inc(Zeit); end; | |
Weil Timer
sehr ungenau ist.
GetTickCount ist die genauste Möglichkeit, ohne den Prozessor zu sehr zu belasten (Echtzeitthread usw.).
Das ist schon der richtige Weg.
greendesire - Sa 24.01.09 14:09
danke wir werden es mal testen, da wird bestimmt was davon funktionieren.
Leider treffen wir uns immer nur Freitag und ich hab das Programm nicht auf meinem PC.
Danke erstmal für die Hinweise ich melde mich dann nochmal obs geklappt hat.
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!