Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2007
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 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
  #2  
Antiguo 23-02-2007
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Mi gozo en un pozo (expresión utilizada después de una alegría, llega una decepción)

Todo el código anterior sigue fallando. Cuando se elimina una Column del Collection salta error de memoria.

Investigando más a fondo la VCL parece ser que TDBGridColumns tiene como Owner al DBGrid (como debe de ser). Y buscando en la unit Classes he encontrado la solución ¡TOwnedCollection!. Que es un descendiente de TCollection pero con Owner explícito en el Create.


Manos a la obra y funcionando (por ahora jeje)
Código Delphi [-]
  TOwnedDBGridColumns = class(TDBGridColumns)
  private
    FOwner: TPersistent;
  protected
    function GetOwner: TPersistent; override;
  public
    constructor Create(AOwner: TPersistent; Grid: TCustomDBGrid;
      ColumnClass: TColumnClass);
  end;

constructor TOwnedDBGridColumns.Create(AOwner: TPersistent;
  Grid: TCustomDBGrid; ColumnClass: TColumnClass);
begin
  inherited Create(Grid, ColumnClass);
  FOwner := AOwner;
end;

function TOwnedDBGridColumns.GetOwner: TPersistent;
begin
  Result := FOwner;
end;
Responder Con Cita
  #3  
Antiguo 23-02-2007
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
Código muy avanzado...

En realidad pensé que lo que necesitabas era armar las columnas en un DBGrid en forma dinámica (campos, titulos, etc.), eso está en el ej. que publiqué. El resto entiendo poco y nada, estoy muy verde en Delphi.

Después presto más atención a tu código, pero no entiendo bien para que creas vos una colección TColumn ???

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como publicar mi sitio WEB? (IIS??) JuanErasmo .NET 4 23-11-2011 17:56:23
Publicar web con protocolo frontpage desde delphi jam Internet 0 23-11-2006 21:40:34
Publicar aplicacion .aspx JuanErasmo .NET 2 03-11-2006 14:23:04
Como publicar una web desarrollada en Delphi utilizando Intraweb e Interbase? JoelCarlos Internet 0 19-11-2004 22:07:35
Como publicar una propuedad TClass miriarteen OOP 2 02-08-2003 12:41:05


La franja horaria es GMT +2. Ahora son las 13:04:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi