MOUSEMOVE ??

22/04/2007 - 15:46 por Orfao | Informe spam
Hola a todos..
Tengo un commandbuttom incrustado en en la hoja1
cuando el cursor esta sobre el boton cambia la propiedad picture del mismo
eso lo hago a travez del metodo mousemove del control
la pregunta es como detectar cuando muevo el cursor fuera del contrrol para
poder volver a cambiar el picture a su estado original.
Como detecto la ubicacion del cursor sobre una celda determinada ?
hay alguna forma o manera de lograr esa informacion ?
como detectar el movimiento del mouse sobre una hoja ?
Gracias por cualquier respuesta...

Me alimento del conocimiento de todos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/04/2007 - 01:19 | Informe spam
hola, moises !

Tengo un commandbuttom incrustado en en la hoja1
cuando el cursor esta sobre el boton cambia la propiedad picture del mismo
eso lo hago a travez del metodo mousemove del control la pregunta es
como detectar cuando muevo el cursor fuera del contrrol para poder volver a cambiar el picture a su estado original.
Como detecto la ubicacion del cursor sobre una celda determinada ?
hay alguna forma o manera de lograr esa informacion ?
como detectar el movimiento del mouse sobre una hoja ?



[creo que] te sale 'mas barato' si ajustas el area del commandbutton sobre la que se cambie una u otra imagen :))
si dejas 'libre' una especie de 'marco' [p.e. de 5 pixeles] como las 'orilas' del objeto donde se considere 'fuera de foco'...
-> el siguiente ejemplo en el modulo de codigo de 'esa' hoja donde esta incrutado el commandbutton le cambia de colores
[modifica/adapta/... con tus codigos para el cambio de imagenes] :))

Private Sub CommandButton1_MouseMove( _
ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
With CommandButton1
If (X >= 5 And Y >= 5) And _
(X <= .Width - 5 And Y <= .Height - 5) _
Then .BackColor = &H80FF& _
Else .BackColor = &H8000000F
End With
End Sub

OJO: [probablemente] necsitaras 'ajustar el cuadrante' del boton en el que se detecta 'el paso' del mouse para 'el cambio' -?-
-> la constante de 5 que te puse en el ejemplo, prueba aumentandola para 'reducir' el area donde ocurre 'el cambio' ;)
o... procura NO ser 'tan rapido' con el mouse al pasar sobre el boton :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Orfao
23/04/2007 - 01:38 | Informe spam
Gracias Miguel.
Lo habia hecho montando en boton sobre otra imagen un poco mayor y con el
mousemove de este lograba que cambiara y en realidad funciona muy parecido al
ejempo tuyo pero... como dices tu hay que moverse lentamente para que pueda
ser detectado.
no habra otro metodo o forma de hacerlo tal vez a travez del api ? para
evitar ese problema.

Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

> Tengo un commandbuttom incrustado en en la hoja1
> cuando el cursor esta sobre el boton cambia la propiedad picture del mismo
> eso lo hago a travez del metodo mousemove del control la pregunta es
> como detectar cuando muevo el cursor fuera del contrrol para poder volver a cambiar el picture a su estado original.
> Como detecto la ubicacion del cursor sobre una celda determinada ?
> hay alguna forma o manera de lograr esa informacion ?
> como detectar el movimiento del mouse sobre una hoja ?

[creo que] te sale 'mas barato' si ajustas el area del commandbutton sobre la que se cambie una u otra imagen :))
si dejas 'libre' una especie de 'marco' [p.e. de 5 pixeles] como las 'orilas' del objeto donde se considere 'fuera de foco'...
-> el siguiente ejemplo en el modulo de codigo de 'esa' hoja donde esta incrutado el commandbutton le cambia de colores
[modifica/adapta/... con tus codigos para el cambio de imagenes] :))

Private Sub CommandButton1_MouseMove( _
ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
With CommandButton1
If (X >= 5 And Y >= 5) And _
(X <= .Width - 5 And Y <= .Height - 5) _
Then .BackColor = &H80FF& _
Else .BackColor = &H8000000F
End With
End Sub

OJO: [probablemente] necsitaras 'ajustar el cuadrante' del boton en el que se detecta 'el paso' del mouse para 'el cambio' -?-
-> la constante de 5 que te puse en el ejemplo, prueba aumentandola para 'reducir' el area donde ocurre 'el cambio' ;)
o... procura NO ser 'tan rapido' con el mouse al pasar sobre el boton :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
23/04/2007 - 02:52 | Informe spam
hola, moises !

Lo habia hecho montando en boton sobre otra imagen un poco mayor
y con el mousemove de este lograba que cambiara y en realidad funciona muy parecido al ejempo tuyo
pero... como dices tu hay que moverse lentamente para que pueda ser detectado.
no habra otro metodo o forma de hacerlo tal vez a travez del api ? para evitar ese problema.



[creo que] sera mejor buscar una alternativa diferente que 'andar monitoreando' por donde anda el raton :D

1) por las API's puedes obtener las coordenadas por donde se anda 'paseando' el raton
PERO... -> en puntos de pantalla, ademas toma muy en cuenta que...
2) para 'monitorear' donde anda el cursor en cada momento... es necesario que 'el codigo' se este ejecutando 'constantemente'
lo que impediria que 'otro' codigo pudiera 'entrar en accion' de manera 'transparente' o amigable Y SIN RIESGOS :-(
3) la ubicacion de las celdas 'se mide' en puntos -> de documento [y son medidas distintas a los puntos -> de pantalla]
lo que implica una 'conversion constante' a puntos que permitan ubicar la celda por la que anda el raton
ademas de 'localizar/averiguar/comprobar/...' si por donde anda el puntero corresponde a las coordenadas del commandbutton
[contando con que no se hace algun 'scroll/zoom/...' de la pantalla que 'mueva' algo mas en la conversion de los puntos] -?-

-> al final te expongo un ejemplo del codigo que se la pasa 'rastreando' los paseos del raton [requiere correr en excel 2k o 'superior]
por si quisieras seguir por ese camino ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

-> el siguiente codigo [en un modulo normal] inicia el monitoreo del puntero y va depositando las coordenadas en dos celdas
para detenerlo... selecciona la celda 'D3'
en un modulo de codigo 'normal' ==Public Declare Function GetCursorPos Lib "User32" (lpPoint As Puntero) As Long
Public Type Puntero
X As Long
Y As Long
End Type
Sub PosicionDelCursor()
Dim PosicionActual As Puntero
If MsgBox("Para detener el ""monitoreo""..." & vbCr & "Selecciona la celda ""D3""", _
vbOKCancel + vbInformation, "Posicion del cursor") = vbCancel Then Exit Sub
Do Until ActiveCell.Address = "$D$3"
GetCursorPos PosicionActual
[a2] = "Puntos X: " & PosicionActual.X & _
", Pixeles: " & ActiveWindow.PointsToScreenPixelsX(PosicionActual.X)
[a3] = "Puntos Y: " & PosicionActual.Y & _
", Pixeles: " & ActiveWindow.PointsToScreenPixelsY(PosicionActual.Y)
DoEvents
Loop
End Sub
Respuesta Responder a este mensaje
#4 Orfao
23/04/2007 - 03:22 | Informe spam
Gracias nuevamente por el interes mostrado

Habia bajado algo similar desde el foro de exeluciones
ahora bien, podrias ayudarme a diseñar la solucion final
algo asi como:
el procedimiento PosicionDelCursor solo deberia activarse cuando este sobre
el boton
para saber exactamente cuando sale de el
una vez fuera del boton no necesito conocer su ubicacion solo que esta
afuera y justo cuando me vuelvo a colocar sobre el boton comienza de nuevo el
procedimiento a ver cuando sale.
por otro lado, al hacer click sobre el boton debera ejecutar la macro que le
haya asignado pero no sin antes interrumpir el procedimiento
PosicionDelCursor y luego activarlo al finalizar la macro.
me explique?

Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

> Lo habia hecho montando en boton sobre otra imagen un poco mayor
> y con el mousemove de este lograba que cambiara y en realidad funciona muy parecido al ejempo tuyo
> pero... como dices tu hay que moverse lentamente para que pueda ser detectado.
> no habra otro metodo o forma de hacerlo tal vez a travez del api ? para evitar ese problema.

[creo que] sera mejor buscar una alternativa diferente que 'andar monitoreando' por donde anda el raton :D

1) por las API's puedes obtener las coordenadas por donde se anda 'paseando' el raton
PERO... -> en puntos de pantalla, ademas toma muy en cuenta que...
2) para 'monitorear' donde anda el cursor en cada momento... es necesario que 'el codigo' se este ejecutando 'constantemente'
lo que impediria que 'otro' codigo pudiera 'entrar en accion' de manera 'transparente' o amigable Y SIN RIESGOS :-(
3) la ubicacion de las celdas 'se mide' en puntos -> de documento [y son medidas distintas a los puntos -> de pantalla]
lo que implica una 'conversion constante' a puntos que permitan ubicar la celda por la que anda el raton
ademas de 'localizar/averiguar/comprobar/...' si por donde anda el puntero corresponde a las coordenadas del commandbutton
[contando con que no se hace algun 'scroll/zoom/...' de la pantalla que 'mueva' algo mas en la conversion de los puntos] -?-

