Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-02-2014
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
Como asignar evento MouseEnter y MouseLeave a componente

Buenas... He creado un componente apartir de la Clase TCustomControl


Código:
 
  class PACKAGE TMiComponente : public TCustomControl
Necesito que TMiComponente contenga los eventos OnMouseMove, OnMouseUp, MouseEnter y MouseLeave...
Con los dos primeros no he tenido problemas, los hereda de TCustomControl y con declararlos de la forma:

Código:
 
 __published: 
    __property OnMouseMove;
    __property OnMouseUp;
puedo acceder ha ellos

Situacion diferente afecta a MouseEnter y MouseLeave que supongo no son eventos de TCustomControl .

Creo que tengo que capturar los mensajes MouseEnter y MouseLeave

Código:
 
 
    //Mesaje entrar raton en componente
    void __fastcall CMMouseEnter (TMessage Message);
 
    //Mesaje salir raton del componente
    void __fastcall CMMouseLeave (TMessage Message);
 
    BEGIN_MESSAGE_MAP
     VCL_MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter);
     VCL_MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave);
    END_MESSAGE_MAP (TCustomControl);
 
   void __fastcall   TMiComponente::CMMouseEnter(TMessage Message)
    {
      .....................
    }
 
 
   void __fastcall  TMiComponente::CMMouseLeave(TMessage Message)
    {
       .....................
    }
Hasta aqui correcto dentro del propio componente detecto la entrada y salida del raton... el problema es que no se como hacer para que al igual que los componentes OnMouseMove, OnMouseUp formen parte de los eventos del componente y pueda acceder a ellos "externamente"
en fase de diseño cuando forman parte de otros componentes..

Alguna idea... Gracias

Nota: HE intentado borrar el mensaje anterior enviado por error pero no doy LO SIENTO

Última edición por NEG1414 fecha: 03-02-2014 a las 11:52:57.
Responder Con Cita
  #2  
Antiguo 03-02-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola NEG1414.


A modo de guía, debería ser similar a esto:

MiComponente.h
Código:
#ifndef MiComponenteH
#define MiComponenteH

#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>

class PACKAGE TMiComponente : public TCustomControl
{ 
private:  // User declarations
  TNotifyEvent FOnMouseEnter;
  TNotifyEvent FOnMouseLeave;

protected:
  void __fastcall CMMouseEnter(Messages::TMessage &Message);
  void __fastcall CMMouseLeave(Messages::TMessage &Message);
  BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, CMMouseEnter)
    MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, CMMouseLeave)
  END_MESSAGE_MAP(TCustomControl)

public: // User declarations
  __fastcall TMiComponente(TComponent* Owner);

__published:  // IDE-managed Components
   __property TNotifyEvent OnMouseEnter= {read= FOnMouseEnter, write= FOnMouseEnter};
   __property TNotifyEvent OnMouseLeave= {read= FOnMouseLeave, write= FOnMouseLeave};
  //...
};

#endif
MiComponente.cpp
Código:
#include <vcl.h>

#pragma hdrstop
#include "MiComponente.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(TMiComponente *)
{
  new TMiComponente(NULL);
}

__fastcall TMiComponente::TMiComponente(TComponent* Owner) : TCustomControl(Owner)
{
  FOnMouseEnter = 0;
  FOnMouseLeave = 0;
}

void __fastcall TMiComponente::CMMouseEnter(Messages::TMessage &Message)
{
  if (FOnMouseEnter) 
    FOnMouseEnter(this);
}

void __fastcall TMiComponente::CMMouseLeave(Messages::TMessage &Message)
{
  if (FOnMouseLeave) 
    FOnMouseLeave(this);
}

namespace Micomponente
{
  void __fastcall PACKAGE Register() {
     TComponentClass classes[1] = {__classid(TMiComponente)};
     RegisterComponents("Samples", classes, 0);
  }
}
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 04-02-2014
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
Sencillamente perfecto.... Gracias
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como asignar un valor a una variable global desde un componente paquechu Varios 6 15-01-2014 21:10:18
Asignar Evento AndyLupa Varios 4 17-06-2011 18:54:53
Cómo codificar en el evento (incluso asignado) de un componente dec OOP 58 31-01-2010 05:48:30
Como añadir un nuevo evento a un componente Javi2 Varios 6 20-12-2004 13:25:12


La franja horaria es GMT +2. Ahora son las 10:10:42.


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