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 

TComponentEditor

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

Hola chicos,
quisiera saber si es posible hacer lo que tengo en mente de una manera u otra.
La idea es en esencia crear un componente derivado de TImage que al hacer doble click sobre él, en tiempo de diseño, me aparezca un formulario hecho por mí en el que pueda insertar valores en Edits o ComboBoxes. He visto que talvez con TComponentEditor puedo hacer algo parecido. ¿Sabeis como debería utilizarlo o teneis algún ejemplo de esta clase?

Muchas gracias
_________________
Be water my friend.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No es necesario crear un nuevo componente derivado de TImage si lo que quieres es añadirle un editor de componente al mismo. Aquí va un pequeño ejemplo de como crearíamos un editor.. sería lo mismo para cualquier otro componente, basta con cambiar los nombres en los lugares adecuados:

- Para empezar he creado un nuevo Form y le he llamado "MyDialog", y luego he hecho los siguientes cambios en el código. Las líneas que comienzan por "/*+*/" son las que he añadido, "//-//" las que he quitado, y "/***/" las que he modificado:
(Para hacerlo más simple creo la clase del editor en el mismo modulo del Form)

MyCompEd.h
Código:

//---------------------------------------------------------------------------
#ifndef MyCompEdH
#define MyCompEdH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TMyDialog : public TForm
{
__published:   // IDE-managed Components
private:   // User declarations
/*+*/   TImage* comp_;
/*+*/   _di_IDesigner designer_;
public:      // User declarations
/***/   __fastcall TMyDialog(TComponent* comp, _di_IDesigner designer);
};
//---------------------------------------------------------------------------
//-// extern PACKAGE TMyDialog *MyDialog;
//---------------------------------------------------------------------------
#endif

MyCompEd.cpp
Código:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
/*+*/   #include <VCLEditors.hpp>
/*+*/   #include <memory>
#include "MyCompEd.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//-//   TMyDialog *MyDialog;
//---------------------------------------------------------------------------
/*+*/   // Creamos la clase del editor del componente
/*+*/   class TMyComponentEditor : public TComponentEditor
/*+*/   {
/*+*/   public:
/*+*/       virtual void __fastcall Edit(void)
/*+*/       {
/*+*/         std::auto_ptr<TMyDialog> dlg(new TMyDialog(Component, Designer));
/*+*/         dlg->ShowModal();
/*+*/       }
/*+*/   };
/*+*/   //-------------------------------------------------------------------
/*+*/   // Registramos el editor..
/*+*/   // (El nombre que utilizamos para el namespace debe ser el
/*+*/   // mismo del .cpp pero solo con la primera letra en mayuscula)
/*+*/   namespace Mycomped
/*+*/   {
/*+*/       void __fastcall PACKAGE Register()
/*+*/       {
/*+*/           RegisterComponentEditor(__classid(TImage),
/*+*/                                   __classid(TMyComponentEditor));
/*+*/       }
/*+*/   }
//---------------------------------------------------------------------------
/***/   __fastcall TMyDialog::TMyDialog(TComponent* comp, _di_IDesigner designer)
/***/       : TForm(static_cast<void*>(0)),
/***/           comp_(static_cast<TImage*>(comp)), designer_(designer)
{
    //...
    // En "comp_" tenemos el componente a editar, en este caso el TImage
    //...
    // Y debemos usar "designer_->Modified();" para visualizar los cambios
    //   que hemos hecho en el componente a editar
    // (asegurarnos antes de que "designer_" no contenga un valor nulo)
}
//---------------------------------------------------------------------------

Finalmente he agregado "MyCompEd.cpp" a un nuevo "Package" y lo he compilado e instalado.

Lo he probado en el BCB6 y en el 2009, en este ultimo la única diferencia es que he tenido que añadir manualmente el archivo "C:\Archivos de programa\Codegear\RAD Studio\6.0\lib\release\designide.bpi" en el apartado "Requires" del "Package", el BCB6 lo añadió automáticamente.
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.