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.