Duda GetCursorPos

Iniciado por h0oke, 29 Junio 2009, 03:41 AM

0 Miembros y 1 Visitante están viendo este tema.

h0oke

Hola... Estoy en un proyecto donde utilizo la función mencionada, con el fin de mostrar en una etiqueta la posición exacta del mouse a medida que se va moviendo. El problema es que lo utilizo de la siguiente manera:

Código (vb) [Seleccionar]
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Ciertas veces, es medio "lenta" la letura y cuando muevo el mouse tarda un segundo y medio en refrescar. Será mejor colocar un timer?

h0oke

Para no abrir otro thread... Utilizo este procedimiento para obtener una posicion guardada en un textfile para luego ubicar mi mouse en esa posición, pero resulta que la posición obtenida por mi getcursorpos la obtiene del formulario y no de la pantalla, ya que el setcursorpos difiere uno 10x X 10y  :-\

Código (vb) [Seleccionar]
Private Sub Command1_Click()
Open "C:\posicion.txt" For Input As #1
Dim s_linea As String, s_file As String
Do Until EOF(1)
Line Input #1, s_linea
s_file = s_file + s_linea + vbCrLf
Loop
Close #1
f_posx = Mid(s_file, 4, 3)
f_posy = Mid(s_file, 11, 3)
i_posx = Val(f_posx)
i_posy = Val(f_posy)
Dim RT_val As Long
RT_val = SetCursorPos(i_posy, i_posx)
End Sub

BlackZeroX

Cita de: 嘇FSend嘇 en 29 Junio 2009, 03:41 AM
Hola... Estoy en un proyecto donde utilizo la función mencionada, con el fin de mostrar en una etiqueta la posición exacta del mouse a medida que se va moviendo. El problema es que lo utilizo de la siguiente manera:

Código (vb) [Seleccionar]
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Ciertas veces, es medio "lenta" la letura y cuando muevo el mouse tarda un segundo y medio en refrescar. Será mejor colocar un timer?

Tu codigo se corre SOLO CUANDO SE PASA el Mouse sobre el FORM DIRECTAMENTE No aplica sobre controles.¡!, asi que no se ve la real utilidad del codigo si es que puedes usar las variables de X y Y de tal evento en lugar de la API,

Si lo que quieres es que en todo momento muestre la pos X y Y ponlo en un Timer de lo contrario solo seria el Switch en cada X evento (en este caso el MouseMove del Form).
The Dark Shadow is my passion.

h0oke

Muchas gracias BlackZeroX... Eso explica tal vez mi otra duda
Citarpero resulta que la posición obtenida por mi getcursorpos la obtiene del formulario y no de la pantalla
Ahora lo pruebo.

BlackZeroX

Cita de: 嘇FSend嘇 en 29 Junio 2009, 03:55 AM
Muchas gracias BlackZeroX... Eso explica tal vez mi otra duda
Citarpero resulta que la posición obtenida por mi getcursorpos la obtiene del formulario y no de la pantalla
Ahora lo pruebo.

GEtCursorPos (APi obtiene de la pantalla completa segun tu resoluciona ctual

los valores X y Y solo del Formualrio tomando en cuenta SOLO el tamaño del mismo)
The Dark Shadow is my passion.

h0oke

Exactamente

Código (vb) [Seleccionar]
Private Sub Timer3_Timer()
   Dim x As Single
   Dim y As Single
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Y ahora mi setcursorpos funciona para toda la pantalla y de manera correcta... La verdad no se si existirá una manera de sustituir mi timer con otra api...

Gracias  BlackZeroX

el_c0c0

Cita de: 嘇FSend嘇 en 29 Junio 2009, 03:58 AM
Exactamente

Código (vb) [Seleccionar]
Private Sub Timer3_Timer()
    Dim x As Single
    Dim y As Single
    GetCursorPos pt
    Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Y ahora mi setcursorpos funciona para toda la pantalla y de manera correcta... La verdad no se si existirá una manera de sustituir mi timer con otra api...

Gracias  BlackZeroX

SetTimer, KillTimer

Cobein hizo un modulo de clase para reemplazar al timer comun, usando las apis y subclass.
Pero con las apis solas va a funcionar igual!

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

cobein

#7
Podes usar un hook global (WH_MOUSE_LL) para obtener las coordenadas permanentemente y para posicionar la etiqueta correctamente podes usar ScreenToClient.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

h0oke

Citarhook global (WH_MOUSE_LL)
Exactamente cobein a eso me refería gracias. Ya estaré comentando.