Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zeit messen
elzer - Sa 04.10.08 20:47
Titel: Zeit messen
Hey Leute,
Also ich versuche mein Problem zu schildern. Ich bin gerade dabei die Grundlagen durchzuarbeiten und habe versucht ein Paar Funktionen in ein Programm zu bringen. Ich habe also den Quelltext für Tic Tac Toe geschrieben. Die Angabe, welcher Spieler am Zug ist habe ich in einer Radiobox, also der Radiobutton des jeweiligen Spieler ist 'checked=true'^^.
So jetzt habe ich mir überlegt, dass die Zeit, die jeder Spieler am Zug ist in einem Label gemessen wird. Da ich mit Zeitfunktionen usw wie es z.B.
http://www.delphi-forum.de/viewtopic.php?t=77632&highlight=zeit+messen hier beschrieben wird nichts anfangen kann habe ich es so versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.ZeitFuerSpieler1; var a,b:real; begin a:=strtofloat(Label7.Caption); while spieler1.Checked=true do begin b:=a+0.01; Label7.Caption:=floattostr(b); sleep(10); end; end; |
Das Programm startet auch soweit, aber sobald ich ZeitFuerSpieler1 verwende friert es ein und ich muss es zurücksetzen. Könnt ihr mir bitte helfen, und vorallem, geht es überhaupt so? Und, sobald ich Spieler1.Checked wieder deaktiviere (=false) würde dann die Zeit in Label7 stehen bleiben?
Vielen dank für eure Hilfe :)
Narses - Sa 04.10.08 21:07
Titel: Re: Zeit messen
Moin und :welcome: im Forum!
elzer hat folgendes geschrieben : |
geht es überhaupt so? |
Nein, das wird so nix, da du (normalerweise) unter Windows ein ereignisorientiertes Programm erstellst. ;)
Ansatz:
- wenn ein Spieler am Zug ist, in einer (globalen) Variablen die aktuelle Zeit merken, also sowas: Start := Now;
- Wenn der Spieler, der am Zug ist, wechselt, dann so die vergangene Zeit messen: Time := SecondsBetween(Start,Now);
- Start wieder auf die aktuelle Zeit setzen, damit der aktuelle Spieler wieder bei "Null" anfängt.
cu
Narses
elzer - Sa 04.10.08 21:47
Danke für deine schnelle Antwort.
Delphi kennt den Befehl 'SecondsBetween' nicht, muss ich vll irgendetwas im Quelltext mit TDateTime oder so verbinden?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var start:real; [...] procedure TForm1.aClick(Sender: TObject); var x,y:real; begin if s1.Checked=true then begin a.Text:=' X'; s1.checked:=false; Label7.Caption:=SecondsBetween(start,now); s2.checked:=true; start:=now; end; end; |
elundril - Sa 04.10.08 21:48
du musst bei uses dateutils eintragen dann sollts gehen!
elzer - Sa 04.10.08 21:53
:) Danke
'Inkompatible Typen 'Sting' und 'Int64''
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| uses dateutils var start:real; [...] procedure TForm1.aClick(Sender: TObject); var x,y:real; begin if s1.Checked=true then begin a.Text:=' X'; s1.checked:=false; Label7.Caption:=SecondsBetween(start,now); s2.checked:=true; start:=now; end; end; |
Wäre Lieb wenn ihr mir nochmal helfen könntet^^
Lg Chris
Narses - Sa 04.10.08 21:55
Moin!
elzer hat folgendes geschrieben : |
Delphi kennt den Befehl 'SecondsBetween' nicht, |
Den passenden Tipp hat dir
elundril ja schon gegeben. ;)
Du solltest aber auch hier:
elzer hat folgendes geschrieben : |
|
den Datentyp
TTime oder
TDateTime verwenden. :idea:
//EDIT: Und du musst natürlich das Ergebnis mit
IntToStr() umwandeln, wenn es in einem Label angezeigt werden soll. ;)
cu
Narses
elzer - Sa 04.10.08 22:03
Zitat: |
//EDIT: Und du musst natürlich das Ergebnis mit IntToStr() umwandeln, wenn es in einem Label angezeigt werden soll. |
Stimmt, tut mir Leid habe ich übersehen :)
Jetzt bekomme ich zwar eine Zahl angezeigt, aber diese ist viel zu groß (3432319279).
Muss ich noch in einer Zeile angeben in was er mir die Zahl im Caption (z.B. sec) ausgeben soll?
LG Chris
elzer - Sa 04.10.08 22:32
jetzt geht es, ich habe zwar nichts mehr geändert, aber nach einem Speichern und wieder Öffnen hat es funktioniert :).
Danke Leute:)
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!