Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Set Property mit Subproperty

  Alt 5. Mai 2008, 11:59
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
$2B or not $2B
  Mit Zitat antworten Zitat