Moin uwewo,
um die property's des eingebetteten Objectes in deinen TDateItem published zu machen hast du zwei Möglichkeiten:
1. ein Wrapper-Object (TPersistance) schreiben, welches du im create von TDateItem instanziierst und als published-property deklarierst.
2. alle propertys des eingebetteten Objectes als published-propertys von TDateItem deklarieren und Änderungen mit Get und Set direkt an das eingebettete Object weiterreichen. Dann das eingebettete Object aber nicht published deklarieren (mach generell so wenig Sinn).
Den Code für einen Wrapper kennst du ja. Für die 2. Variante sieht das dann so aus:
Delphi-Quellcode:
//******************************************************************************
TControlDateItem = class(TGraphicControl)
private
FBackColor : TColor;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SetBackColor(Value : TColor);
property BackColor : TColor read FBackColor write SetBackColor;
end;
//******************************************************************************
TDateItem = class(TCollectionItem)
private
FControlDateItem : TControlDateItem;
FParent : TDateItems;
function GetBackColor: TColor;
procedure SetBackColor(const Value: TColor);
protected
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
published
property ControlDateItem : TControlDateItem read FControlDateItem write FControlDateItem;
property BackColor : TColor read GetBackColor write SetBackColor;
end;
function TDateItem.GetBackColor: TColor;
begin
IF Assigned(FControlDateItem) then Result := FControlDateItem.BackColor;
end;
procedure TDateItem.SetBackColor(const Value: TColor);
begin
IF Assigned(FControlDateItem) then FControlDateItem.BackColor := Value;
end;
Da ich denke, dass es nie ein DateItem ohne Instanz eines ControlDateItem gibt hab ich mir das Merken der Eigenschaft in TDateItem gespaart. Wenn man es ganz sicher haben will legt man auch in TDateItem einen privaten Member TBackColor an und speichert dann dort zwischen. Das hat den Vorteil, dass auch wenn noch kein FControlDateItem existiert die eigenschaft zuweisen kann und bei einem späteren Create dies dann für FControlDateItem nach holt.
Bis die Tage
Gruß oki