TCollection para armazenar colunas

Delphi

Component Object Model

11/05/2021

Boa tarde,


Gostaria de um encaminhamento para construção de componente, esse componente vai ter uma porperty chamada Columns, e essas columns pensei em definir com o tipo TCollection, porem gostaria de criar itens de 3 classes diferentes dentro dessa TCollection, que seriam itens TGridColumnEdit, TGridColumnCombo, e TGridColumnButton, pensei em declarar todos como TCollectionItem, porem não deu certo, pois quando do um create no FColumns tenho que passar um tipo, será que alguém poderia me dar um luz?


Classe que armazena itens:
TDPDBGridColumns = class(TCollection)
    FDPDBGrid : TDPDBGrid;
    function GetItem(Index: Integer): TCollectionItem;
    procedure SetItem(Index: Integer; Value: TCollectionItem);
  protected
    function GetOwner: TPersistent; override;
    procedure Update(Item: TCollectionItem); override;
  public
    constructor Create(DPDBGrid: TDPDBGrid);
    function Add: TCollectionItemClass;
    property Items[Index: Integer]: TCollectionItem read GetItem write SetItem; default;
  end;


Classe genérica para o item:
TDPDBGridColumn = class(TCollectionItem)
  private
    FButtonPropertys  : TGage;
    FCaption          : TCaption;
    FColor            : TColor;
    FMargins          : TMargins;
    FTipoComponente   : TTipoComponente;
    FWidth            : Integer;
    procedure SetCaption(const Value: TCaption);
    procedure SetColor(const Value: TColor);
    procedure SetGage(Value: TGage);
    procedure SetMargins(const Value: TMargins);
  public
    constructor Create(AOwner: TCollection);
  published
    Property ButtonPropertys : TGage read FButtonPropertys write SetGage;
    property Color : TColor read FColor write SetColor;
    property Caption : TCaption read FCaption write SetCaption;
    property TipoComponente : TTipoComponente read FTipoComponente write FTipoComponente;
    property Width : Integer read FWidth write FWidth;
    property Margins: TMargins read FMargins write SetMargins;
  end;


Classe secundaria para quando for do tipo button
TDPDBGridColumnButton = class(TDPDBGridColumn)
  private
    FButtonCaption    : TCaption;
  published
    property Caption : TCaption read FButtonCaption write FButtonCaption;
  end;


Classe secundaria para quando for do tipo Edit
TDPDBGridColumnEdit = class(TDPDBGridColumn)
  private
    FDataSet    : String;
  published
    property Dataset : String read FDataSet write FDataSet;
  end;
Edemar Polli

Edemar Polli

Curtidas 0
POSTAR