 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Bastian Ens

Registrado: 21 Ago 2002Mensajes: 27Ubicación: Valencia
|
Publicado: Mar 03 Sep, 2002 11:07 pm Asunto: HERENCIA DE EVENTOS? |
|
|
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?
COMO?
Admito sugerencias......  _________________ SALU2............Bastian! |
|
| Volver arriba |
|
 |
WinMan Invitado
|
Publicado: Jue 05 Sep, 2002 5:47 pm Asunto: Herencia |
|
|
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 |
|
 |
Bastian Ens

Registrado: 21 Ago 2002Mensajes: 27Ubicación: Valencia
|
Publicado: Sab 07 Sep, 2002 9:33 am Asunto: |
|
|
Hola WinMan!
Gracias por tu respuesta.
Lamentablemente, builder no soporta la herencia multiple en la creacion de componentes.
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.
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 |
|
 |
Invitado
|
Publicado: Mar 10 Sep, 2002 8:25 pm Asunto: |
|
|
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 |
|
 |
Bastian Ens

Registrado: 21 Ago 2002Mensajes: 27Ubicación: Valencia
|
Publicado: Jue 12 Sep, 2002 5:51 pm Asunto: Gracias! |
|
|
Gracias WinMan, funciona de maravilla....... te debo unas birras.  _________________ SALU2............Bastian! |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|