Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Captura de los Mensajes del Ratón (https://www.clubdelphi.com/foros/showthread.php?t=118)

Aprendiz 06-05-2003 17:25:21

Captura de los Mensajes del Ratón
 
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:

Código:

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


La franja horaria es GMT +2. Ahora son las 05:54:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi