Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

¿Como hago para que cuando el ratón pase por encima de un la

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ¿Como hago para que cuando el ratón pase por encima de un la Responder citando

Pues eso, pero tambien quiero saber que cuando el ratón se salga de la región del label vuelva al mismo color que tenia al principio. Es que no tiene ese evento el label, tiene onmousedown y onmouseup y quiero algo como onmouseover y onmouseleave
Volver arriba
Mensaje    Asunto: ¿Como hago para que cuando el ratón pase por encima de un la Responder citando

http://212.163.180.66/ubb/Forum1/HTML/000311.html
Volver arriba
Mensaje    Asunto: ¿Como hago para que cuando el ratón pase por encima de un la Responder citando

Gracias leo, yo tengo c++builder 5, y no trae ese evento el label.
Volver arriba
Mensaje    Asunto: ¿Como hago para que cuando el ratón pase por encima de un la Responder citando

Hola DCelso:

No, efectivamente los eventos OnMouseOver y OnMouseLeave no vienen con ninguna versión de C++Builder, por eso mismo lo que muestra el código anterior es como crear un nuevo componente derivado de TLabel que si los tenga, y esto vale en cualquier versión, incluida la 5, a continuación te pego el código aquí con las pequeñas adaptaciones necesarias para que funcione en BCB3, 4 y 5, el del enlace era para BCB1, pero como veras apenas cambia mas que nada añadir en algunos sitios la palabra PACKAGE:

// ### FICHERO: lsLabel.H ### //

code:

//---------------------------------------------------------------------------
#ifndef lsLabelH
#define lsLabelH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TlsLabel : public TLabel
{
private:
TNotifyEvent FOnMouseEnter;
TNotifyEvent FOnMouseExit;
protected:
void CMMouseEnter(TMessage & msg);
void CMMouseLeave(TMessage & msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
VCL_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.h>
#pragma hdrstop

#include "lsLabel.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TlsLabel *)
{
new TlsLabel(NULL);
}
//---------------------------------------------------------------------------
__fastcall TlsLabel::TlsLabel(TComponent* Owner)
: TLabel(Owner)
{
}
//---------------------------------------------------------------------------
namespace Lslabel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TlsLabel)};
RegisterComponents("_Leo", classes, 0);
}
}
//---------------------------------------------------------------------------
void TlsLabel::CMMouseEnter(TMessage & msg)
{
if (Enabled && FOnMouseEnter)
FOnMouseEnter(this);
}
//---------------------------------------------------------------------------
void TlsLabel::CMMouseLeave(TMessage & msg)
{
if (Enabled && FOnMouseExit)
FOnMouseExit(this);
}
//---------------------------------------------------------------------------


y listo, con esto tenemos un nuevo componente llamado 'TlsLabel' que al instalarlo quedara bajo la pestaña '_Leo' y que es identico al TLabel pero con los dos nuevos eventos.

Saludos.

Volver arriba
Mensaje    Asunto: ¿Como hago para que cuando el ratón pase por encima de un la Responder citando

...aquí va otra manera de hacerlo sin tener que crear un nuevo componente, aunque creo que la de crear un componente es mejor opción si se van a usar muchas etiquetas en el mismo programa...

Creo que mostrando el código se entendera mejor que si lo explico simplemente lo que hace es subclasificar el TLabel para interceptar los nuevos eventos.

Creamos un nuevo proyecto vacío, añadimos un TLabel y pegamos lo siguiente sobre el código existente en la unit1.cpp y unit1.h:

// ### FICHERO: Unit1.h ### //

code:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
private: // User declarations
Controls::TWndMethod OldLabelWP;
void __fastcall NewLabelWP(TMessage &Msg);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


// ### FICHERO: Unit1.cpp ### //

code:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OldLabelWP = Label1->WindowProc;
Label1->WindowProc = NewLabelWP;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewLabelWP(TMessage &Msg)
{
switch (Msg.Msg)
{
case CM_MOUSEENTER:
Label1->Color = clYellow;
break;
case CM_MOUSELEAVE:
Label1->Color = clBtnFace;
break;
case WM_DESTROY:
Label1->WindowProc = OldLabelWP;
}
OldLabelWP(Msg);
}
//---------------------------------------------------------------------------


Espero que te sirva...
Saludos.

Volver arriba
Mensaje    Asunto: O sea!! Responder citando

Una vez tenemos el lsLabel.h y el lsLabel.cpp programados como hacemos para compilarlos y poder ponerlos en las barras de herramientas?

Se abre el CPP y se va a la pestaña de Component?
Se abre el BCB5 se crea un nuevo .h se declara la clase y luego se crea el .CPP se escriben los metodos y .... ?

Nada que no consigo saber la mecanica.... Crying or Very sad triste es no saber!!

Si alguien me explica....Gracias.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.