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/)
-   -   Delphi Stoppuhr (https://www.delphipraxis.net/126785-stoppuhr.html)

arest 2. Jan 2009 13:28


Stoppuhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo allerseits,

bin jetzt schon den halben Tag hier in der DP am suchen, werde aber irgendwie nicht so 100%ig fündig, was mein konkretes Problem anbelangt. Bin nicht besonders fitt in delphi und in sofern bitte ich um "Verständnis". Mein Anliegen, wie schon der Titel besagt, ist es eine Stoppuhr zu programmieren. So simpel, wie es wohl simpler kaum geht... Es gibt einen Button der gleichzeitig Start-/Stopfunktion übernimmt und einen zweiten Button, der die Zeit wieder zurücksetzen soll. Für mich wichitg ist vor allem die präzise Bestimmung der Zeit im Millisekundenbereich (daher auch mein nicht wirkliches fündig werden). Eine weitere "Bedingung" wäre, dass das Format durchgehend im MM:SS:MSMS format angegeben wird. Sprich 00:00:00!

Beispiele zu denen ich gekommen bin, die mir aber nicht wirklich weiter geholfen haben:

1) Beispiel 1
2) Beispiel 2 Für mich leider viel zu komplex
3) Beilspiel 3 Krieg meine Stoppuhrprogrammierung nicht mit den hier genannten "Ideen" kombiniert

Entschuldigt, dass ich ein so unfähiger Rookie bin, aber ich bin sicher, ihr könnt meinem Problem Abhilfe schaffen! Anbei noch ein Bild um meine Ausgangssituation zu demonstrieren.

MfG

taaktaak 2. Jan 2009 15:54

Re: Stoppuhr
 
Du schreibst:
Zitat:

...Es gibt einen Button der gleichzeitig Start-/Stopfunktion übernimmt...Für mich wichtig ist vor allem die präzise Bestimmung der Zeit im Millisekundenbereich
Diese Anforderungen schließen sich (aus meiner Sicht) gegenseitig aus. Wenn mittels Button die Zeitmessung gestartet bzw. gestoppt wird, ist das Reaktionsvermögen des Bedieners mit Sicherheit nicht im Millisekundenbereich - zumindest bei mir nicht.

In dem ersten Link schreibt Hagen in Beitrag #15
Zitat:

Ergo: gehe ich pragmatisch vor, GetTickCount(), und mehr geht nicht
Auch wenn das jetzt ein wenig aus dem Zusammenhang gerissen ist, unter den genannten Rahmenbedingngen halte ich die Verwendung von GetTickCount() für situationsgerecht und ausreichend.

arest 2. Jan 2009 17:18

Re: Stoppuhr
 
Ich denke logisch ist eigentlich, dass man über eine ganz einfache Abfrage (wenn zeit läuft ist a=0 und wenn nicht läuft dann a=1) sicherstellen kann, dass die zeit gestartet bzw. gestoppt wird. Natürlich hat kaum ein Mensch die Reaktionsgeschwindigkeit im Millisekundenbereich zu reagieren, natürlich kann er aber nach z.b. 01:24:32 verstrichener Zeit auf seine Stoppuhr "schlagen" (ich löse die Zeit mittels KeyPress auf Leertaste aus) und somit eine präzise Zeitangabe für benötigte Zeit erhalten!
Bezüglich des GetTickCount(): natürlich wäre mir diese Funktion präzise genug, jedoch sehe ich mich nicht im Stande alleine eine solche Programmierung zu tätigen! S.O. ich bin ein Rookie und für mich ist es schwer den Code so zu schreiben, dass über genannte Funktion die Zeit ausgegeben wird und gleichzeitig auch noch im angegebenen Format (00:00:00) dargestellt werden kann. Ich wäre somit also für jegliche weitere Anregungen offen!
Am besten, einer postet flott nen fertigen Quellcode :D

Gruß und Dankeschön im Voraus

Klaus01 2. Jan 2009 18:20

Re: Stoppuhr
 
Hallo,

so schwer wie Du dir das vorstellst ist es nicht.

Beim Starten der Uhr:

startWert := GetTickCount;

Beim Stoppen der Uhr:
stopWert := GetTickCount;

verbratenenZeit := stopWert - startWert;

Dann mußt Du nur noch die ms in Minuten und Sekunden umrechnen.

Grüße
Klaus

Darkface 2. Jan 2009 19:29

Re: Stoppuhr
 
Und für die Formatierung...

Delphi-Quellcode:
var startWert,stopWert,verbratenenZeit,millisekunden,sekunden,minuten,stunden:integer;

startWert := GetTickCount;
stopWert := GetTickCount;
verbratenenZeit := stopWert - startWert;

millisekunden:=0;sekunden:=0;minuten:=0;stunden:=0;

While verbratenenZeit > 0 do begin
  millisekunden:=millisekunden + 1;

  If millisekunden = 1000 Then
  begin
    millisekunden:=0;
    sekunden:=sekunden+1;
  end;

  If sekunden = 60 Then
  begin
    sekunden:=0;
    minuten:=minuten+1;
  end;

  If minuten = 60 Then
  begin
    minuten:=0;
    stunden:=stunden+1;
  end;

  dec(verbratenenZeit);
end;
Nur getippt, ungetestet und sicher nicht der beste Weg :D...

arest 2. Jan 2009 19:33

Re: Stoppuhr
 
auf diese methode bin ich auch an die sache rangegangen, jedoch kommen bei mir am laufenden band negative zahlen raus! (JA ich habe wirklich stopp-wert - start-wert gerechnet) und ausserdem entspricht dies in keinster weise einem möglichen reelen ergebnis! -1316470 ist das ergebins, was also 1316470 ms entsrpäche und somit 1316,470 sekunden wären?! richtig? ich habe allerdings nur 2-3 sekunden laufen lassen! besteht da irgend ein zusammenhang?

*EDIT*sorry, post war vor antwort von darkface

Darkface 2. Jan 2009 19:39

Re: Stoppuhr
 
:-D jetzt hab ich die eigentliche Formatierung vergessen ^^:

Delphi-Quellcode:
//brauchen wir noch 4 variablen mehr :)
var mil,sek,min,stu:string;
begin
[...]

If millisekunden < 1000 Then begin
  If millisekunden < 10 Then mil:='000' +IntToStr(millisekunden) Else
  If millisekunden < 100 Then mil:='00' +IntToStr(millisekunden) Else
  mil:='0' +IntToStr(millisekunden);
end;

If sekunden < 10 Then sek:='0' +IntToStr(sekunden);
end;

If minuten < 10 Then min:='0' +IntToStr(minuten);
end;

If stunden < 10 Then stu:='0' +IntToStr(stunden);
end;

Label1.Caption:=stu+':'+min+':'+sek+':'+mil;
MfG Darkface

Klaus01 2. Jan 2009 19:41

Re: Stoppuhr
 
Hallo,

welchen Typ hast Du denn Startzeit und StoppZeit gegeben?
Sie sollten vom Typ Cardinal sein.

Grüße
Klaus

Namenloser 2. Jan 2009 20:48

Re: Stoppuhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab dir mal ein kleines Beispiel zusammengestrickt :wink:

[edit]Da hab ich doch glatt den Source vergessen :wall: [7edit]

lincore 2. Jan 2009 21:16

Re: Stoppuhr
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und weils so schön ist gleich noch ein Beispiel.
Der Unterschied zu obigem Beitrag ist, dass ich eine TTimer Komponente benutzt habe, um das Label regelmäßig neu zu zeichnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 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