PDA

Ver la Versión Completa : Captura de los Mensajes del Ratón


Aprendiz
06-05-2003, 17:25:21
Hola en el recomienzo a todos.

Resulta que necesito detectar cuando alguien pulsa el ratón sobre mi programa. Hasta aquí parece fácil, la cosa es que trabajo con un formulario base del que heredo los nuevos formularios. Al hacer esto no se los componentes que me pondrán en los formularios heredados ni si estos tendrán sus propios eventos para el OnmouseDown.

La cuestión es que necesito detectar cualquier pulsación del ratón sobre el formulario o alguno de sus componentes para realizar una acción, pero sin "estorbar" los eventos del ratón definidos en cada uno de los componentes.

Había pensado capturar los messages del sistema referentes al ratón, pero no tengo claro ni como funciona ni si es la mejor solución.

Saludos

roman
06-05-2003, 18:51:17
Capturar el OnMouseDown (esto es, redefinir el método MouseDown) del formulario base no te sirve porque sólo captarías los mensajes directos sobre la forma y no sobre componentes que estén en la forma.

La manera que se me ocurre (probada aunque no comprobada) es colocar una componente TApplicationEvents en el formulario base y en su evento OnMessage poner:


if
((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST)) and
((Msg.hwnd = Handle) or IsChild(Handle, Msg.hwnd))
then
begin
{ Aquí el código que quieras }
end;


ApplicationEvents captura todos los mensajes dirigidos a la aplicación, incluídos mesajes a otras ventanas no heredadas de tu formulario base. Por ello debes verificar que Msg.hwnd es el "handle" de la ventana o de algún componente dentro de ella.

Ten en cuenta sin embargo, que el código que pongas para manejar los mensajes debe ser lo más rápido posible, de lo contrario tu aplicación se puede alentar bastante.

// Saludos