4

我正在编写简单的组件。我想要实现的是我的 MethodOptions 将根据我选择的 Method 在 Object Inspector 中发生变化。

像这样的东西:

来自 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),而且我没有任何起点可以搜索合适的知识来实现​​这一点。

4

1 回答 1

1

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

于 2012-05-21T21:12:14.253 回答