nach 20sec. aktion ausführen -> countdown anzeigen

anakari

Grünschnabel
Also ich will folgendes machen:

nach 20 Sekunden soll z.b. ein "Hallo" Fenster erscheinen.
Und in einem "Lable1" soll die verbleibende Zeit angezeigt werden.
Also immer aktuell: "20","19","18",..."1","0" -> AKTION AUSFÜHREN
 
also, da es soweit ich weiss keine funktion wie wait, delay, sleep oder sowas gibt, wuerd ich sagen, nimm nen timer. im onTimer-event zaehlst du dann einfach irgendeine globale variable von 20 auf 0 runter und baust eine fallunterscheidung ein, die irgendwas macht, sobal dein zaehler kleiner/gleich 0 ist. und natuerlich noch den timer deaktivieren, sonst wird das irgendwann nervig...
eigentlich reicht es auch, wenn man abfragt, ob der wert gleich 0 ist, aber kleiner/gleich ist besser, weil man nie weiss, was benutzer alles hinkriegen :)
 
du kannst natürlich auch die funktion getickcount von der winapi benutzen mit der tu ich mir halt leichter

mfg

leukos
 
Also, das ist gar net so schwer.
Du hast ein Formular auf dem ein Label-Feld ist, in dem der Countdown läuft und dann setzt du ein Timer-Objekt rein. Die Interval-Zeit stellst du auf 1000 (1000ms = 1 Sekunde).

So und jetzt dimensionierst du eine Variable i, die du auf 20 setzt. In der Sub für den Timer sagst du i=i-1 und lässt i auf dein Labelfeld ausgeben.
So jetzt brauchst du noch eine Schleife, die solange läuft, bis i<=0.
Vor der Schleife setzt du i auf 20 (s.o.) und lässt i in deinem Labelfeld ausgeben (damit er auch bei 20 zum zählen anfängt).
Ist die Schleife durchlaufen (wenn i <=0), dann dann setzt du die Eigenschaft Enabled des Timer auf False um den Timer zu deaktivieren und führst deine Aktionen aus, die nach 20 Sekunden erfolgen sollen.
Ich hoffe das war verständlich, wenn du denoch Fragen haben solltest, meld dich einfach nochmal.
Zum Schluss noch ein Code-Beispiel:

Option Explicit
Dim i As Integer

Private Sub Form_Activate()
i = 20
Label2.Caption = i
Do
'DoEvents
Loop Until i <= 0
Label1.ForeColor = vbRed
Timer1.Enabled = False
End Sub



Private Sub Timer1_Timer()
i = i - 1
Label2.Caption = i
End Sub


Gruss Homer
 
nimms mir nicht uebel, aber dein code macht bei mir nicht das was er soll. probier mal das hier:

Option Explicit
Dim i As Integer

Private Sub Form_Load()
i = 20
End Sub

Private Sub Timer1_Timer()
If i <= 0 Then
Timer1.Enabled = False
End If
Label1.Caption = Str(i)
i = i - 1
End Sub
 
Och sorry, das DoEvents war auskommentiert. Mach das "'" vor DoEvents weg, dann gehts. Denn das DoEvents steht dafür, das dein programm auch wärend einer Schleife noch auf Aktionen reagiert. Und sag net es geht nicht, ich habs selbst versucht.:)

Gruss Homer
 
doch

genau das sag ich ;)

habs ja auch ausprobiert und es gibt eine endlosschleife. da bringts auch nix, wenn das doevents wieder einkommentiert wird.
ausserdem braeuchte eine endliche schleife auf verschiedenen rechnern unterschiedlich lange, deswegen gibt es ja auch einen timer
 
Also ich weiss echt net welches problem du dabei hast. Erstens ist das schon mal keine Enlosschleife, nämlich die geht solange bis i <=0 und i wird vom timer mit einem Interval von 1000ms (was 100% genau 1 Sekunde entspricht) zurück gezählt. Und das DoEvents brauchst du in der Schleife, sonst hast du wirklich eine Endlosschleife und es Passiert gar nix. Denn dein Programm hängt sich nämlich auf und der Timer wird nicht angesprochen.
Ich hoffe du bekommst das hin. Denn es geht so ich hab das versucht. Ich werde bestimmt hier keinen Quellcode reinposten, der nicht funktioniert und den ich nicht selbst vorher getestet habe. Und für den kleinen Fehler mit dem Kommentar vor dem DoEvents habe ich mich bereits entschuldigt.

Gruss Homer
 
Zurück