假设我现在写了一个组件类TCom,属性对象中包含子类TPer,请问怎样在改变TPer中的属性值时,同时变更TCom中的某个属性值(也就是改变起父类的属性值)?现将组件简化如下:TPer = class(TPersistent)
private
  FTop: Integer;
  procedure SetTop(Value: Integer);
published
  property Top: Integer read FTop write FTop;
end;TCom = class(TComponent)
private
  FTop: Integer;
  FPer: TPer;
public
  constructor Create(AOwner: TComponent);override;
published
  property Persistent read FPer write FPer;
end;{TPer}procedure TPer.SetTop(Value);
begin
  FTop:= Value;
                                //我就是想在这里添加对TCom.FTop属性的赋值,但是TPer没有拥有者属性,无法定位到TCom上,而且设计阶段也没有TCom的实例,请问我该怎么写?end;

解决方案 »

  1.   

    tper加一个属性代表拥有它的Tcom
      

  2.   

    是不是把TPer的构造函数重写一下?
    constructor Create(AOwner: TComponent);virtual;
    然后加一个FOwner的私有属性?我看TComponent类就是这样挂上拥有类的。
      

  3.   

    TPer = class(TPersistent)
    private
      FTop: Integer;
      procedure SetTop(Value: Integer);
    public  //改这里就可以访问了
      property Top: Integer read FTop write FTop;
    end;TCom = class(TComponent)
    private
      FTop: Integer;
      FPer: TPer;
    public
      constructor Create(AOwner: TComponent);override;
    published
      property Persistent read FPer write FPer;
    end;
      

  4.   

    在父类写个public类的过程,这个过程可以修改top的值,这样就可以了。
      

  5.   

    但是它的子类怎么调用父类的这个public过程呢?因为直接从TPersistent类派生没有拥有者这个属性,而且设计阶段父类没有实例的呀,所以调用的代码不好写。