Ya lo tengo!
El resultado es el siguiente, y a ver si así lo dejo claro
![Wink](http://www.clubdelphi.com/foros/images/smilies/wink.gif)
(ya que sé que resultaba lioso).
Tengo un formulario. Dentro de este un DBGrid para mostrar los resultados.
La idea era crear un componente que mostrase ese formulario. Y para que el componente fuese muy útil se me ocurrió tener una propiedad de tipo TDBGridColumns.
Hice muchas pruebas y cuando estaba apunto de crear nuevas clases heredadas de TCollection y TCollectionItem me di cuenta de mi error. En el OnDestroy del componente estaba liberando antes el formulario (que contiene el DBGrid) y después las columns!! He ahí mi error.
Y ahora algo de código por si sirve a alguien:
Código Delphi
[-]TFormSeleccion = class(TComponent)
private
FForm: TfrmSeleccion;
FColumns: TDBGridColumns;
procedure SetColumns(const Value: TDBGridColumns);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Columns: TDBGridColumns read FColumns write SetColumns;
end;
constructor TFormSeleccion.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FForm := TfrmSeleccion.Create(nil);
FColumns := TDBGridColumns.Create(FForm.dbgSeleccion, TColumn);
end;
destructor TFormSeleccion.Destroy;
begin
FColumns.Free;
FForm.Close;
FForm.Free;
inherited;
end;
procedure TFormSeleccion.SetColumns(const Value: TDBGridColumns);
begin
FColumns.Assign(Value);
end;
NOTA: No pongo todo el código para no liar más la cosa, jeje.