Zeitanzeige Formelproblem
Zeitanzeige Formelproblem
Vorhaben: eine Zeitanzeige im Stil 0:00:00 (h:min:sekunden)
Fenstermode
Bsp. Länge 3.50 min
leider komme ich nicht auf die korrekte Handhabung einer formel, geschweige denn, so das sich die Zahlen in Bewegung versetzen.
Im Codearchiv bin ich irgendwie nicht so richtig fündig geworden.
Für ein einfaches Beispiel wäre ich ewig dankbar, da mit timersachen
ich mich leider noch nicht so intensiv beschäftigt habe.
Danke
Fenstermode
Bsp. Länge 3.50 min
leider komme ich nicht auf die korrekte Handhabung einer formel, geschweige denn, so das sich die Zahlen in Bewegung versetzen.
Im Codearchiv bin ich irgendwie nicht so richtig fündig geworden.
Für ein einfaches Beispiel wäre ich ewig dankbar, da mit timersachen
ich mich leider noch nicht so intensiv beschäftigt habe.
Danke
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Was möchtest Du denn genau...
Wenn Du nur die Zeit im Format "0:00:00" angezeigt haben möchtest, geht das mit
Irretiert hat mich am Anfang der Platzhalter "%ii", welcher für die Minuten steht, da
"%mm" schon als Platzhalter für die Monate verwendet wird.
Möchtest Du jedoch eine analoge Zeitanzeige in das dezimale Format umwandeln, wie es z.B.
bei den meisten Zeiterfassungssystemen in Betrieben verwendet wird, dann wird das ganze
soweit ich weis etwas komplizierter.
Ich gehe dann den Weg, das ich erst einmal die Differenz der Zeiten mit folgender Procedure
von "crossroads" (*dank*) in Sekunden errechne...
Wenn Du nun hingehst und das Ergebnis in volle Stunden und Minuten zurückrechnest, bist Du am Ziel.
Beispiel:
Wenn Du die Ausgeb im dezimalen Format... (00:15:00 = 0.25 Std) haben möchtest, mußt Du
natürlich noch hingehen in die werte mit (wert/60)*100 umrechnen.
Ich hoffe, ich konnte Dir helfen und habe nicht zuviele Fehler, da ich selber noch
Anfänger bin
Wenn Du nur die Zeit im Format "0:00:00" angezeigt haben möchtest, geht das mit
Code: Alles auswählen
FormatDate("%hh:%ii:%ss",Date()) ;Anzeigebsp. 06:58:12
FormatDate("%h:%ii:%ss",Date()) ;Anzeigebsp. 6:58:12
"%mm" schon als Platzhalter für die Monate verwendet wird.
Möchtest Du jedoch eine analoge Zeitanzeige in das dezimale Format umwandeln, wie es z.B.
bei den meisten Zeiterfassungssystemen in Betrieben verwendet wird, dann wird das ganze
soweit ich weis etwas komplizierter.
Ich gehe dann den Weg, das ich erst einmal die Differenz der Zeiten mit folgender Procedure
von "crossroads" (*dank*) in Sekunden errechne...
Code: Alles auswählen
Procedure.l PBDateDiff (modus$, Datum1$, Datum2$)
d1.l = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss", Datum1$)
d2.l = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss", Datum2$)
If d1 < 0 Or d2 < 0:ProcedureReturn -1:EndIf ; error!
diff.l = Abs(d2 - d1)
Select modus$
Case "s":ProcedureReturn diff ; seconds
Case "m":ProcedureReturn Int(diff / 60) ; minutes
Case "h":ProcedureReturn Int(diff / (60 * 60)) ; hours
Case "d":ProcedureReturn Int(diff / (60 * 60 * 24)) ; days
Case "w":ProcedureReturn Int(diff / (60 * 60 * 24 * 7)) ; weeks
Default:ProcedureReturn -1 ; error!
EndSelect
EndProcedure
Beispiel:
Code: Alles auswählen
startzeit$="13:12:25"
endzeit$="17:02:25"
vergangeneSekunden=PBDateDiff("s", startzeit$, endzeit$)
stunden=Int(vergangeneSekunden/3600): vergangeneSekunden-(stunden*3600)
minuten=Int(vergangeneSekunden/60): vergangeneSekunden-(minuten*60)
sekunden=vergangeneSekunden
;Variante1
ausgabe$=Right("00"+Str(stunden),2)+"."+Right("00"+Str(minuten),2)+":"+Right("00"+Str(sekunden),2)
;Variante2
ausgabe$=Right("00"+Str(stunden),2)+"."+Right("00"+Str(minuten),2)
;ERGEBIS1 = "3.50:00"
;ERGEBIS2 = "3.50"
natürlich noch hingehen in die werte mit (wert/60)*100 umrechnen.

Ich hoffe, ich konnte Dir helfen und habe nicht zuviele Fehler, da ich selber noch
Anfänger bin

oh oh oh
ein Musikstück (extension : *.dfl)
nun wollte ich gerne eine Zeitanzeige integrieren
das Musikstück ist 230 Sekunden lang - sprich 3min 50 Sekunden
wenn man play startet spielt es das Musikstück ab und die Zeit soll von
0:00:00 nach 0:03:50 im Sekundentakt laufen
irgendwie stelle ich mich zu doof an
nun wollte ich gerne eine Zeitanzeige integrieren
das Musikstück ist 230 Sekunden lang - sprich 3min 50 Sekunden
wenn man play startet spielt es das Musikstück ab und die Zeit soll von
0:00:00 nach 0:03:50 im Sekundentakt laufen
irgendwie stelle ich mich zu doof an

- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
Ungefähr so?
Debugger muss natürlich an sein
Da ich weiß, dass die Frage dann auch gleich gekommen wäre
Mit Stunde geht dass dann so:
Code: Alles auswählen
For s = 0 To 230
min.l = s / 60
sec.l = s % 60
Debug RSet(Str(min), 2, "0") + ":" + RSet(Str(sec), 2, "0")
Delay(100)
Next
Da ich weiß, dass die Frage dann auch gleich gekommen wäre

Mit Stunde geht dass dann so:
Code: Alles auswählen
For s = 0 To 5230
std.l = s / 3600
min.l = (s % 3600)/ 60
sec.l = s % 60
Debug RSet(Str(std), 2, "0") + ":" + RSet(Str(min), 2, "0") + ":" + RSet(Str(sec), 2, "0")
Next
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
wie wärs mit der klassischen lösung?
...und bevor jetzt jemand über die verwendung von elapsedmilli mosert:
durch die erhöhung von timer um 1000 anstatt setzen auf aktuelle elapsedmilli
werden unebenheiten ausgebügelt.
Code: Alles auswählen
timer = ElapsedMilliseconds() +1000 ; timer Init
; Hauptschleife Beginn
If ElapsedMilliseconds() >= timer
timer + 1000
sec +1
If sec > 59
sec = 0
min +1
If min > 59
min = 0
std +1
EndIf
EndIf
EndIf
time$ = Right("00"+Str(std),3)+":"+Right("0"+Str(min),2)+":"+Right("0"+Str(sec),2)
; Hauptschleife Ende
durch die erhöhung von timer um 1000 anstatt setzen auf aktuelle elapsedmilli
werden unebenheiten ausgebügelt.

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten: