Autor |
Beitrag |
greendesire
      
Beiträge: 16
|
Verfasst: Fr 23.01.09 13:01
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
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 23.01.09 13:04
|
|
greendesire 
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 23.01.09 13:13
_________________ We are, we were and will not be.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 23.01.09 13:50
grad ausprobiert, gibt eine Konflikte mit der Uhrzeit 00:00:00.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
der organist
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: Fr 23.01.09 16:07
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Maweki
      
Beiträge: 197
Ubuntu Linux
Lazarus
|
Verfasst: Fr 23.01.09 16:14
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 
      
Beiträge: 16
|
Verfasst: 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.
|
|