locked
¿Cómo puedo saber si el puntero del ratón está quieto en la situación que explico? RRS feed

  • Pregunta

  • Deseo empezar una operación de desplazamiento. Algo más o menos así:

    Private bDeslizando As Boolean
    
      Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        bDeslizando = True
      End Sub
    
      Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
        bDeslizando = False
      End Sub

    Una vez presionado el botón izquierdo del ratón a medida que voy moviendo el ratón puedo detectar su posición a través del evento MouseMove. Lo que no logro hacer es que manteniendo el botón izquierdo presionado (o sea bDeslizando a True, o lo que sería una operación de desplazamiento del ratón), detectar el punto en que detengo el ratón sin dejar de presionar el botón y que lo notifique sólo una vez. Si continuo desplazando el ratón debe seguir dando la posición del mismo y que detecte si nuevamente dejo de mover el puntero en algún punto y lo notifique una sola vez de nuevo y así sucesivamente, tantas veces como lo detenga.

    Resumiendo: Que me de el punto donde detuve el movimiento cada vez que me detenga.


    • Editado James2016-2 miércoles, 20 de mayo de 2020 22:14
    miércoles, 20 de mayo de 2020 22:11

Respuestas

  • Si lo que quieres es que se detecte el "no movimiento" del ratón mientras tiene el botón izquierdo pulsado tendrás que considerar cuanto tiempo debe pasar para sin que el usuario mueva el ratón para considerar que está parado.

    Lo primero que deberás tener es una variable que te indique que se ha pulsado el botón izquierdo del mouse:

    Dim BotonIzquierdoMousePulsado as boolean = False 

    Esta variable la pones a True en el MouseDown:

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown

    If e.Button = Windows.Forms.MouseButtons.Left Then BotonIzquierdoMousePulsado = True
    End If

    End Sub

    Se pondrá a false cuando libere el botón:

      Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
          BotonIzquierdoMousePulsado =False
      End Sub

    Puedes poner un timer con un intervalo de tiempo determinado que almacene en un static la última posición del ratón si esa posición coincide con la que tenga en ese momento se considerará que está parado.

        Private Sub TimerComporbarSiEstaParadoElMouse_Tick(sender As System.Object, e As System.EventArgs) 

            If not BotonIzquierdoMousePulsado Then Exit Sub

            Dim UltimaPosicion As Point = New Point(0, 0)

            Dim PosMouse as Point = MousePosition(displayArea)

            If UltimaPosicion.X = PosMouse.X And UltimaPosicion.Y = PosMouse.Y Then

                  ' El Ratón está parado y con el botón izquierdo pulsado.

            Endif

            UltimaPosicion  = PosMouse

        End Sub


    Saludos, Javier J


    jueves, 21 de mayo de 2020 9:45

Todas las respuestas

  • Hola James2016-2

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, vamos a darte seguimiento e investigaremos para buscar la mejor respuesta para ti.

     

    Gracias por usar los foros de MSDN.

     

    Luis Diego Mora

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 21 de mayo de 2020 0:51
    Moderador
  • Si lo que quieres es que se detecte el "no movimiento" del ratón mientras tiene el botón izquierdo pulsado tendrás que considerar cuanto tiempo debe pasar para sin que el usuario mueva el ratón para considerar que está parado.

    Lo primero que deberás tener es una variable que te indique que se ha pulsado el botón izquierdo del mouse:

    Dim BotonIzquierdoMousePulsado as boolean = False 

    Esta variable la pones a True en el MouseDown:

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown

    If e.Button = Windows.Forms.MouseButtons.Left Then BotonIzquierdoMousePulsado = True
    End If

    End Sub

    Se pondrá a false cuando libere el botón:

      Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
          BotonIzquierdoMousePulsado =False
      End Sub

    Puedes poner un timer con un intervalo de tiempo determinado que almacene en un static la última posición del ratón si esa posición coincide con la que tenga en ese momento se considerará que está parado.

        Private Sub TimerComporbarSiEstaParadoElMouse_Tick(sender As System.Object, e As System.EventArgs) 

            If not BotonIzquierdoMousePulsado Then Exit Sub

            Dim UltimaPosicion As Point = New Point(0, 0)

            Dim PosMouse as Point = MousePosition(displayArea)

            If UltimaPosicion.X = PosMouse.X And UltimaPosicion.Y = PosMouse.Y Then

                  ' El Ratón está parado y con el botón izquierdo pulsado.

            Endif

            UltimaPosicion  = PosMouse

        End Sub


    Saludos, Javier J


    jueves, 21 de mayo de 2020 9:45
  • mm aunque trataba de hacerlo sin un Timer, solo usando la información de los eventos y los propios eventos, pero creo que no es posible así. Gracias por el código proporcionado y por la respuesta.
    jueves, 21 de mayo de 2020 16:24