Wenn Rückfragen kommen, die scheinbar nichts mit der eigenen Fragestellung zu tun haben, sollte man erst einmal überprüfen, ob das Thema wirklich verständlich genug dargestellt wurde. Ich bin aus der urspünglichen Fragestellung auch nicht schlau geworden.
Gewünscht wird scheinbar eine eigene Grafikklasse, die mehrere Layer unterstützt und für jeden Layer (neben der durch den Layer darzustellenden Grafik) weitere Eigenschaften speichert, die bei der Darstellung zu berücksichtigen sind. Diese Grundgerüst kann eventuell noch mit einer Ableitung von TImage und TPicture überbaut werden, die genau diese Grafikklasse published als Property bereitstellt und so die direkte Bearbeitung im Objektinspektor erlaubt.
Das Grundgerüst für die Grafikklasse könnte dann in etwa so ausschaun:
Delphi-Quellcode:
uses
Graphics;
type
TGraphicLayerList = class(TCollection)
end;
TLayerGraphic = class(TGraphic)
constructor Create(AOwner: TComponent); override;
private
FLayer: TGraphicLayerList;
protected
procedure Draw(ACanvas: TCanvas; const Rect: TRect); override;
{...zumindest alle abstrakten Methoden überschreiben...}
procedure SetLayer(AValue: TGraphicLayerList);
published
property Layer: TGraphicLayerList read FLayer write SetLayer;
end;
TGraphicLayer = class(TCollectionItem)
constructor Create(Collection: TCollection); override;
private
FRect: TRect;
FVisible: Boolean;
FPicture: TPicture;
procedure SetRect(AValue: TRect);
procedure SetVisible(AValue: Boolean);
procedure SetPicture(AValue: TPicture);
published
property Rect: TRect read FRect write SetRect;
property Visible: Boolean read FVisible write SetVisible;
property Picture: TPicture read FPicture write SetPicture;
end;
implementation
constructor TLayerGraphic.Create(AOwner: TComponent);
begin
inherited;
FLayer := TGraphicLayerList.Create(TGraphicLayer);
{...}
end;
procedure TLayerGraphic.SetLayer(AValue: TGraphicLayerList);
begin
FLayer.Assign(AValue);
end;