Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Propertys von Objekten in TCollectionItem ansprechen

  Alt 8. Nov 2006, 08:22
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
  Mit Zitat antworten Zitat