Ver Mensaje Individual
  #1  
Antiguo 29-10-2007
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Reputación: 18
jorllazo Va por buen camino
No se muesta la coleccion en el editor de propiedades

Hola Amigos.
Estoy creando un componente, el cual tiene una propiedad que es TablaMaestra que es del tipo TCollectionItem. A su vez esta TablaMaestra tiene una propiedad "Campos" la cual es uan coleccion de objetos TCampoMaestro que deriva tambien de TCollectionItem, el caso es que cuando estoy viendo las propiedades del componente, e intento acceder a la lista de campos (pulsando en el botoncito de los puntos) este hace caso omiso y no muestra ningun cuadro para añadir los "CampoMaestro" a la coleccion de campos.

Sin eembargo cuando esta Coleccion de "Campos" se la añado al componente directamente que dervia de TComponent el resultado es normal y al pulsar en el botoncilo me muestra el editor correspondiente desde el cual puedo añadir campos a la coleccion.

Código Delphi [-]
 
TCampoMaestro = class (TCollectionItem)
    private
      m_Nombre: string;
      m_Requerido : Boolean;
  
    published

      property Nombre : string
        read m_Nombre
        write m_Nombre;
      property Requerido : Boolean
        read m_Requerido
        write m_Requerido;
 
 end;

 
 TColCamposMaestro = class (TCollection)
  public
    function getItem(index : integer) : TCampoMaestro;
  end;
 
 TTablaMaestra = class (TCollectionItem)
    private
      m_Nombre: string;
     //**************************************
     //En este caso es el que no funciona.
      m_CamposMaestros : TColCamposMaestro;
      procedure SetCamposMaestro(camposMaestro: TColCamposMaestro);
    //***************************************
    published
      property Nombre: string
        read m_Nombre
        write m_Nombre;
      property Campos: TColCamposMaestro
        read m_CamposMaestros
        write SetCamposMaestro;
     public
         constructor Create(Collection: TCollectionItem); override;
  end;
 
 TComponente = class(TComponent)
  private
    m_NombreFormulario : string;
    m_TablaMaestra: TTablaMaestra;
 
    //********************************************
    //Campos de la tabla Maestra En este caso si que funciona
    m_CamposMaestro : TColCamposMaestro;
   //*********************************************
    procedure SetCamposMaestro(camposMaestro: TColCamposMaestro);

 public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;
 
published
  
   property NombreFormulario: string
    read  m_NombreFormulario
    write m_NombreFormulario;
   
   property TablaMaestra : TTablaMaestra
    read m_TablaMaestra
    write m_TablaMaestra;
 
  property CamposMaestro : TColCamposMaestro
    read m_CamposMaestro
    write SetCamposMaestro;

  end;
 
  procedure Register;

 implementation
 uses Math, SysUtils, StrUtils;
 
procedure Register;
 begin
  RegisterComponents('Componentes', [TComponente]);
 end;
{TTablaMaestra}
constructor TTablaMaestra.Create(Collection: TCollection);
begin
  inherited Create(Collection);
  m_CamposMaestros := TColCamposMaestro.Create(TCollectionItem);
  m_Nombre := '';
end;
procedure TTablaMaestra.SetCamposMaestro(camposMaestro: TColCamposMaestro);
begin
    m_CamposMaestros.Assign(camposMaestro);
end;

{TColCampoMaestro}
function TColCamposMaestro.getItem(Index : integer ) : TCampoMaestro ;
var
  elemento : TCampoMaestro;
begin
    elemento := nil;
    if Items[Index] <> nil Then
      elemento := Items[Index] as TCampoMaestro;
    Result := elemento;
end;
{TComponenteNT}
constructor TComponente.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  m_CamposMaestro := TColCamposMaestro.Create(TCampoMaestro);
  m_TablasDetalle := TColTablasDetalle.Create(TTablaDetalle);
  m_TablaMaestra := TTablaMaestra.Create(nil);
  //Abrir las tablas necesarias.
end;
destructor TComponente.Destroy();
begin
 
  m_CamposMaestro.Free();
  inherited Destroy();

end;
procedure TComponentePlantillaNT.SetCamposMaestro(camposMaestro: TColCamposMaestro);
begin
    m_CamposMaestro.Assign(camposMaestro);
end;

end.

Entonces sucede que cuando intento implemetar la coleccion dentro del Objeto derivado de TCollectionItem, este no funciona pero si la creo dentro de en el Objeto derivado de TComponent si que funciona bien. Es que no se puede incluir una coleccion dentro de un item parte de otra ? Que me falta? QUe hago mal?

Gracias
__________________
Gracias de Antemano

Última edición por jorllazo fecha: 31-10-2007 a las 16:51:58.
Responder Con Cita