statt 'ner CallBack-Funktion zum übergeordnetem Objekt, könnte man auch eine referenz auf dieses Objekt im SubObjekt hinterlassen und hatt dann ebenfalls Zugriff und kann somit über änderungen informieren.
z.B.:
> Parent/AOwner bei Create übergeben
Delphi-Quellcode:
Type
TMyComp = class; // forward
TSub = class(TPersistent)
private
FParent: TMyComp;
FText: String;
procedure SetText(const Value: String);
published
constructor Create(AOwner : TMyComp); override;
property Text : String read FText write SetText;
end;
TMyComp = class(TComponent)
private
FSub : TSub;
procedure SubChange(Sender : TSub);
published
constructor Create(AOwner : TComponent); override;
property Sub : TSub read FSub;
end;
implementation
{ TSub }
constructor TMyComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FParent := AOwner;
end;
procedure TSub.SetText(const Value: String);
begin
FText := Value;
FParent.SubChange(Self);
end;
{ TMyComp }
constructor TMyComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSub := TSub.Create(Self);
end;
procedure TMyComp.SubChange(Sender: TSub);
begin
// Hier kann auf die Änderung der "Subproperty"
// reagiert werden
end;
> Parent/AOwner von diesem übergeben (nach dem Erstellen)
Delphi-Quellcode:
Type
TMyComp = class; // forward
TSub = class(TPersistent)
private
FParent: TMyComp;
FText: String;
procedure SetText(const Value: String);
published
property Text : String read FText write SetText;
end;
TMyComp = class(TComponent)
private
FSub : TSub;
procedure SubChange(Sender : TSub);
published
constructor Create(AOwner : TComponent); override;
property Sub : TSub read FSub;
end;
implementation
{ TSub }
procedure TSub.SetText(const Value: String);
begin
FText := Value;
FParent.SubChange(Self);
end;
{ TMyComp }
constructor TMyComp.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSub := TSub.Create;
FSub.FParent := Self;
end;
procedure TMyComp.SubChange(Sender: TSub);
begin
// Hier kann auf die Änderung der "Subproperty"
// reagiert werden
end;
!! nur so dahingeschieben = ungetestet