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;