Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

VB6: Timer im Zeitformat (hh:mm:ss) anzeigen... Wie?

Mic2004 / 16 Antworten / Flachansicht Nickles

Hallo Leute!

Ich habe mir mit Visual Basic 6 einen Art kleine Stoppuhr gebastelt. Man gibt eine Startzeit ein und sie zählt dann auf null runter, um danach ein ereignis zu starten.

Das blöde daran ist nur, dass sie nur Sekunden zählt. Gibt man also als Startzeit 2 min 10 s ein, dann zählt die Stoppuhr von 130 s an rückwärts. Nun wäre es mir aber lieber, wenn sie im Format 02:10 rückwärts zählen würde. Der mir dafür bekannte Befehal Format(CStr(nSek), "mm:ss") funktioniert da leider aber nicht. Verwendet man ihn, zeigt die Stoppuhr eine völlig falsche Startzeit an und zählt auch nicht mit.

Hier mal ein Auszug aus meinem Quelltext:
Private Sub Command1_Click()
Dim Startzeit As Integer
Timer1.Enabled = True
If Text1.Text = "" And Text2.Text = "" Then
MsgBox ("Keine Startzeit eingegeben!")
GoTo Ende
Else
If Text1.Text = "" Then Text1.Text = 0
If Text2.Text = "" Then Text2.Text = 0
Startzeit = (Text1.Text * 60) + Text2.Text
nSek = Startzeit ' Timer initialisieren
Timer1.Interval = 1000 ' entspricht einer Sekunde
Label1.Caption = CStr(nSek) & " s" ' Countdown
End If
Ende:
End Sub

Private Sub Timer1_Timer()
nSek = nSek - 1 ' und wieder eine Sekunde vorbei
Label1.Caption = CStr(nSek) & " s"

If nSek Timer1.Enabled = False
[...........]
Else
End If
End Sub


Weiterhin such ich noch eine Möglichkeit, wie man am Ende des Timers evtl. einen roten Kreis (Shape) blinken lassen könnte, damit der Nutzer schneller sieht, dass die Zeit um ist.

Ich hoffe, ihr könnt mir mit guten Ideen helfen.

Grüße,
Mic2004.


bei Antwort benachrichtigen
Sovereign Sylvia Mic2004 „VB6: Timer im Zeitformat (hh:mm:ss) anzeigen... Wie?“
Optionen

Hi,
es gäbe auch die Möglichkeit, die Startzeit in Variable zu laden und diese runterzuzählen. Also, die Startzeit sei 3 h, 20 min und 35 sec. Jetzt setzt man die Variablen (alle als Integer) wie folgt:
mInt_Hour = 3
mInt_Min = 20
mInt_Sec = 35

Danach startet man den Timer, der auf Interval 1000 = 1 sec eingestellt ist.
Nach der ersten Sekunde führt der Timer "mInt_Sec = mInt_Sec -1" aus.
Nach weiteren 35 Sekunden ist mInt_Sec = -1. Diesen Wert fragt man per If ab, und wenn dem so ist, wird mInt_Min um 1 reduziert und mInt_Sec wird auf 59 gesetzt. Wenn man das schon bei mInt_Sec = 0 machte, müsste der nächste Startwert für mIntSec 60 sein. Man zeigt ja nicht an, wieviel Zeit verstrichen ist, sondern welche Restzeit verbleibt.
Irgendwann ist mInt_Min = 0 , dann wird es Zeit, mInt_Hour um 1 zu reduzieren und mInt_Min UND mInt_Sec auf 59 zu setzen.

Jede Variable kann man sich per Cstr() anzeigen lassen wo man möchte, z.B. je ein Label für Hour, Min und Sec.

Irgendwann sind alle Variablen auf 0: If mInt_Sec + mInt_Min + mInt_Hour = 0 Then
und an dieser Stelle kann man den Timer entweder stoppen oder weiter laufen lassen und damit den roten Kreis bedienen: Shape1.Visible = Not Shape1.Visible, d.h., der Kreis blinkt im Sekundentakt.
Wie der Timer gestoppt wird, ist letztlich eine Design-Frage des persönlichen Geschmacks. Bei der Gelegenheit setzt man dann Shape1.Visible = False.

Das funktioniert, ich benutze es selber. Hier ein Code-Auszug (zu blöd, dass man Code hier nicht eingerückt darstellen kann):

mInt_seconds = mInt_seconds - 1
If mInt_seconds = -1 Then
mInt_seconds = 59
If mInt_minutes = 0 Then
mInt_minutes = 59
If mInt_hours > 0 Then
mInt_hours = mInt_hours - 1
End If
Else
mInt_minutes = mInt_minutes - 1
End If
End If

If mInt_seconds + mInt_minutes + mInt_hours = 0 Then
Shape1.Visible = Not Shape1.Visible
'oder Me.Timer1.Enabled = False
End If


HAND
Sylvia

Mein sz streikt heute wieder ------ Nobody is perfect, and we prove it every day.
bei Antwort benachrichtigen