首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将属性添加到TTabSheet,以便在设计时使用TPageControl

如何将属性添加到TTabSheet,以便在设计时使用TPageControl
EN

Stack Overflow用户
提问于 2016-04-20 14:30:24
回答 1查看 1.3K关注 0票数 1

我想将"MyProperty“添加到TTabSheet中,并在设计时使用它。但是,如果我子类它,我担心我也需要子类TPageControl,因为它在内部创建/管理TTabSheets。

我认为这需要复制TTabSheet管理代码来引用TMyTabSheet而不是TTabSheet,因为它需要调用TMyTabSheet.create。当一个新版本的Delphi更新了TPageControl,而我忘了更新TMyPageControl时,我会后悔的。

我也在研究“班级帮手”作为另一种选择。

有人对如何最好地完成这一任务有建议吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 14:52:16

类型帮助仅仅是编译时的糖,它们不会对已经编译过的代码产生任何影响,即库存VCL与TPageControlTForm一起使用。那是死胡同。

然而,您在这里有一个轻微的误解,即TPageControl... internally creates... the TTabSheets。实际上,当您通过TPageControl本身创建工作表时,比如右击它并选择"New“,就说明了会发生什么。但是,当您在DFM文件(或已编译的EXE中的DFM资源)之外创建活动表单对象时,即TForm本身,它创建了所有组件,包括页面控件及其制表表。

请看我在 child control to use same font name as parent?上的回答--这将向您展示关于所有者-- TForm,而不是TPageControl或其他父组件--在为实际选项卡或其他元素选择特定类时所做的努力。

因此,您可以自由地追求子类表只。

  • 创建TMyTabsheet = class(TTabSheet)组件
  • 在IDE中创建并安装设计时包,该包将向Delphi表单编辑器引入新的子类选项卡
  • 在您的表单中,放入股票TPageControl并以常规方式创建所有所需的选项卡
  • 在IDE窗体编辑器中,右键单击窗体空闲空间,并在菜单中执行"View Alt-F12“命令--您将看到窗体的DFM文件的文本内容。
  • 在那些DFM源中,查找选项卡页,并将其股票TTabSheet类更改为派生子类。
  • 右键单击文本编辑器并选择“查看为形式的Alt-F12”命令。
  • 如果一切都做对了,那么Delphi现在将用新的类表重新创建表单。在对象检查器中找到您的新属性并更改它们。
  • 现在切换到表单的.Pas源代码,并找到这些选项卡表的声明,并更改它们的类型。只有当您必须从Delphi源访问您的新属性时,才需要这样做。如果不是,您可以在pas-文件中将它们声明为TTabSheet,因为您的类是它的直接后代。您可以保留这些声明,但随后必须将RegisterClass(TMyTabSheet);调用添加到单元底部的initialization部分中,这样,当表单在DFM之外构造自己时,它将能够通过名称找到类实现。如果要更改声明(至少其中一个),则表单将自动调用所有需要的RegisterClass,然后再从DFM中流出。选择你喜欢的任何选项。
  • 可以选择扩展设计时包以查找和劫持IDE表单编辑器的TPageControl右键菜单,并在那里添加"New“命令。只是为了避免手工后的DFM编辑。如果你经常这么做

当德尔福的新版本更新TPageControl时,我会后悔的。

在您创建并调优表单并将其保存到DFM之后-- TForm将从保存的DFM数据中创建所有组件,并且还包括您的选项卡。除非非常不可能的事件EMBT会杀死整个VCL流(1995年在Delphi 1中制作)并从头开始重新设计它(同时扼杀与现有Delphi源的所有兼容性),否则在DFM中指定类的前向兼容性应该没有问题。这只是VCL设计的标准方式--从DFM获取特定的组件类型。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36747029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档