TImage con OnMouseEnter y OnMouseLeave  

Enviado Por: Radikal (Q3 Team)
Web : http://www.q3.nu
Email: radikal@q3.nu
Fecha: 05/02/00

Truco accedido 110 veces

 


Hay veces que nos gustaría disponer de eventos OnMouseEnter y OnMouseLeave en alguno de nuestros controles, o bien en los controles standard de Delphi, para poder cambiar el aspecto del componente cuando el usuario pase el cursor del ratón sobre él.
En todos los descendientes de TComponent podremos añadir estos dos nuevos eventos fácilmente. Sólo tendremos que capturar los mensajes CM_MOUSEENTER y CM_MOUSELEAVE, y lanzar dos eventos que hayamos añadido en el componente.

Por ejemplo, aqui tienes un descendiente de TImage en el que he añadido estos dos eventos, que son lanzados cuando se recibe uno de los dos mensajes de Windows capturados:

 unit Image2;

 interface

 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   ExtCtrls;

 type
   TEntrarEvent=procedure(Sender:TObject) of object;
   TSalirEvent =procedure(Sender:TObject) of object;
   TImage2 = class(TImage)
   private
     { Private declarations }
     FOnEnter:TEntrarEvent;
     FOnExit :TSalirEvent;
     procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;
     procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
   protected
     { Protected declarations }
   public
     { Public declarations }
   published
     { Published declarations }
     property OnMouseEnter: TEntrarEvent read FOnEnter write FOnEnter;
     property OnMouseLeave: TSalirEvent read FOnExit write FOnExit;

   end;

 procedure Register;

 implementation

 procedure TImage2.CMMouseEnter(var msg:TMessage);
 begin
     inherited;
     {Cuando el raton entra...}
     If Assigned(FOnEnter) then FOnEnter(Self);
 end;

 procedure TImage2.CMMouseLeave(var msg: TMessage);
 begin
     inherited;
     {Cuando el raton sale}
     If Assigned(FOnExit) then FOnExit(self);
 end;

 procedure Register;
 begin
   RegisterComponents('TMania', [TImage2]);
 end;

 end.