Ver Mensaje Individual
  #8  
Antiguo 23-02-2007
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Reputación: 21
DarKraZY Va por buen camino
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);

  { Creación del formulario de búsqueda }
  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.
Responder Con Cita