Ya lo tengo!
El resultado es el siguiente, y a ver si así lo dejo claro
(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.