Einzelnen Beitrag anzeigen

uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#1

Propertys von Objekten in TCollectionItem ansprechen

  Alt 8. Nov 2006, 07:46
Hallo DP'ler,

habe Dank oki es endlich geschafft, beim programmieren meiner ersten Komponente etwas weiter zu kommen.
Jetzt stehe ich aber vor dem nächsten Problem und hoffe das mir jemand einen Tipp geben kann.

Hier eine kurze Übersicht über die Komponente habe zur besseren Übersicht ca. 1300 Zeilen gelöscht.

Delphi-Quellcode:
Type
  // Forward
  TDateLine = class;
  TDateItems = class;

//******************************************************************************

  TControlDateItem = class(TGraphicControl)
  private
   FBackColor : TColor;
  protected
    procedure Paint; override;
  public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure SetBackColor(Value : TColor);
  published
   property BackColor : TColor read FBackColor write SetBackColor;
 end;

 //******************************************************************************

  TDateItem = class(TCollectionItem)
  private
    FControlDateItem : TControlDateItem;
    FParent : TDateItems;
  protected
  public
    constructor Create(Collection: TCollection); override;
    destructor Destroy; override;
  published
    property ControlDateItem : TControlDateItem read FControlDateItem write FControlDateItem;
  end;

//******************************************************************************

TDateItems = class(TCollection)
  private
    FDateLine: TDateLine;
    function GetItem(Index: Integer): TDateItem;
    procedure SetItem(Index: Integer; Value: TDateItem);
  protected
    function GetOwner: TPersistent; override;
    procedure Update(Item: TDateItem); reintroduce;
  public
    constructor Create(DateLine: TDateLine);
    function Add : TDateItem;
    property Items[Index: Integer]: TDateItem read GetItem write SetItem; default;
  end;

//******************************************************************************

TDateLine = class(TCustomGrid)
  private
    FDateItems : TDateItems;
    FItem : TDateItem;
    procedure SetDateItems(const Value: TDateItems);
  protected
    procedure Paint; override;//04.11.06 Oki hatte recht :-)
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SetItem(const Value: TDateItem);
  published
    property Items: TDateItems read FDateItems write SetDateItems;
end;

implementation


//******************************************************************************
//***** ControlDateItem ********************************************************
//******************************************************************************

constructor TControlDateItem.Create(AOwner: TComponent);
begin
    inherited Create(AOwner); { immer den geerbten Konstruktor aufrufen }
    FBackColor := clWhite;
end;

//------------------------------------------------------------------------------

procedure TControlDateItem.SetBackColor(Value : TColor);
begin
    if Value <> FBackColor then
     begin
       FBackColor := Value;
       Invalidate;
     end;
end;

//------------------------------------------------------------------------------

destructor TControlDateItem.Destroy;
begin
    inherited Destroy;
end;

//******************************************************************************
//****** DateLine **************************************************************
//******************************************************************************

constructor TDateLine.Create(AOwner: TComponent);
begin
    inherited Create(AOwner); { geerbten Konstruktor aufrufen  }
    FDateItems := TDateItems.Create(self);
end;


//------------------------------------------------------------------------------

destructor TDateLine.Destroy;
begin
  FItem.Free;
  inherited;
end;

//******************************************************************************
//***** DateItems **************************************************************
//******************************************************************************

constructor TDateItems.Create(DateLine: TDateLine);
begin
  inherited Create(TDateItem);
  FDateLine := DateLine;
end;

//------------------------------------------------------------------------------

//******************************************************************************
//***** DateItem ***************************************************************
//******************************************************************************

constructor TDateItem.Create(Collection: TCollection);
begin
  inherited Create(Collection);
  FParent := TDateItems(Collection);
  FControlDateItem := TControlDateItem.Create((Collection as TDateItems).FDateLine);
  // ohne Parent keine anzeige (Owner in create alleine reicht nicht)
  FControlDateItem.Parent := (Collection as TDateItems).FDateLine;

end;
//------------------------------------------------------------------------------

destructor TDateItem.Destroy; //05.11.06
begin
  FControlDateItem.Free;
  inherited Destroy;
end;

end.
Leider werden die propertys von TControlDateItem nicht im OI angezeigt, bzw. zur Entwurfszeit nicht im Formular mit abgespeichert. Deshalb wollte ich jetz die Propertys von TControlDateItem nach TDateItem verschieben. Allerdings weiß ich nicht, wie ich dann auf die Propertys von TDateItem in TControlDateItem zugreifen kann bzw. auf die Propertys von TDateLine.

Hoffe es gibt jemanden der mir bei diesem Problem weiterhelfen kann.
Genial wäre es natürlich, wenn es einen Weg geben würde, TControlDateItem so beizubehalten das man gegebenenfalls TControlDateItem durch ein anderes Objekt austauschen könnte. Ist allerdings nur so eine Idee.

Hier noch ein ScreenShot damit Ihr wisst um was es geht.
Miniaturansicht angehängter Grafiken
screenshot_608.jpg  
Uwe
  Mit Zitat antworten Zitat