Как остановить время с помощью кнопки в пользовательском интерфейсе - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь сделать пользовательский интерфейс простым с 2 кнопками 1 запускает цикл, а другая останавливает его

Единственное, что я могу придумать, - это создать глобальную переменную, которая меняется в зависимости от того, какая кнопка нажата, и это условие для цикла, однако кнопка останова не будет работать во время работы цикла, и поэтому я не могу остановить цикл

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public StartStop As Integer
Public para As Integer

Sub AutoClick(x)

Do While StartStop = 1
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    Sleep (x * 1000)
    If para = 0 Then
        Exit Do
    End If
Loop


End Sub


Private Sub CommandButton1_Click() 'this is the start button

StartStop = 1
para = 1
AutoClick (Segundos)

End Sub

Private Sub CommandButton2_Click() 'this is the stop button
para = 0
End Sub

То же самое, что кнопка остановки, чтобы остановить цикл, но я пока не нашел ответа, не хочу слишком усложнять код для этого

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Проверьте это:

Dim i As Long
Dim doloop As Boolean

Private Sub CommandButton1_Click()
    doloop = True
    StartCicle
End Sub

Private Sub CommandButton2_Click()
    doloop = False
End Sub


Sub StartCicle()

    i = 0
    While doloop

        Label1.Caption = CStr(i)
        i = i + 1
        DoEvents

    Wend
End Sub

Поместите этот код в пользовательскую форму и добавьте 2 командные кнопки и метку.

Нажмите на командную кнопку1, чтобы начать цикл Нажмите на кнопку command2, чтобы остановить цикл Вы можете видеть увеличение метки 2

Этот код делает то, что вы хотите.

0 голосов
/ 10 января 2019

Вы должны добавить вызов функции DoEvents внутри цикла, как описано в этот ответ

Do While StartStop = 1
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    Sleep (x * 1000)
    DoEvents
    If para = 0 Then
        Exit Do
    End If
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...