Jump to content

Como INICIAR/PARAR o ciclo dos segundos.


programadorvb6
Go to solution Solved by Andrepereira9,

Recommended Posts

Olá pessoal, boa tarde, fiz aqui um programa que indica a posição do rato e suas coordenadas na ListBox1, mas não queria usar o controlo timer, pois é muito limitado ,tentei fazer de outra maneira , mas estou com dificuldade em parar de registar as coordenadas do rato.
Existe alguma solução ?
Grato desde já pela vossa atenção.
ProgramadorVB6thumb_show.php?i=vtepw42jn
Deixo aqui até onde parei.

Public Class Form1
    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
    Public Const MOUSEEVENTF_LEFTDOWN = &H2 'Prime o botão do rato esquerdo.
    Public Const MOUSEEVENTF_LEFTUP = &H4   'Larga o botao do rato do lado esquerdo. 
    Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Prime o botão do rato direito.
    Public Const MOUSEEVENTF_RIGHTUP = &H10  'Larga o botao do rato do lado direito. 

    Private x As ULong
    Private y As ULong
    Dim processo As String
    Private Sub Esperar(ByVal Segundos As Integer, Parar As Boolean)
        Dim Final As Date = TimeOfDay.AddSeconds(Segundos)

        While (Not TimeOfDay.Second = Final.Second)
            Application.DoEvents()
            Label1.Text = Cursor.Position.X
            Label2.Text = Cursor.Position.Y
            ListBox1.Items.Add(Me.Label1.Text & "," & Me.Label2.Text)
            If Parar = True Then
                Exit Sub
            End If
        End While
    End Sub
    Private Sub clicar()
        Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        x = Val(TextBox2.Text)
        y = Val(TextBox3.Text)
        Windows.Forms.Cursor.Position = New System.Drawing.Point(x, y)
        clicar()
    End Sub
    Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click
        Esperar(10, False)

    End Sub

    Private Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click
        Esperar(10, True)
    End Sub
End Class
 

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

Boas
Isso acontece, porque quando tu carregas no botao para Parar, estás a iniciar um novo Sub, que termina imediatamente, quando chega ao IF... mas o primeiro de todos, nunca termina..

podes resolver de varias formas.

1º opção: Criar uma variavel externa a esse sub, e alteras o estado (True / False) quando clicas no botão Parar e no botao Gravar

Public Class Form1
    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
    Public Const MOUSEEVENTF_LEFTDOWN = &H2 'Prime o botão do rato esquerdo.
    Public Const MOUSEEVENTF_LEFTUP = &H4   'Larga o botao do rato do lado esquerdo. 
    Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Prime o botão do rato direito.
    Public Const MOUSEEVENTF_RIGHTUP = &H10  'Larga o botao do rato do lado direito. 

    Private x As ULong
    Private y As ULong
    Dim processo As String

    Dim estado As Boolean

    Private Sub Esperar(ByVal Segundos As Integer)
        Dim Final As Date = TimeOfDay.AddSeconds(Segundos)

        While (Not TimeOfDay.Second = Final.Second)
            Application.DoEvents()
            Label1.Text = Cursor.Position.X
            Label2.Text = Cursor.Position.Y
            ListBox1.Items.Add(Me.Label1.Text & "," & Me.Label2.Text)

            If estado = True Then
                Exit Sub
            End If

        End While


    End Sub
    Private Sub clicar()
        Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    End Sub


    Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click
        x = Val(TextBox2.Text)
        y = Val(TextBox3.Text)
        Windows.Forms.Cursor.Position = New System.Drawing.Point(x, y)
        clicar()
    End Sub

    Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click
        estado = False
        Esperar(10)
    End Sub

    Private Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click
        estado = True
    End Sub
End Class

2º opção: Criar uma função independente, que consoante o botão clicado, manda iniciar o sub, e altera o valor numa variavel

Public Class Form1
    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
    Public Const MOUSEEVENTF_LEFTDOWN = &H2 'Prime o botão do rato esquerdo.
    Public Const MOUSEEVENTF_LEFTUP = &H4   'Larga o botao do rato do lado esquerdo. 
    Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Prime o botão do rato direito.
    Public Const MOUSEEVENTF_RIGHTUP = &H10  'Larga o botao do rato do lado direito. 

    Private x As ULong
    Private y As ULong
    Dim processo As String

    Dim estado As Boolean
    Private Sub inicia_para(ByVal segundos As Integer, Parar As Boolean)
        If Parar = False Then
            estado = False
            Esperar(segundos)
        Else
            estado = True
        End If

    End Sub

    Private Sub Esperar(ByVal Segundos As Integer)
        Dim Final As Date = TimeOfDay.AddSeconds(Segundos)

        While (Not TimeOfDay.Second = Final.Second)
            Application.DoEvents()
            Label1.Text = Cursor.Position.X
            Label2.Text = Cursor.Position.Y
            ListBox1.Items.Add(Me.Label1.Text & "," & Me.Label2.Text)

            If estado = True Then
                Exit Sub
            End If

        End While


    End Sub
    Private Sub clicar()
        Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    End Sub




    Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click
        x = Val(TextBox2.Text)
        y = Val(TextBox3.Text)
        Windows.Forms.Cursor.Position = New System.Drawing.Point(x, y)
        clicar()
    End Sub

    Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click
        inicia_para(10, False)
    End Sub

    Private Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click
        inicia_para(10, True)
    End Sub
End Class
 

A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Link to comment
Share on other sites

Olá Bom dia, desde já quero agradecer pela tua resposta, estive a experimentar os teus códigos facultados, mas acontece que eles não param de registar as coordenadas  quando premida o botão Parar, será que funciona melhor com o controle Timer1 ?
Se sim como fazer ?
Estive a tentar fazer com o controle  e dá-me erro existe alguma maneira de usar este maldito controle

 Timer1.eneable = True


Nota: A ideia é de fazer mexer o cursor sozinho perseguindo as coordenadas que estão na ListBox1.

Grato desde já pela tua atenção.

ProgramadorVB6

Edited by programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Link to comment
Share on other sites

  • Solution

Boas 
 

Adicionas um timer ao form , e alteras o codigo para isto

    Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click
        estado = False
        Timer1.Start()
    End Sub

    Private Async Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click
        estado = True
        Timer1.Stop()
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Esperar(10)
    End Sub

 

Em 21/12/2021 às 10:00, programadorvb6 disse:

Nota: A ideia é de fazer mexer o cursor sozinho perseguindo as coordenadas que estão na ListBox1.

Mas estas a fazer o oposto... So estas a registar na Listbox1, as coordenadas do rato

A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.