Delphi 如何子类化TcxGridDBTableView并使用它,而不会丢失GUI设置并将其作为组件安装?

Delphi 如何子类化TcxGridDBTableView并使用它,而不会丢失GUI设置并将其作为组件安装?,delphi,view,devexpress,subclass,delphi-xe,Delphi,View,Devexpress,Subclass,Delphi Xe,使用dev express可以很容易地扩展Quantum网格视图,如中所述 您只需声明并覆盖所需的方法: TMyGridDBTableView = class(TcxGridDBTableView) protected function GetViewInfoClass: TcxCustomGridViewInfoClass; override; end; 但是为了消费TMyGridBTableView,您也可以 必须使用RegisterComponent()将其作为组件包安装 或者从这

使用dev express可以很容易地扩展Quantum网格视图,如中所述

您只需声明并覆盖所需的方法:

TMyGridDBTableView = class(TcxGridDBTableView)
protected
  function GetViewInfoClass: TcxCustomGridViewInfoClass; override;
end;
但是为了消费TMyGridBTableView,您也可以

  • 必须使用RegisterComponent()将其作为组件包安装
  • 或者从这样的代码构建整个UI

    视图:=Grid.CreateView(tmygridbtableview)作为tmygridbtableview; View.options View.ColumnAutoWidth:=True; View.Options View.NewItemRow:=真; View.DataController.DataSource:=DataSource1; View.DataController.CreateAllItems

  • 这两种方法对我都不好,因为:

  • 几年前,我放弃了在IDE中安装组件,因为我不愿意在每次小改动后重新安装组件,即使我写了很多组件,我还是用代码初始化它们
  • 尽管如此,我仍然安装了devexpress组件,并通过UI操作它们。必须切换到所有视图的纯源代码实例化将导致数千行代码

  • 是否有一种方法可以保留我已经设计好的表单tmygridbtableview,但在运行时使用tmygridbtableview重载方法对其进行增强?

    在IDE中安装自己的组件是经过尝试和测试的。全球有成千上万的开发人员这样做。我也这么做。它很好用。事实上,您自己也知道这一点,因为您使用devexpress组件就可以做到这一点

    但是,如果您坚决反对在IDE中注册自己的组件,则可以按照Sertac的建议使用。只要您不需要发布任何新属性,这种方法就可以工作,我相信在您描述的情况下就是这样


    在IDE中注册组件的问题可能实际上是代码中的错误。这并不意味着批评,为设计时行为编码是相当具有挑战性的。由于您不需要发布新属性,而且所讨论的组件是第三方组件,因此插入器或类似的方法似乎是相当合理的。

    可能是@sertac modestry的副本。如果您的所有表单都有一个公共基类,那么在我看来,reader组件类方法无疑更好。如果您使用TForm作为定位点,则imterposer可能会更容易。使用TForm作为定位点,则imterposer可能会更容易。感谢您回答我的问题“为什么您排除了对上述问题的回答”。)在我的例子中,Interposer更合适,因为我必须拦截至少4个conrequisive调用的类。我也尝试过TVirtualMethodInterceptor,但它似乎只对TComponent实例有效,而不是任何类。