Hola David:Para hacer lo que necesitas podrías usar los eventos CM_MOUSEENTER y CM_MOUSELEAVE, el primero se dispara cuando el cursor del ratón entra en el control y el segundo cuando este sale.
Como ejemplo, aplicando esto a un TLabel (es lo mismo con cualquier otro), al que añadiremos dos eventos: OnMouseEnter (cuando el cursor este sobre la etiqueta y OnMouseExit (cuando el cursor salga del control), quedaría así:
// ### FICHERO: lsLabel.H ### //
code:
//---------------------------------------------------------------------------
#ifndef lslabelH
#define lslabelH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
#include <vcl\StdCtrls.hpp>
//---------------------------------------------------------------------------
class TlsLabel : public TLabel
{
private:
TNotifyEvent FOnMouseEnter;
TNotifyEvent FOnMouseExit;
protected:
void CMMouseEnter(TMessage & msg);
void CMMouseLeave(TMessage & msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
END_MESSAGE_MAP(TLabel)
public:
__fastcall TlsLabel(TComponent* Owner);
__published:
__property TNotifyEvent OnMouseEnter = {read=FOnMouseEnter, write=FOnMouseEnter};
__property TNotifyEvent OnMouseExit = {read=FOnMouseExit, write=FOnMouseExit};
};
//---------------------------------------------------------------------------
#endif
// ### FICHERO lsLabel.CPP ### //
code:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop#include "lslabel.h"
//---------------------------------------------------------------------------
static inline TlsLabel *ValidCtrCheck() { return new TlsLabel(NULL); }
//---------------------------------------------------------------------------
__fastcall TlsLabel::TlsLabel(TComponent* Owner)
: TLabel(Owner)
{
}
//---------------------------------------------------------------------------
void TlsLabel::CMMouseEnter(TMessage & msg)
{
if (Enabled && FOnMouseEnter)
FOnMouseEnter(this);
}
//---------------------------------------------------------------------------
void TlsLabel::CMMouseLeave(TMessage & msg)
{
if (Enabled && FOnMouseExit)
FOnMouseExit(this);
}
//---------------------------------------------------------------------------
namespace Lslabel
{
void __fastcall Register()
{
TComponentClass classes[1] = {__classid(TlsLabel)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
Luego instalarlo como un nuevo componente (Menú: Component > Install...), se añadirá en la pestaña 'Samples'.
Espero que se entienda así, sin haber añadido comentarios. En caso de que algo no se entienda dimelo.
Si te es mas comodo, o prefieres bajar los ficheros:
- Ficheros: lsLabel.h y lsLabel.cpp
http://cppbuilder.hypermart.net/over-cp.zip
- Y de este otro enlace un proyecto de ejemplo usando este componente, ya compilado por si quieres probarlo antes de instalarlo...
http://cppbuilder.hypermart.net/over-ej.zip
Saludos.
PD.: ¡Ojo! tal como se muestra solo es valido en BCB1, para usarlo en BCB3 en adelante, hay que hacer unas minimas modificaciones.