Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2004
soul6301 soul6301 is offline
Miembro
 
Registrado: may 2004
Posts: 77
Poder: 20
soul6301 Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 10-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #3  
Antiguo 14-08-2004
soul6301 soul6301 is offline
Miembro
 
Registrado: may 2004
Posts: 77
Poder: 20
soul6301 Va por buen camino
Vaya! ¿Estoy interesado, pero cómo hago esos manejadores? Es la primera vez que escucho esa palabra.

Gracias.
Responder Con Cita
  #4  
Antiguo 14-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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:

Código Delphi [-]
function WndProc(Message, WParam, LParam: Cardinal): boolean;
begin
  case Message of
    WM_CREATE: ;
    WM_CLOSE: ;
    WM_ACTIVATE: ;
    WM_DESTROY: ;
    
    etc.
  end;
end;

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:

Código Delphi [-]
procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
begin
  inherited;
  
  { tu código }
end;

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:

Código Delphi [-]
type
  TMyEdit = class(TEdit)
  private
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
  end;

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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:36:49.


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