Type Helpers 只是编译时的糖,它们不会对已经编译的代码产生任何影响,即股票 VCL 与TPageControl
and一起TForm
。那是一个死胡同。
但是,您在这里有一个轻微的误解TPageControl... internally creates... the TTabSheets
。实际上,当您通过TPageControl
自身创建工作表时,例如右键单击它并选择“新标签”,会发生什么。但是,当您从 DFM 文件(或已编译的 EXE 中的 DFM 资源)创建活动表单对象时,它TForm
本身会创建所有组件,包括页面控件及其选项卡。
只需在如何有效地让“ParentFont = False”子控件使用与父控件相同的字体名称?-在为实际选项卡或其他元素选择特定类时,这将向您展示它与所有者的距离TForm
,而不是关于TPageControl
或其他父组件。
所以你可以自由地只追求子类标签表。
- 创建
TMyTabsheet = class(TTabSheet)
组件
- 创建设计时包并将其安装到 IDE 中,该包将向 Delphi 表单编辑器引入新的子类选项卡表
- 在您的表格中放置库存
TPageControl
并以常规方式创建所有需要的标签
- 在 IDE 表单编辑器中右键单击表单可用空间并在菜单中执行“查看为文本 Alt-F12”命令 - 您将看到表单 DFM 文件的文本内容
- 在那些 DFM 来源中找到您的标签表并将它们的股票
TTabSheet
类更改为您的派生子类
- 右键单击文本编辑器并选择“以 Alt-F12 形式查看”命令
- 如果一切都正确,那么 Delphi 现在将使用您的新类工作表重新创建表单。在 Object Inspector 中找到您的新属性并更改它们。
- 现在切换到表单的 .Pas 源并找到这些选项卡表的声明并更改它们的类型。仅当您必须从 Delphi 源访问新属性时才需要这样做。如果不是,您可以将他们的声明保留
TTabSheet
在 pas-file 中,因为您的类是它的直接后代。您可以将这些声明保持原样 - 但随后您必须将RegisterClass(TMyTabSheet);
call 添加到单元底部的非常initialization
部分,因此当表单从 DFM 构建自身时,它将能够通过姓名。如果您要更改声明(至少其中一项),那么您的表单将RegisterClass
在流出 DFM 之前自动调用所有需要的内容。选择您喜欢的任何选项。
- 或者以后,扩展您的设计时包以查找并劫持 IDE 表单编辑器的右键单击菜单,
TPageControl
并在那里添加“新建我的子类选项卡”命令。只是为了避免手动事后 DFM 编辑。如果你经常这样做
这感觉就像当新版本的 Delphi 更新 TPageControl 时我会后悔的事情
在您创建和调整表单并将其保存到 DFM 之后 - 它会根据TForm
保存的 DFM 数据创建所有组件,并且也包括您的选项卡。除非非常不可能的事件 EMBT 会杀死整个 VCL 流(在 1995 年回到 Delphi 1)并从头开始重新设计它(立即杀死与现有 Delphi 源的所有兼容性),否则与指定你的类的前向兼容性应该没有问题在 DFM 中。这只是 VCL 设计的标准方式——从 DFM 获取特定的组件类型。