Trucos Detectar cuando el ratón entra o sale de un control (Hook de mensajes)

Documentación de la DLL "dsflash.dll" (c) 2002 by J. Thuemmler, Delphin Software
Esta DLL es gratuita y no tiene garantía.

PROPÓSITO DE LA DLL



Si quieres usar la DLL en aplicaciones MDI debes llamar a la función SetMDI() pasando el handle de la ventana MDI :

Private Sub MDIForm_Load()
Form1.Show
Form2.Show
Call SetMDI(hwnd)
End Sub

Para usar esta DLL puedes copiarla en el directorio de la aplicación o en el de sistema para uso compartido.

Se ha desarrollado el módilo "modFlash.bas" para reducir al mínimo el código de los formularios (ver ejemplo).

CÓMO FUNCIONA

La DLL sigue el movimiento del ratón empleando un hook del tipo WH_MOUSE y/o un timer interno. Cuando el hook realiza un cambio en la ventana en la que está el ratón la DLL llama a una función de tu aplicación, la cual debe estar en un módulo.

Los controles a "controlar" deben ser pasados a la DLL usando la función"AddObject()". También puedes emplear controles windowless como labels, shapes o images usando la función"AddRect()".

Puedes también definir un rectángulo y monitorizar eas "zonas" empleando la función "AddZone()". Las zonas no pueden ser más grandes que la ventana ni contener controles que estén también monitorizados. Esta característica es útil cuando quieres emplear una zona que contiene muchos controles.

La función debe tener el siguiente prototipo :

Public Function Callback&(ByVal cnew&, ByVal Item&)

La dirección de esta función debe ser pasada a la DLL en la llamada a "Prepare()" usando "AddressOf Callback".

Esta función será llamada por la DLL cuando el estado ha cambiado."cnew" contiene el elemento o 0 (cero) si el cursor está fuera de las regiones controladas.
Los controles windowless son pasados como números negativos, los controles "reales" por su hwnd y las zonas como un número secuencial positivo según se fueron añadiendo.
En los controles "reales" el parámetro "Item" será igual a -1; en los listbox "Item" contendrá el índice del elemento sobre el que está el cursor, contado para los elementos visibles, es decir, el primer elemento visible tendrá valor cero.
El valor de la propiedad ListIndex puede ser determinado empleando la propiedad TopIndex del listbox.

Normalmente, cuando existe más de un formulario en tu aplicación sólo se controlará el activo. Si quieres también controlar los inactivos debes llamar a la función "FlashAll(1)".

FUNCIONES

Prepare
Private Declare Function Prepare& Lib "dsflash" (ByVal ProcAddress&, ByVal UseHook&)

Parámetros :

ProcAddress : Dirección de la función callback.

UseHook : 0 para que la función reconozca el movimiento del ratón mediante un timer interno (sin hook) y 1 para que lo haga mediante un hook y un timer (la mjor manera).

Valor de retorno
1 (True), si todo fue bien, en otro caso 0 (false).

AddObject
Private Declare Function AddObject& Lib "dsflash" (ByVal hwnd&, ByVal hform&)

Parámetros :

hwnd : Handle del control (hwnd).

hform : Handle del formulario que contiene el control.

Valor de retorno
-1, si el handle es inválido o se han añadido más de 100 controles
-2, si el control ya se había pasado
Si todo va bien se devuelve un número asignado internamente por la DLL para identificar el control, que será necesario para eliminarlo.

AddRect
Private Declare Function AddRect& Lib "dsflash" (ByVal hcontainer&, ByVal hform&, _
                                  ByVal Left&, ByVal Top&, ByVal Width&, ByVal Height&)

Parámetros:

hcontainer : Handle del contenedor del control.

hform : Handle del formlario en el que está el control.

Left, Top, Width, Height : Posición y tamaño en pixels del control windowless en coordenadas relativas a su contenedor.

Valor de retorno
0 (cero), si ya se añadieron más de 100 controles
Si todo va bien se devuelve un número utilizado por la DLL para identificar el control o ractángulo. Este número se requerirá para eliminar el control/rectángulo.

AddZone
Private Declare Function AddZone& Lib "dsflash" (rct As RECT, ByVal hform&)

Parámetros :

rct: Las coordenadas en píxeles relativas a hform.

hform : Handle de l ventana que contiene el rectángulo.

Valor de retorno
0 (cero), si se han añadido más de 50 zonas
Si todo va bien se devuelve un número utilizado por la DLL para identificar la zona. Este número será necesario para eliminar la zona.

FlashAll
Private Declare Function FlashAll& Lib "dsflash" (ByVal flash&)

Parámetros :

flash : Por defecto 0. Si es cero sólo se tendrá en cuenta la ventana activa. Si es mayor se tomarán todas las ventanas.

Valor de retorno
Siempre es 1 (true)

RemoveObject, RemoveRect y RemoveZone
Private Declare Function RemoveObject& Lib "dsflash" (ByVal Num&)
Private Declare Function RemoveRect& Lib "dsflash" (ByVal Num&)
Private Declare Function RemoveZone& Lib "dsflash" (ByVal Num&)

Parámetros :

Num : Número devuelto por "AddObject()", "AddRect()" o "AddZone()".

Valor de retorno
1 (true), si todo fue bien
0 (false), en caso contario.

SetUC
Private Declare Function SetUC& Lib "dsflash" (ByVal uc&)

Parámetros :

uc : uc = 1, cuando usas la DLL para usercontrol, pero no para formularios.

Valor de retorno
Siempre es 1 (true).

SetMDI
Private Declare Function SetMDI& Lib "dsflash" (ByVal hwndMDI&)

Parámetros :

hwndMDI : Handle del formulario MDI. Debes llamar a esta función para usar la DLL en aplicaciones MDI.

Valor de retorno
1 (true), si hwndMDI& es un handle válido, en otro caso 0 (false).

UnHook
Private Declare Function UnHook& Lib "dsflash" ()

Parámetros :

Esta función no tiene parámetros.

Valor de retorno

1 (true), si todo fue bien
0 (false), en otro caso


CÓMO USAR LA DLL



Delphin Software
Mail: delphinsoft@gmx.de
Phone: 049 7251 18671
Fax: 049 7251 989773

Traducción libre por José Rubí

Download dsflash.zip  



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com