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//Zahl in Label7 wird um 1 Hundertstel erhöht
Label7.Caption:=floattostr(b); //Variable wird ausgegeben
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!

user profile iconelzer hat folgendes geschrieben Zum zitierten Posting springen:
geht es überhaupt so?
Nein, das wird so nix, da du (normalerweise) unter Windows ein ereignisorientiertes Programm erstellst. ;)

Ansatz: 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;  //globale Variable: Start
[...]
procedure TForm1.aClick(Sender: TObject);
var x,y:real;
begin
if s1.Checked=true then
begin
a.Text:=' X';
s1.checked:=false;  //RadioButton von Spieler1 wird Deaktiviert
Label7.Caption:=SecondsBetween(start,now);  //Undefinierter Bezeichner 'SecondsBetween'
s2.checked:=true; //RadioButton von Spieler2 wird Aktiviert
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);  //Inkompatible Typen 'Sting' und 'Int64' 
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!

user profile iconelzer hat folgendes geschrieben Zum zitierten Posting springen:
Delphi kennt den Befehl 'SecondsBetween' nicht,
Den passenden Tipp hat dir user profile iconelundril ja schon gegeben. ;)

Du solltest aber auch hier:
user profile iconelzer hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
var start:real;  //globale Variable: Start                    
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:)