Autor
|
Tema: [Solucionado] Detectar posicion del click en imagen? (Leído 6,730 veces)
|
Cromatico
Desconectado
Mensajes: 110
|
Hola que tallll, tengo una nueva dudaa aver si alguien tiene alguna idea Estoy intentando detectar la posicion del click sobre un control image externo... Ya tengo las dimenciones del image width, height, top, left, right y bottom... La pregunta es, se puede detectar en que posicion del image se hizo click? Graciasss!!!
|
|
« Última modificación: 7 Diciembre 2010, 16:06 pm por Cromatico »
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) MsgBox "x -> " & X & " ; y -> " & Y End Sub
DoEvents!
|
|
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Hola Mr.Frog gracias por responder, pero como dije, la imagen es de un form externo a mi proyecto!! Gracias!
Si es posible que me diga en que posicion, left, right, top, bottom de la imagen se hizo click, pero la cagada es que el control image con el que estoy tratando no esta en mi proyecto, sino en uno externo al mio.
|
|
« Última modificación: 7 Diciembre 2010, 03:18 am por Cromatico »
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Hola Mr.Frog gracias por responder, pero como dije, la imagen es de un form externo a mi proyecto!! Gracias!
Si es posible que me diga en que posicion, left, right, top, bottom de la imagen se hizo click, pero la cagada es que el control image con el que estoy tratando no esta en mi proyecto, sino en uno externo al mio. Perdoname, no lei bien la pregunta... Con un Hook se puede hacer, mi amigo Dessa estara orgulloso de mi... Para ello debes sacar el Hwnd del control externo y lo metes en la variable lHwnd, te dejo un ejemplo: Option Explicit Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hMod As Long, ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long Private Const WH_MOUSE_LL As Long = 14& Private Const WM_LBUTTONDOWN As Long = &H201 Public lHwnd As Long Dim hMouseHook As Long Public Sub StartMouseHook() If hMouseHook = 0 Then hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, 0&) End If End Sub Public Sub StopMouseHook() If hMouseHook <> 0 Then Call UnhookWindowsHookEx(hMouseHook) hMouseHook = 0 End If End Sub Private Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, lParam As POINTAPI) As Long If wParam = WM_LBUTTONDOWN And (lHwnd = WindowFromPoint(lParam.X, lParam.Y)) Then Debug.Print lParam.X; " <--> "; lParam.Y End If End Function
DoEvents!
|
|
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Holass gracias por contestarr!! Estuve intentando con el codigo que posteaste pero me tira error:
Uso no válido del operador AddressOf
Y me marca hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, 0&) exactamente: AddressOf MouseProc
asigne en el form load el hwnd del control image externo lHwnd = "el handle puse aca"
Y llame a starmousehook pero me tiro ese error :S
Gracias
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Necesitas estas APÏS: Private Type POINTAPI x As Long y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Declare Function ClientToScreen Lib "user32.dll" (ByVal hwnd As Long, ByRef lpPoint As POINTAPI) As Long Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
Lo demas es solo hacer un Hook al Mouse y posiblemente quieras usar esta api... Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Temibles Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Private Function MouseProc(ByVal nCode As Long, ByVal wParam As Long, lParam As POINTAPI) As Long If wParam = WM_LBUTTONDOWN And (lHwnd = WindowFromPoint(lParam.X, lParam.Y)) Then Debug.Print lParam.X; " <--> "; lParam.Y End If End Function
Sustituye por public function MouseProc(ByVal nCode As Long, ByVal wParam As Long, lParam As POINTAPI) As Long If wParam = WM_LBUTTONDOWN And (lHwnd = WindowFromPoint(lParam.X, lParam.Y)) Then Debug.Print lParam.X; " <--> "; lParam.Y End If End Function
y pega todo el codigo de la rana en un MODULO BAS!¡. EDITO]--->Agrega esta api al modulo de la rana Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
y sustituye la funcion MouseProc por esta... public function MouseProc(ByVal nCode As Long, ByVal wParam As Long, lParam As POINTAPI) As Long If wParam = WM_LBUTTONDOWN And (lHwnd = WindowFromPoint(lParam.X, lParam.Y)) Then Debug.Print lParam.X; " <--> "; lParam.Y End If MouseProc = CallNextHookEx(hHook, nCode , wParam , lParam ) End Function
Creo que esto es todo... Temibles Lunas!¡.
|
|
« Última modificación: 7 Diciembre 2010, 03:49 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Funciono perfecto me detecta la posicion de donde hago click en la imagen, muchas gracias a los dos!!!
Ahora me surgio otra duda, en que se basan esas posiciones... Es decir, en la esquina superior izquierda por ejemplo me marca (571;244) aproximadamente... Se puede relacionar con el width y height de la imagen?
Gracias nuevamente!
|
|
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Huiiii me parece que cague, estuve probando y me di cuenta que si muevo la imagen externa de posicion en la pantalla, me cambian totalmente las posiciones aunque clickee en el mismo lugar de la imagen!!! Se podra ajustar para que siempre me tire la misma posicion si hago click en el mismo lugar por mas que la imagen no este siempre en el mismo lugar de la pantalla? Gracias!
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Funciono perfecto me detecta la posicion de donde hago click en la imagen, muchas gracias a los dos!!!
Ahora me surgio otra duda, en que se basan esas posiciones... Es decir, en la esquina superior izquierda por ejemplo me marca (571;244) aproximadamente... Se puede relacionar con el width y height de la imagen?
Gracias nuevamente!
se basa en la pantalla del monitor X= 571 Pixeles desde la izquierda y= 244 Pixeles desde el tope de arriba Funciono perfecto me detecta la posicion de donde hago click en la imagen, muchas gracias a los dos!!!
Ahora me surgio otra duda, en que se basan esas posiciones... Es decir, en la esquina superior izquierda por ejemplo me marca (571;244) aproximadamente... Se puede relacionar con el width y height de la imagen?
Gracias nuevamente!
GetWindowRect te devuelve la infomacion de un control con el mismo criterio o sea en pixeles y en base a las coordenadas x e y de la pantalla en donde se encuentra dicho control al momento de pedir su informacion El top y el left cambian al mover el contenedor del control (por ej al mover el formulario que lo contiene) porque repito que se basa en la posicion dentro de la pantalla, pero el HEIGHT y el WIDTH son constantes o mejor dicho no cambian por mover el Formulario o contenedor del control Dim TR As RECT Call GetWindowRect(ret, TR) "LEFT" = TR.Left "TOP" = TR.Top "HEIGHT"= TR.Bottom - TR.Top "WIDTH" = TR.Right - TR.Left Como notarás (a diferencia del otro hilo) esta vez no multiplique por 15 para que el retorno sea en pixeles. @l "Mister" El top y el left cambian al mover el contenedor del control (por ej al mover el formulario que lo contiene) porque repito que se basa en la posicion dentro de la pantalla, pero el HEIGHT y el WIDTH son constantes o mejor dicho no cambian por mover el Formulario o contenedor del control
|
|
« Última modificación: 7 Diciembre 2010, 06:08 am por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Detectar posición del cursor de texto
Programación Visual Basic
|
aaronduran2
|
7
|
8,473
|
24 Julio 2008, 20:26 pm
por aaronduran2
|
|
|
detectar item de lista con doble click y obtener id de elemento
Programación C/C++
|
dewolo
|
7
|
4,806
|
4 Octubre 2011, 22:57 pm
por Eternal Idol
|
|
|
Detectar click en un Iframe
« 1 2 »
Desarrollo Web
|
mapers
|
11
|
5,876
|
22 Mayo 2014, 16:23 pm
por mapers
|
|
|
[Pregunta]: Detectar un click sobre un elemento
Desarrollo Web
|
Leguim
|
7
|
2,767
|
31 Enero 2019, 05:31 am
por Leguim
|
|
|
Capturar la posición del ratón al hacer click en cualquier parte de la pantalla
Programación Visual Basic
|
adla
|
0
|
1,610
|
24 Mayo 2019, 11:11 am
por adla
|
|