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;
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;
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;
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;
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;
constructor TComponente.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
m_CamposMaestro := TColCamposMaestro.Create(TCampoMaestro);
m_TablasDetalle := TColTablasDetalle.Create(TTablaDetalle);
m_TablaMaestra := TTablaMaestra.Create(nil);
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