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 

HERENCIA DE EVENTOS?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: HERENCIA DE EVENTOS? Responder citando

Question
Tengo un problema, a ver si me podeis ayudar.
Tengo que hacer un ActiveX de un comonente no visual (No deriva de TWinControl), y se me ha ocurrido hacer un componente que derive de TWinControl y hacer que contenga el componente no visual.
Código:

class package miclase : public TWniControl
{
public
 
TCompNoVisual * MiComp;
.
.
.


Puedo hacer que "miclase" tenga las propiedades de "MiComp", pero no se como hacer para que tambien tenga los eventos.

Se puede hacer esto?
Embarassed COMO?

Admito sugerencias...... Wink
_________________
SALU2............Bastian!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Herencia Responder citando

Lo que sucede es que MiComp, es un miembro de la clase miclase, en este caso solo puedes usar el elemento mienbro como cualquier otro elemento, o sea, hacieno llamados directos el elemeneto miembro:

MiComp->falgo();
..
etc.
lo que puedes hacer es crear de nuevo los eventos en la clase miclase, y cuando se ejecuten, llames al evento de MiComp, algo asi:

miclase::SomeEvent()
{
MiComp->SomeEvent();
// algo mas que necesites procesar
}

El metodo que se diseño para evitar lo de arriba, es utilizar herencia multiple, algo así como lo siguiente:

class package miclase : public TWniControl, public TCompNoVisual
{
public:

// TCompNoVisual * MiComp; //esto ya no va
.
.
.
}

y en las llaamadas a los elementos miembro de TCompNoVisual ya no se requiere el uso de otro objeto, ya que los miembros de TCompNoVisual pertenecen a miclase. Toma en cuenta que NO SE si C++ Builder soporta la herencia multiple para la creación de componentes.

Suerte.

WinMan
Volver arriba
Mensaje    Asunto: Responder citando

Hola WinMan! Very Happy

Gracias por tu respuesta.
Lamentablemente, builder no soporta la herencia multiple en la creacion de componentes. Confused
El problema, es que el componente no visual, lo uso para comunicar por el puerto serie, y los eventos se llaman automaticamente cuando se recibe algo por el serie, y lo que quiero es que cuando se ejecute el evento de MiComp, que se ejecute el evento correspondiente de MiClase.
Question
Hay alguna forma de escribir un manejador de eventos que salte cuando se reciba algo en MiComp y llame al evento de MiClase. Seria como cuando en un form introduces un boton, y el menejador del evento OnClick, llamara a otro evento del form.

creo que seria algo asi

Código:
void __fastcall MiClase::MiCompEvent (TObject * Sender)
{
if (FOnEvent) FOnEvent(this);
}


la forma de esta funcion la he sacado de la funcion que se crea cuando escribes un manejador de eventos de un componente insertado en un form, solo que he cambiado el nombre del form por el de el objeto que contiene el componente no visual...
_________________
SALU2............Bastian!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Observa esto:

cuando pones el objeto TButton *MyButton, en un TForm y le asignas en tiempo de diseño la función MyOnClick en el evento OnClick, esta función se ejecuta cuando el evento ocurre, supongamos que necesitas modificar la función por la nueva función MyOnClick2 que se ejecuta cuando el click ocurre, esto mismo lo puedes modificar en tiempo de ejecución haciendo algo como lo siguiente:

MyButton->OnClick = MyOnClick2;

Utilicemos el ejemplo de la clase TButton y hagamos que se llame a una función de tu clase cuando el evento OnClick del button incluido en tu clase se active.

class package miclase : public TWniControl
{
public:
miclase();
// Nuevo evento OnClick de esta clase que se ejecutara
// cuando el evento OnClic de MiBoton se active
void __fastcall MyOnClick(TObject *Sender);
....
private:
TButton * MiBoton; // Este sera el objeto que recibira el
//evento OnCick
void __fastcall BotonOnClick(TObject *Sender);
....
}


// Constructor de miclase
miclase::miclase()
{
MiBoton = new TButton(NULL);

// propiedades del boton
MiBoton->Top = 100;
MiBoton->Left = 100;
.....

// Evento Click del Boton y otro eventos a asignar
MiBoton->OnClick = BotonOnClick;
.....
}


void __fastcall miclase::BotonOnClick(TObject *Sender)
{
// haces lo que quieras
.....
// Llama a la función MyOnClick de la clase
MyOnCLick(NULL);
.....
}


void __fastcall miclase::MyOnClick(TObject *Sender);
{
// cuando se ejecuta un evento
// OnClick del Boton MiBoton,
// se ejectuta esta función
.....
}


Bueno, esto debe funcionar, como antes, no lo he probado, empieza creando el ejemplo aqui descrito (con el objeto TButton), y cuando veas que funciona, adaptalo para tu necesidad.

Suerte

WinMan
Volver arriba
Mensaje    Asunto: Gracias! Responder citando

Gracias WinMan, funciona de maravilla....... te debo unas birras. Laughing
_________________
SALU2............Bastian!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.