FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Detectar cuando entra y sale el mouse
Hola:
¿Cómo puedo hacer para que el componente detecte la entrada y salida del mouse? Así como ocurre con los botones de la barra de herramientas cuando está en "flat": cuando ingresa el cursor se crea un marco en el botón, cuando sale, desaparece el marco. Gracias. |
#2
|
||||
|
||||
¿De cuál componente estamos hablando? En algunas componentes se tiene los eventos OnMouseEnter y OnMouseLeave.
De no ser una de éstas puedes implementar tú mismo manejadores para los mensajes CM_MOUSEENTER y CM_MOUSELEAVE aunque para ello tendrás que derivar una nueva componente a partir de la que te interese. // Saludos |
#3
|
|||
|
|||
Vaya! ¿Estoy interesado, pero cómo hago esos manejadores? Es la primera vez que escucho esa palabra.
Gracias. |
#4
|
||||
|
||||
En Windows la comunicación con las ventanas se hace por medio de mensajes. Toda ventana tiene asociado un procedimiento de ventana que es llamado por el sistema cada vez que se envía un mensaje a la ventana y que debe implementar el código de aquellos mensajes que le interesen. Básicamente es un case grandote:
donde el etcétera puede abarcar una gran cantidad de mensajes. La VCL de Delphi implementa las cosas de forma tal que este manejo de mensajes se traduce en llamadas a eventos y métodos. Por ejemplo, el mensaje WM_CREATE se traduce, luego de muchas cosas, en una llamada al evento OnCreate de un formulario. Los mensajes WM_LBUTTONDOWN, WM_RBUTTONUP, etc. se traducen en llamadas al método MouseDown. Normalmente toda la traducción es transparente para el programador pero si se requiere pueden interceptarse determinados mensajes para tratarlos de forma distinta. Para ello se crea un manejador del mensaje:
donde la llamada a inherited permite que el código normalmente asociado al mensaje se ejecute. Además de los mensajes que define el sistema, Delphi puede generar otros mensajes para determinadas tareas. Ejemplos de estos son CM_MOUSEENTER y CM_MOUSELEAVE (nota el prefijo CM en lugar de WM para distinguir los mensajes "custom"). El sistema no maneja la entrada y salida del cursor del ratón sobre los controles de manera que Delphi lleva un registro de por donde va pasando para poder generar estos mensajes. Entonces, en tu caso específico debes crear estos manejadores para el control que estés diseñando, por ejemplo, un derivado de TEdit:
Nota el uso de la palabra semi reservada message. El parámetro Msg es un registro que engloba el identificador del mensaje en sí (la constante CM_MOUSEENTER), los parámetros WParam y LParam que usa Windows y el resultado que normalmente devolvería WndProc. Para muchos mensajes Delphi define versiones epeciales de este registro para renombrar los parámetros según el mensaje de que se trate (como en TWMLButtonDown). No es el caso (me parece) para CM_MOUSEENTER y CM_MOUSELEAVE ya que, de hecho, estos mensajes no reciben parámetros. // Saludos |
|
|
|