-> al final te expongo un ejemplo del codigo que se la pasa 'rastreando' los paseos del raton [requiere correr en excel 2k o 'superior]
por si quisieras seguir por ese camino ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

-> el siguiente codigo [en un modulo normal] inicia el monitoreo del puntero y va depositando las coordenadas en dos celdas
para detenerlo... selecciona la celda 'D3'
en un modulo de codigo 'normal' ==> Public Declare Function GetCursorPos Lib "User32" (lpPoint As Puntero) As Long
Public Type Puntero
X As Long
Y As Long
End Type
Sub PosicionDelCursor()
Dim PosicionActual As Puntero
If MsgBox("Para detener el ""monitoreo""..." & vbCr & "Selecciona la celda ""D3""", _
vbOKCancel + vbInformation, "Posicion del cursor") = vbCancel Then Exit Sub
Do Until ActiveCell.Address = "$D$3"
GetCursorPos PosicionActual
[a2] = "Puntos X: " & PosicionActual.X & _
", Pixeles: " & ActiveWindow.PointsToScreenPixelsX(PosicionActual.X)
[a3] = "Puntos Y: " & PosicionActual.Y & _
", Pixeles: " & ActiveWindow.PointsToScreenPixelsY(PosicionActual.Y)
DoEvents
Loop
End Sub



Respuesta Responder a este mensaje
#5 Héctor Miguel
23/04/2007 - 04:08 | Informe spam
hola, moises !

el procedimiento PosicionDelCursor solo deberia activarse cuando este sobre el boton para saber exactamente cuando sale de el
una vez fuera del boton no necesito conocer su ubicacion solo que esta afuera
y justo cuando me vuelvo a colocar sobre el boton comienza de nuevo el procedimiento a ver cuando sale.
por otro lado, al hacer click sobre el boton debera ejecutar la macro que le haya asignado
pero no sin antes interrumpir el procedimiento PosicionDelCursor y luego activarlo al finalizar la macro.
me explique?



[creo que solo 'viste' el codigo con el ejemplo, pero te saltaste los comentarios de los puntos 1, 2 y 3] -???- [me re-explico]...

para estar en condiciones de 'detectar' [y exactamente] 'cuando'... el puntero se anda paseando [o no]... 'sobre' el boton...

op1: o mantienes un codigo en 'ejecucion constante y repetitiva'... [como la API]...

-> [te sugiero]... re-lee y analiza los comentarios de los puntos 1, 2 y 3 del mensaje anterior... ya que 'tal como lo solicitas'...
o utilizas esta opcion [con el consecuente consumo/desgaste/... de los recursos por la utilizacion de la instruccion 'DoEvents']
o nos vamos a seguir probando con la siguiente opcion:

op2: o dependes del evento '_mousemove' para detectar la entrada/salida del puntero por las coordenadas del boton [es decir]...
te 'sujetas' a las condiciones de 'rapidez' para que el evento '_mousemove' pueda establecer las coordenadas del puntero

es probable que existan mas alternativas, solo te recuerdo que mientras no puedas aprovechar los eventos 'naturales' de los objetos...
necesitaras recurrir a las API's, y estas 'necesitan' ser [re}activadas/llamadas/puestas en marcha/... por 'algo/alguien/de algun modo/...

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida