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 

Como puedo hacer y utilizar un editor de propiedades, ver de

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como puedo hacer y utilizar un editor de propiedades, ver de Responder citando

Cuando se crean componentes si se le asigna una variable simple a alguna propiedad que queremos que se muestre en el inspetor de objetos en esta propiedad solo aparece un edit , si le asignamos un arreglo aparece un combo con los valores, bueno yo lo que quiero es hacer algo como la propiedad Icon del BitButton en la cual aparece un cuadrito si le damos click se abre una forma para cargar el icono , quiero que en alguna propiedad de mi componente por ejemplo Imagen se habra una forma que yo haya diseñado para cargar esa imagen
Volver arriba
Mensaje    Asunto: Como puedo hacer y utilizar un editor de propiedades, ver de Responder citando

Hola:

¿ Que versión de C++Builder utilizas ? Ya que este tipo de cosas ha ido variando levemente entre versiones.

Aquí te va un ejemplo con comentarios, espero que te sirva y lo puedas entender, sino dime que partes no entiendes e intentare ayudarte:

### Cabecera - ComponentePrueba.h

code:
//---------------------------------------------------------------------------

#ifndef ComponentePruebaH
#define ComponentePruebaH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
//---------------------------------------------------------------------------
#include <DesignEditors.hpp> // En versiones anteriores a la 6
// debemos usar #include <DsgnIntf.hpp>
//---------------------------------------------------------------------------
/// Nuestro nuevo tipo de propiedad de prueba ///////////////////////////////
class TMiPropiedad : public TPersistent
{
private:
int _variableEjemplo;
public:
void __fastcall Assign(TPersistent *nuevoValor)
{
TMiPropiedad *objeto = dynamic_cast<TMiPropiedad*>( nuevoValor );
VariableEjemplo = objeto->VariableEjemplo;
}
__published:
__property int VariableEjemplo = {read=_variableEjemplo,
write=_variableEjemplo};
};
//---------------------------------------------------------------------------
/// Editor de propiedades de prueba /////////////////////////////////////////
// como ejemplo vamos a poner todo el codigo del editor de propiedades
// en esta cabecera
class PACKAGE TPropiedadPrueba : public TClassProperty
{
public:

// En versiones anteriores a la 6 cambiamos
// _di_IFormDesigner por _di_IDesigner
__fastcall TPropiedadPrueba(const _di_IDesigner ADesigner, int APropCount)
: TClassProperty(ADesigner, APropCount) { }

virtual TPropertyAttributes __fastcall GetAttributes(void)
{
// Aqui es donde le decimos que muestre ese botoncito ...
return TPropertyAttributes() << paDialog;
}

virtual void __fastcall Edit(void)
{
// Aqui mostramos el form o la tarea que se tiene que ejecutar
// al pulsar ese botoncito
TMiPropiedad *miPropiedad = reinterpret_cast<TMiPropiedad*>(GetOrdValue());

miPropiedad->VariableEjemplo =
MessageBox(NULL, "Seleccione una respuesta", "Pregunta", MB_YESNO);
}
};
//---------------------------------------------------------------------------

class PACKAGE TComponentePrueba : public TComponent
{
private:
TMiPropiedad *_propiedadPrueba;
protected:
public:
__fastcall TComponentePrueba(TComponent* Owner);
__fastcall ~TComponentePrueba();
__published:
__property TMiPropiedad *PropiedadPrueba = {read=_propiedadPrueba,
write=_propiedadPrueba};
};
//---------------------------------------------------------------------------
#endif


### Implementación - ComponentePrueba.cpp

code:
//---------------------------------------------------------------------------
#include <vcl.h>

#pragma hdrstop

#include "ComponentePrueba.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(TComponentePrueba *)
{
new TComponentePrueba(NULL);
}
//---------------------------------------------------------------------------
__fastcall TComponentePrueba::TComponentePrueba(TComponent* Owner)
: TComponent(Owner)
{
_propiedadPrueba = new TMiPropiedad;
}
//---------------------------------------------------------------------------
__fastcall TComponentePrueba::~TComponentePrueba()
{
delete _propiedadPrueba;
}
//---------------------------------------------------------------------------
namespace Componenteprueba
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TComponentePrueba)};
RegisterComponents("_Leo", classes, 0);

// Registramos nuestro editor de propiedades
RegisterPropertyEditor(
__typeinfo(TMiPropiedad), // Tipo de propiedad
__classid(TComponentePrueba), // Componente que va a usar el editor
"PropiedadPrueba", // Nombre de la propiedad
__classid(TPropiedadPrueba) // Nuestro editor
);

// Si queremos que el editor sirva para todas las propiedades
// del mismo tipo en cualquier componente lo anterior cambiaria:
//RegisterPropertyEditor( __typeinfo(TMiPropiedad),
// 0, "", __classid(TPropiedadPrueba) );
}
}
//---------------------------------------------------------------------------


Si quieres puedes bajarte todo el código del ejemplo para BCB6 con "package" compilado incluido y una pequeña modificación para BCB1

Saludos:
_Leo

Volver arriba
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.