Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eigene Uhrzeit mit TTimer erstellen
Mr. Hunt - So 02.12.07 15:10
Titel: Eigene Uhrzeit mit TTimer erstellen
ich will ein Edit1 Feld indem steht: 00:00:00
wenn man auf Button1 klickt,
wird TTimer auf Enabled:=True gestelt und fängt an zu zählen.
bei 00:00:59 springt er um auf 00:01:00
auf Button2 wird der TTmer wieder auf Enabled:=False gestellt
wie geht das
Mr. Hunt - So 02.12.07 15:30
kann man das in irgentweiner art und weise mit einem ähnichem befehl wierd mit diesem hier machen?
Delphi-Quelltext
1:
| TTimer.Timer: E_Sek.Text:=FloatToStr(StrToFloat(E_Sek.Text) +1); |
PeterPain - So 02.12.07 15:59
Hi
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| const SecsPerDay = 3600 * 24; var Elapsed : Single; Secs : Integer; begin Elapsed := Now - FStartTime; Secs := Round(Frac(Elapsed) * SecsPerDay);
S := Format('Running since %dd %dh %dm %ds', [Trunc(Elapsed), Secs div 3600, Secs mod 3600 div 60, Secs mod 60]) |
Hab ich gerade ausm Kopf hier reingetippt, ergo ist es nicht geprüft, sollte aber gehen ;)
gruss
Mr. Hunt - So 02.12.07 16:05
Undefinierter Bezeichner: 'FStartTime' und 'S'
PeterPain - So 02.12.07 16:08
Mr. Hunt hat folgendes geschrieben: |
Undefinierter Bezeichner: 'FStartTime' und 'S' |
FStartTime musst du natürlich deklarieren. S ist ein String, den ich nur drin hab um zu veranschaulichen was man herausbekommt, du kannst auch einfach MeinEdit.Text anstelle von S schreiben.
gruss
Mr. Hunt - So 02.12.07 16:12
wie kann ich das deklarieren?
ich habs versucht, aber es kommt String und Integer = Inkompatibel Raus
(Ich bitte um QuellText )
MfG
PeterPain - So 02.12.07 16:15
Mr. Hunt hat folgendes geschrieben: |
wie kann ich das deklarieren?
ich habs versucht, aber es kommt String und Integer = Inkompatibel Raus
(Ich bitte um QuellText )
MfG |
Und ich bitte um Mitdenken! :D
FStartTime muss vom Typ TDateTime sein, alternativ auch von einem beliebigen gleitkomma Typ.
Du kannst auch einfach auf FStartTIme klicken und STRG + SHIFT + D drücken, dann sollte Delphi das Feld automatisch deklarieren.
gruss
Mr. Hunt - So 02.12.07 18:10
Titel: Re: Eigene Uhrzeit mit TTimer erstellen
ja, aber eigentlich wollte ich sowas:
Mr. Hunt hat folgendes geschrieben: |
ich will ein Edit1 Feld indem steht: 00:00:00
wenn man auf Button1 klickt,
wird TTimer auf Enabled:=True gestelt und fängt an zu zählen.
bei 00:00:59 springt er um auf 00:01:00 |
und nicht sowas:
Delphi-Quelltext
1:
| 'Running since %dd %dh %dm %ds' |
bzw sowas:
Delphi-Quelltext
1:
| Running since 39418d 17h 15m 0s |
Kroko - So 02.12.07 18:20
Warum nicht ein wenig mit dem was Dir PeterPain vorgegeben hat herum experimentieren,
selber suchen macht klug!
Delphi-Quelltext
1: 2:
| var FStart: TDateTime; |
und in ButtonClick:
Mr. Hunt - So 02.12.07 18:39
Kay, es klappt.
Nur noch ein paar schönheitsfehler.
1.die tage brauche ich nicht. wie nimmt man die raus?
2.das sieht so aus: 0:0:0:0
kann man das so ändern das da 00:00:00:00 steht?
und wenn die tage raus sind soll da stehen: 00:00:00
(ich will die uhrzeit später vergleichen, wenn da steht 0:0:0:0 geht das nicht)
PeterPain - So 02.12.07 22:14
Mr. Hunt hat folgendes geschrieben: |
Kay, es klappt.
Nur noch ein paar schönheitsfehler.
1.die tage brauche ich nicht. wie nimmt man die raus?
2.das sieht so aus: 0:0:0:0
kann man das so ändern das da 00:00:00:00 steht?
und wenn die tage raus sind soll da stehen: 00:00:00
(ich will die uhrzeit später vergleichen, wenn da steht 0:0:0:0 geht das nicht) |
Nimm dir doch bitte die Zeit, den von mir geschrieben Beitrag nicht nur zu kopieren, sondern auch zu verstehen, besonderes Augenmerk solltest du dabei auf die Funktion Format legen.
Mr. Hunt - Mo 03.12.07 20:40
PeterPain hat folgendes geschrieben: |
Mr. Hunt hat folgendes geschrieben: | Kay, es klappt.
Nur noch ein paar schönheitsfehler.
1.die tage brauche ich nicht. wie nimmt man die raus?
2.das sieht so aus: 0:0:0:0
kann man das so ändern das da 00:00:00:00 steht?
und wenn die tage raus sind soll da stehen: 00:00:00
(ich will die uhrzeit später vergleichen, wenn da steht 0:0:0:0 geht das nicht) |
Nimm dir doch bitte die Zeit, den von mir geschrieben Beitrag nicht nur zu kopieren, sondern auch zu verstehen, besonderes Augenmerk solltest du dabei auf die Funktion Format legen. |
blöd bin ich auch nicht, ich habs so geändert das es für mich passt, aber der tag störte, also hab ich das erste von den vieren (bei Format) weggelassen, was macht delphi? den tag lässt delphi drinn und die sekunden schmeist delphi raus. nach weiterem probieren, Fehlermeldungen, löschen der sekunden usw habe ich es nicht geschaft den tag rauszubringen. werfe mir also bitte nicht vor, das ich das einfach nur kopiere.
Mr. Hunt hat folgendes geschrieben: |
blöd bin ich auch nicht, ich habs so geändert das es für mich passt |
was denkst du von mir??
MG
PeterPain - Mo 03.12.07 21:39
Na, dass du blöd bist wollte ich dir nicht unterstellen, wenn du dir allerdings in der Hilfe mal die Format funktion angeguckt hättest, wüsstest du, wo das Problem ist.
Das ganze funktioniert so: Du übergibst als ersten parameter einen String, der Platzhalter enthält, der zweite enthält die Daten die anstelle der Platzhalter eingefügt werden sollen.
In meinem Beispiel sah das so aus:
Delphi-Quelltext
1:
| Format('Running since %dd %dh %dm %ds', [Trunc(Elapsed), Secs div 3600, Secs mod 3600 div 60, Secs mod 60]) |
Es sind 4 platzhalter enthalten (%d...%d...%d...%d), wie die funktionieren erklärt dir die Hilfe. Im zweiten parameter übergebe ich 4 Werte, die anstelle der platzhalter eingefügt werden, der Rest sollte nun eigentlich Selberklärend sein.
gruss
jackle32 - Mo 03.12.07 22:57
Hi,
ich hätte noch einen anderen Vorschlag. Da die Genauigkeit des Timers von der Prozessorauslastung abhängt sind die so gemessenen Zeit immer sehr ungenau.
Daher würde ich mich auf die Systemzeit beziehen. Is außerdem auch einfacher!!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| Start, Jetzt : TDateTime;
[...] procedure TForm1.Button1Click(Sender: TObject); begin Start := now; self.Timer1.Enabled := True; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Jetzt := now; self.Edit1.Text := TimeToStr(Jetzt-Start); end;
procedure TForm1.Button2Click(Sender: TObject); begin self.Timer1.Enabled := false; end; |
Zur Erklärung:
Beim Klick auf Button1 wird die aktuelle Systemzeit in Start gespeichert und der Timer gestartet. Der Timer hat eine Intervalzeit von 100 ms (kann auch größer gemachte werden, würde aber nicht größer 500 ms machen). Wenn jetzt das Timerevent kommt wird wieder die aktuelle Systemzeit ausgelesen. Die zwei Werte werden dann voneinander abgezogen und in ein Edit geschrieben. Die Funktion TimeToStr gibt automatisch das Format 00:00:00 aus.
Beim Klick auf Button2 wird der Timer einfach wieder angehalten.
Find ich wesendliche einfacher und es ist von der Zeitmessung sehr viel genauer.
Gruß Jack
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!