Also wenn ich mir deine Komponente so ansehe, dann würde ich die mal wie folgt beschreiben
Delphi-Quellcode:
unit MyControl;
TMyControlItem =
class( ... )
property Caption :
string;
property Color : TColor;
end;
TMyControl =
class( ... )
published
property BorderColor : TColor;
property BorderWidth : Integer;
property ItemCount : Integer;
property Items[
Index : Integer] : TMyControlItem;
end;
Dein DatenObjekt sieht nun wohl irgendwie so aus:
Delphi-Quellcode:
unit Data;
TDataChild =
class
property On : Boolean;
end;
TData =
class
// Sigalisierung bei Änderungen über einen Event
property OnChange : TNotifyEvent;
// oder eine Event-Liste ;)
procedure AddOnChange( ANotify : TNotifyEvent );
procedure RemOnChange( ANotify : TNotifyEvent );
property On : Boolean;
property ChildCount : Integer;
property Childs[
Index : Integer] : TDataChild;
end;
Für die Visualisierung baust du dir jetzt einfach einen
abstrakten Presenter zwischen dem Objekt und irgendeinem Control
Delphi-Quellcode:
unit DataPresenter;
uses
Data;
TDataPresenter =
class abstract
// Diese Methode soll aufgerufen werden, wenn Data sich ändert
procedure DataChange( Sender : TObject );
virtual;
abstract;
property Data : TData;
end;
und konkret
Delphi-Quellcode:
unit MyControlDataPresenter;
uses
DataPresenter,
MyControl;
TMyControlDataPresenter =
class( TDataPresenter )
constructor Create( AControl : TMyControl );
procedure DataChange( Sender : TObject );
override;
property OnColor : TColor;
property OffColor : TColor;
property NilColor : TColor;
end;
P.S. Wenn du Spring4D im Einsatz hast, da gibt es
Event<T>
der einem einen MultiCast-Event auf die Schnelle hinzaubert
P.S.S. Im Anhang mal eine kleine Demo nach diesem Muster und der Präsentation in einem StringGrid
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)