Originalmente publicado en FoxTALK Febrero de 1998 Traducción de Ariel Gimenez
Como se mueve el ratón
Jim Booth
Si tu aplicación necesita contemplar
las acciones del ratón, puedes tanto llamar a un exterminador o usar los
eventos que Visual FoxPro nos dá para capturar las acciones del mouse
y sus botones. Desde que mis usuarios se enojaron al ver ese tipo del
traje metalico destruyendo sus ratones, prefiero usar los eventos enVisual
FoxPro.
Allí hay un número de eventos que pueden informarnos de las
actividades del ratón. MouseMove, MouseDown, MouseUp, Click, RightClick,
DoubleClick, MiddleClick, y el MouseWheel son los eventos que
nos interesan.
Echemosle una mirada al MouseMove primero. El archivo de ayuda nos dice que
este evento se dispara cuando se mueve el ratón sobre un control. Esto es correcto, y debido
a que constantemente se dispara mientras el ratón se esta moviendo sobre
el control puede ser un problema para la performance, si no es utilizado
correctamente. Recuerda cuando escribes codigo
en el MouseMove que este correra muy frecuentemente y por
consiguiente este debe ser corto y conciso.
El MouseMove recibe cuatro(4) parámetros. Estos son nButton, nShift,
nXCoord, y nYCoord respectivamente.
Estos parámetros nos cuentan sobre la posición del puntero del
ratón, el estado de los botones del ratón, y el estado de las teclas shift,
ctrl y alt . Sus valores
son:
El parámetro nButton posee un valor entre 0 y
7 y se refiere al estado de los botones del ratón. El valor 0 significa
que no hay botones presionados mientras que los valores de 1, 2, y
4 cada uno se refiere a que los botones izquierdo, derecho, y medio
se encuentran presionados respectivamente. Los otros valores (3,5,6,7)
nos informa de las combinaciones de botones que estan presionados. El parámetro nButton posee
un valor que es la suma de los valores de los botones presionados, así
que si el boton izquierdo y derecho están presionados entonces nButton será
igual a 3, o la suma de 1 (botón izquierdo) y 2 (botón
derecho).
El parámetro nShift nos dá una información similar
sobre las teclas Shift, CTRL, y Alt .
Los valores para este parámetro son manejados similarmente
a el parámetro nButton en el cual Shift es 1, CTRL es 2, y
Alt es 4. Ninguna es 0 y si
mas de una tecla de estas esta presionada entonces nShift será la
suma de los valores de las mismas.
El parámetro nXCoord y nYCoord nos informan de la posición
horizontal y vertical del ratón respectivamente. Los valores de este parámetro
son tomados con respecto al formulario y no del control, así
que cuando el mouse ingresa a la parte de arriba del control el nYCoord NO
es 0 o 1 sinó el número de pixel desde el formulario mismo.
El formulario de ejemplo Mice.scx muestra el uso
del evento MouseMove de un botón para actualizar algunos otros
controles. los otros controles nos van
mostrando el estado de las cosas mientras el ratón se mueve sobre el command
button. Un extracto del código
del MouseMovecode del botón esta listado abajo, este extracto es
el código que determina si el puntero del ratón esta entrando,
saliendo, o moviendose dentro del command button.
Hace esto chequeando el nXCoord del puntero del ratón para
ver si este cae dentro de los 3-pixels del borde arriba, abajo,
izquierda, o derecha del limite del botón. Si
el puntero se encuentra en este perímetro entonces chequea si el
ratón se encontraba previamente sobre el botón o no(en el ejemplo
estamos usando el valor corriente del option button group, pero en código
real esto debería ser manejado con una propiedad del botón mismo) y
entonces setear el valor entrante o saliente del OptionButton group
en el formulario para reflejar esto. Hay también código en el MouseMove
del formulario que setea el valor del OptionButton group
en 0 indicando que el ratón no se encuentra sobre el boton.
LPARAMETERS nButton, nShift, nXCoord, nYCoord
WITH THISFORM
IF ((nXCoord >= THIS.Left AND nXCoord <= THIS.Left+3)
OR ;
(nXCoord
<= THIS.Left + THIS.Width AND ;
nXCoord >= THIS.Left + THIS.Width-3))
OR ;
((nYCoord
>= THIS.Top AND nYCoord <= THIS.Top+3) OR ;
(nYCoord
<= THIS.Top + THIS.Height AND ;
nYCoord >= THIS.Top + THIS.Height-3))
DO
CASE
CASE
.optEntering.Value = 0
* estamos entrando
.optEntering.Value = 1
CASE
.optEntering.Value = 2
* estamos saliendo
.optEntering.Value = 3
ENDCASE
ELSE
* estamos sobre el control
.optEntering.Value = 2
ENDIF
* mas código aqui
El formulario de ejemplo está disponible para los suscriptores
de FoxTALK en el area de downloads en http://www.pinnaclepublishing.com/ft. El formulario de ejemplo muestra
como leer el estado de los botones del ratón, las teclas shift/ctrl/alt, y
las coordenadas x e y del ratón, y también el manejo de la entrada
y salida del control. si usted no es suscriptor puede suscribirse
desde el mismo sitio web de FoxTALK.
|
Jim Booth
|
cuando quiero cambiar de lugar el cursor con el mouse me presenta un rectangulo de color y no responde a la accion querida
ResponderBorrar