VB6 Countdown programmieren

  • VB6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    VB6 Countdown programmieren

    Hallo liebe Forumsmitglieder,

    ich habe ein Problem, das ich alleine nicht lösen kann. Ich versuche schon seit Tagen einen Timer / Countdown zu programmieren.
    Die Problemstellung sieht folgendermassen aus:

    Beim drücken auf Start soll der Timer zuerst 45 Sekunden (von 45 auf 0 )runterzählen und dann 15 Sekunden (von 15 auf 0) runterzählen = 1 Minute

    Das Ganze soll 10 mal automatisch geschehen.

    Danach 20 Sekunden (von 20 auf 0) runterzählen und dann 10 Sekunden (von 10 auf 0) runterzählen.

    das Ganze soll 18 mal automatisch geschehen.

    Ich bekomme es einfach nicht hin. Mit dem Timer1 schaffe ich dies einmal. Egal wo ich eine Fox Next Schleife einbaue, es will nicht klappen.

    Im Anhang habe ich das Formular angehängt. Command5 und Text4 sind nur für mich. Diese sind nicht relevant.

    Ich bin für jeden Lösungsvorschlag dankbar.

    Vielen Dank für Eure Unterstützung.
    Dateien
    • Timer.frm

      (8,57 kB, 94 mal heruntergeladen, zuletzt: )
    Hat der Timer überhaupt ein Intervall eingestellt? Ohne dieses wird der ja nie laufen. Ich kann zumindest in der frm-Datei diese Eigenschaft nicht entdecken.
    EDIT: Vergiss das, hab's gefunden (1000 ms).

    Mir fällt auf, dass du im Timer-Event mehrfach Timer1.Enabled = False bzw. Timer1.Enabled = True machst. Was willst du damit bezwecken? Wenn du den so kurz hintereinander ein- und ausschaltest, kannst du ihn meiner Meinung nach auch immer an lassen.

    Vielleicht ist das auch ein Verständnisproblem deinerseits. Ich habe das Gefühl, dass du deinen Countdown mit einer Schleife innerhalb des Timers machen willst, aber der Timer ist doch quasi die Schleife.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo zusammen, ich habe nun nach etlichen Stunden und Recherche über eine Wait - Funktion ein timerähnliches Szenario realisieren können ... na ja fast

    Im Anhang der Code.

    Warum zählt es mir weder im Label1 noch in Text1.Text dir For - Next Schleife hoch. Ich möchte die Zahlen 1 bis 5 im Label bzw. in der Textbox sehen können.Vielen Dank für eure Hilfe.

    Visual Basic-Quellcode

    1. Dim x As Integer
    2. Dim y As Integer
    3. Private Declare Function WaitForSingleObject Lib "kernel32" ( _
    4. ByVal hHandle As Long, _
    5. ByVal dwMilliseconds As Long) As Long
    6. Public Function Wait(ByVal mSek As Long)
    7. WaitForSingleObject -1, mSek
    8. End Function
    9. Private Sub Command1_Click()
    10. x = 1: y = 1
    11. For y = 1 To 5 Step 1
    12. Label1.Caption = x
    13. Text1.Text = x
    14. Wait 1000: '1000 Millisekunden warten.
    15. x = x + 1
    16. Next y
    17. End Sub
    18. Private Sub Form_Load()
    19. x = 1
    20. y = 1
    21. End Sub


    CodeTags gesetzt ~VaporiZed
    Dateien
    • For_Next.frm

      (2,3 kB, 99 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    @Hessi71 Ich denke mal, dass die GUI keine Zeit hat, die Zahlen darzustellen, da sie permanent schläft.
    Mach mal vor dem Wait ein DoEvents() rein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Hessi71
    Hier hast mal eine einfache Wait/Delay Sub.

    Visual Basic-Quellcode

    1. Private Declare Sub Sleep Lib "Kernel32.dll" (ByVal lngMilliseconds As Long)
    2. Private Sub Delay(ByVal sngSecsDelay As Single)
    3. Dim sngTimeOut As Single
    4. Dim sngPrevTimer As Single
    5. ' Startzeit speichern
    6. sngPrevTimer = Timer
    7. ' TimeOut-Zeit berechnen
    8. sngTimeOut = sngPrevTimer + sngSecsDelay
    9. ' Läuft solange bis die TimeOut-Zeit erreicht wurde
    10. Do While sngPrevTimer < sngTimeOut
    11. ' 1ms warten
    12. Call Sleep(1)
    13. ' wichtig, sonst blockiert die komplette Anwendung!!!
    14. DoEvents
    15. ' TimeOut-Zeit, wenn Mitternacht, neu berechnen
    16. If Timer < sngPrevTimer Then sngTimeOut = sngTimeOut - 86400
    17. ' nächste Startzeit speichern
    18. sngPrevTimer = Timer
    19. Loop
    20. End Sub

    Ich bezweifle aber das Du das, was Du oben beschreibst, vernünftig über For/Next Schleifen + einem Wait/Delay lösen kannst. Dafür reicht ein Timer + diverse globale Variablen, die im Timer-Event (Select Case, Counter usw), verwendet werden. Damit benötigst Du kein Wait/Delay.
    Mfg -Franky-