我又有一个关于TFrame IDE注册组件的问题。感谢所有程序员的帮助。:)
通过尝试Darrian的TFrame继承建议here,我发现:
具体内容:
基本上,我有一个基于TFrame的组件已经成功地注册到IDE中。现在我正在开发几个“姐妹”组件,它们将共享大量现有组件的非可视功能和属性。因此,将这些功能和属性移动到父类/超类中,并使新旧组件都可以从中继承,这是很有意义的。
如何以最佳方式“重构”TFrame继承呢?(这也可能适用于TForm类的后代,不确定)。有哪些注意事项和需要注意的问题?
例如:
例如,我尝试创建一个新的TFrame,并将其命名为TMyBaseFrame,然后修改现有组件的类定义(我们称其为TMyFrameTreeView),使其继承自TFrame而不是原来的父类。它编译得很好,但当我试图将其拖放到表单上时,会出现“未找到ClientHeight”(或“未找到ClientHeight属性”)的错误,并且无法将其放置在表单上。从相关DFM中删除ClientHeight和ClientWidth会造成严重问题,并且它们最终会在调整大小时被替换。我注意到后代类中存在ExplicitHeight和ExplicitWidth,并认为这与从继承值覆盖属性值有关,但我不确定。通过New->Inherited Items重新创建全新的框架,然后复制所有内容,也没有取得很好的结果。最后说明:
我意识到这可能会很快变得混乱,涉及DFM文件和多个后代代数等等...这也是我要求整体“注意事项”的概念方面的一部分,但也提供了一个具体的现实世界中更简单的问题版本(我认为应该是可行的)。
我创建了一个小测试包以进行学习尝试,学到了很多,但进展缓慢,非常感谢您这些 Delphi "Jedi 大师" 的任何指导/见解。:) 回答稍后更新: 下面的两个答案都很有帮助。此外,创建一个“基本框架类”,它与普通的 TFrame 没有任何更改,然后继承自该类,再添加任何属性、方法等,似乎可以极大地稳定继承流。不确定为什么,但目前为止是这样的。