For Next Schleife in VB6 pausieren

  • VB6

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

    For Next Schleife in VB6 pausieren

    Hallo,

    gibt es in VB6 eine Möglicheit, per Klick auf einen Button eine längere For-Next-Schleife zu pausieren? Und dann bei nochmaligem Klick auf den Button diese wieder weiter auszuführen.

    Danke für eure Hilfe.
    Moin
    Ich habe das schnell mal gegoogelt. Eine Idee ist:

    Du kannst eine Boolean-Variable hernehmen, die du bei
    Button1_Click auf True setzt und bei Button2_Click auf False.
    Wenn True, springt das Programm innerhalb deiner For-Schleife in eine weitere Schleife (eine While-Schleife), in der nur System.Threading.Thread.Sleep(Zeit) steht. Weiß gerade nicht, ob es in VB6 Sleep gab.
    Der Punkt ist, ab und zu musst du mittels
    Application.DoEvents() prüfen, ob Button2 gedrückt wurde.

    Bartosz schrieb:

    Weiß gerade nicht, ob es in VB6 Sleep gab.
    Nicht nativ, aber als System-Routine in der kernel32-API
    vbarchiv.net/api/api_sleep.html

    Visual Basic-Quellcode

    1. Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    2. Dim Pause As Boolean
    3. Sub Button1_Click
    4. Pause = Not Pause
    5. End Sub
    6. Sub DoLoop
    7. Pause = False
    8. For i = 1 to 9999999
    9. If Pause Then
    10. Sleep 100
    11. i = i - 1 'undo loop increment
    12. Else
    13. Debug.Print i 'or do whatever you want to do
    14. End If
    15. DoEvents
    16. Next
    17. End Sub

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „petaod“ ()

    @Hessi71
    so könnte es aussehen

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Waiting As Boolean 'Flag für WaitFor
    3. '------------------------------------------------
    4. 'Halteschleife für x Sekunden über Timer Function
    5. '------------------------------------------------
    6. Private Sub WaitFor(Seconds As Single, Waiting As Boolean, _
    7. Optional WithDoEvents As Boolean = True)
    8. Dim aTime As Single, dummy As Single
    9. aTime = Timer
    10. 'Flag setzen um Abbruch zu verhindern
    11. Waiting = True
    12. Do
    13. dummy = Timer
    14. dummy = dummy - aTime
    15. 'Mitternachtsbrücke
    16. If dummy < 0 Then
    17. dummy = dummy + 86400!
    18. End If
    19. If dummy >= Seconds Then
    20. Exit Do
    21. End If
    22. 'DoEvents auslösen
    23. If WithDoEvents Then
    24. DoEvents
    25. End If
    26. Loop
    27. 'Flag freigeben
    28. Waiting = False
    29. End Sub
    30. Private Sub Command1_Click()
    31. 'Demo mit Command2
    32. Command2.Enabled = False
    33. 'command2 für 3 sekunden disabled
    34. WaitFor 3, Waiting
    35. Command2.Enabled = True
    36. End Sub
    37. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    38. If Waiting Then
    39. Cancel = -1
    40. End If
    41. End Sub
    @Hessi71

    Ich würde das Problem über eine Do/Loop- anstatt einer For/Next-Schleife lösen.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private m_bolStop As Boolean
    3. Private m_lngCounter As Long
    4. Private m_lngMaxCount As Long
    5. Private Sub Form_Load()
    6. m_bolStop = True
    7. m_lngMaxCount = 10000
    8. End Sub
    9. Private Sub Command1_Click()
    10. m_bolStop = Not m_bolStop
    11. Call MachWas
    12. End Sub
    13. Private Sub MachWas()
    14. Do While m_bolStop = False
    15. Debug.Print CStr(m_lngCounter)
    16. m_lngCounter = m_lngCounter + 1&
    17. If m_lngCounter > m_lngMaxCount Then
    18. m_bolStop = True
    19. m_lngCounter = 0&
    20. End If
    21. DoEvents
    22. Loop
    23. End Sub
    Mfg -Franky-