在设计时更改自定义组件中的属性类

时间:2012-05-17 11:58:00

标签: delphi delphi-xe2

我正在编写简单的组件。我想要实现的是我的MethodOptions将根据我选择的方法在Object Inspector中更改。

这样的事情:

From DevExpress cxGrid

到目前为止我编码:

  TmyMethod = (cmFirst, cmSecond);

   TmyMethodOptions = class(TPersistent)    
    published
        property SomethingInBase: boolean;
   end;

   TmyMethodOptionsFirst = class(TmyMethodOptions)
    published
        property SomethingInFirst: boolean;
   end;

   TmyMethodOptionsSecond = class(TmyTMethodOptions)
    published
        property SomethingInSecond: boolean;
   end;

  TmyComponent = class(TComponent)
    private
      fMethod: TmyMethod;
      fMethodOptions: TmyMethodOptions;
      procedure ChangeMethod(const Value: TmyMethod);
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
    published
      property Method: TmyMethod read fMethod write ChangeMethod default cmFirst;
      property MethodOptions: TmyMethodOptions read fMethodOptions 
        write fMethodOptions;  
  end;

implementation

procedure TmyComponent.ChangeMethod(const Value: TmyMethod);
begin
  fMethod := Value;

  fMethodOptions.Free;
  // case...
  if Value = cmFirst then
    fMethodOptions := TmyMethodOptionsFirst.Create
  else
    fMethodOptions := TmyMethodOptionsSecond.Create;

//  fMethodOptions.Update;
end;

constructor TmyComponent.Create(AOwner: TComponent);
begin
  inherited;
  fMethodOptions := TmyMethodOptions.Create;

  fMethod := cmFirst;
end;

destructor TmyComponent.Destroy;
begin
  fMethodOptions.Free;

  inherited;
end;

当然它几乎没什么(除了悬挂的IDE),我没有任何起点可以搜索合适的知识来实现​​这一点。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,我相信这与Developer Express在其Quantum Grid组件中实现的技术相同,用于动态显示网格中各种字段类型的不同属性。这里有机制的解释:Technology of the QuantumGrid