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


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Jue 20 Ago, 2009 3:07 pm Asunto: TComponentEditor |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 21 Ago, 2009 4:55 am Asunto: |
|
|
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 |
|
 |
|
|
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.
|