Prob mit Timer
Hi folks,
ich habe hier einen Timer, der von null beginnend, die Zeit hochzählen sollen. Die Sekunden laufen richtig und addieren auch die minuten. Nur die Minuten gehen über die 60 hinaus:
Delphi-Quellcode:
Hat jemand einen Rat?
procedure TAuszahlbuch.bil_ti1Timer(Sender: TObject);
var std,min,sek: String; entg1,geld: Double; begin geld:=4.10; bil_zeit1:=bil_zeit1+1; std:=Format('%.2d',[bil_zeit1 div 3600]); min:=Format('%.2d',[bil_zeit1 div 60]); sek:=Format('%.2d',[bil_zeit1 mod 60]); bilz1.Caption:=std+':'+min+':'+sek; entg1:=(bil_zeit1/3600)*geld; bilp1.Caption:=FloatToStr(geldrunden(entg1,2)); end; Grüße |
Re: Prob mit Timer
Guten Morgen.
Du musst zwischen der Zeit in Minuten (2 Stunden = 120 Minuten) und dem Minutenanteil einer Zeitangabe der Form HH:MM:SS unterscheiden. Du hast das Timer-Interval leider nicht dokumentiert, aber von deinem Code ausgehend scheinst du in der globalen Variable bil_zeit1 die Zeit in Sekunden zu zählen. Natürlich könntest du den Minutenanteil so berechnen:
Delphi-Quellcode:
Aber es geht auch noch einfacher:
min := Format('%.2d', [bil_zeit1 div 60 mod 60]);
Delphi-Quellcode:
Besser wäre aber du würdest ausschließlich mit den in Delphi üblichen Datentyp TDateTime arbeiten, da auf den Timer nicht unbedingt Verlass ist und die selbst gezählte Zeit irgendwann von der Systemzeit abweichen wird. Dazu muss bil_zeit1 als TDateTime deklariert werden und der Anfangswert einfach auf Now() gesetzt werden. Das Timer-Event würde dann so aussehen:
procedure TAuszahlbuch.bil_ti1Timer(Sender: TObject);
var entg1, geld: Double; begin geld := 4.10; // besser außerhalb des event handlers festlegen bil_zeit1 := bil_zeit1 + 1; bilz1.Caption := TimeToStr(bil_zeit1 / SecsPerDay); entg1 := (bil_zeit1 / MinsPerHour / SecsPerMin) * geld; bilp1.Caption := FloatToStr(geldrunden(entg1, 2)); end;
Delphi-Quellcode:
Getippt und nicht getestet.
uses
DateUtils; const stdEntgelt = 4.10; var bil_zeit1: TDateTime; procedure TAuszahlbuch.bil_ti1Timer(Sender: TObject); var dtDiff: TDateTime; begin dtDiff := Now - bil_zeit1; bilz1.Caption := TimeToStr(dtDiff); bilp1.Caption := Format('%m', [dtDiff / OneHour * stdEntgelt]); end; Grüße vom marabu |
Re: Prob mit Timer
Danke marabu,
aber das ist schon richtig, es soll von NULL an gezählt werden, quasi stoppuhr, die dann angehalten werden kann. Bei deinem Beispiel blick ich nicht durch, aber ich probier es aml Danke |
Re: Prob mit Timer
Also, ich habs probiert
es zeigt mir die aktuelle Zeit an und zählt nicht von null an. Wie stell ich das alles auf null, wenn der Timer startet? Danke!!! |
Re: Prob mit Timer
Delphi-Quellcode:
.Caption := Format('%m', [dtDiff / OneHour * stdEntgelt]);
uses
DateUtils; const stdEntgelt = 4.10; var bil_zeit1: TDateTime; procedure TAuszahlbuch.bil_ti1Timer(Sender: TObject); var dtDiff: TDateTime; begin dtDiff := Now - bil_zeit1; bilz1.Caption := TimeToStr(dtDiff); bilp1 end; Bevor Du den Timer startest mußt Du mit
Delphi-Quellcode:
die Startzeit initialisieren.
bil_zeit1:=now;
Grüße Klaus |
Re: Prob mit Timer
Danke Klaus,
aber würde da es nicht innerhlb des Timer immer Now-Now rechnen? |
Re: Prob mit Timer
Zitat:
Now-Now würde 0 sein. Wenn Du aber die Variable bil_zeit1 vor dem Start des Timers initialisierst, dann hast Du dort einen fixen Startwert stehen. dtDiff := Now - bil_zeit1; die Differenz geht dann bei 0 los, weil bil_zeit1 ja noch ungefähr den Wert von now hat und erhöht sich bei jedem Aufruf des Timers. Grüße Klaus |
Re: Prob mit Timer
Wer lesen kann ist klar im Vorteil
ich Trottel, klar hst recht ;-) Danke! |
Re: Prob mit Timer
Zitat:
Wie wird in obiger Zeile die Zahl so formatiert das sie nur eine Nachkommastelle anzeigt. In der OH find ich nichts konkretes für dieses Beispiel. Will sagen das es reicht wenn in der Caption "2.10" statt "2.13" o.ä. steht. Danke nochmal! |
Re: Prob mit Timer
So geht das:
Delphi-Quellcode:
Wenn dir das dabei verwendete Rundungsverfahren nicht gefällt, dann kannst du es ändern - Stichwort SetRoundMode().
bilp1.Caption := Format('%m', [Math.RoundTo(dtDiff / OneHour * stdEntgelt, -1)]);
Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr. |
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