gpt4 book ai didi

delphi - TFrame继承重构

转载 作者:行者123 更新时间:2023-12-03 15:17:39 24 4
gpt4 key购买 nike

我提出的另一个 TFrame IDE 注册组件问题。感谢各位程序员的帮助。 :)

尝试 Darrian 的 TFrame 继承建议 here :

具体:

基本上,我有一个基于 TFrame 的组件,我已将其注册到 IDE,并且它运行得非常好。我现在正在开发一些“姐妹”组件,它们将共享现有组件的大量非可视功能和属性。那么,将大部分内容移至父类/父类(super class)是有意义的,然后新组件和旧组件都可以继承该父类/父类(super class)。

以这种方式“重构”TFrame 继承的最佳方法是什么? (这也可能适用于 TForm 类后代,不确定)。有哪些注意事项和注意事项?

示例:

例如,我尝试创建一个新的 TFrame(其中没有任何内容),然后调用该框架 TMyBaseFrame。然后修改现有组件的类定义(我们称之为 TMyFrameTreeView)以继承该组件而不是 TFrame。

它编译得很好,但是当我尝试将其放到表单上时,我得到“找不到 ClientHeight”(或“找不到 ClientHeight 属性”),并且它不会放在表单上。从相关的 DFM 中删除 ClientHeight 和 ClientWidth 会造成严重破坏,无论如何,它们最终都会在调整大小时被替换。我注意到后代类中的 ExplicitHeight 和 ExplicitWidth,并且认为这与继承值的属性值覆盖有关,但我不确定。通过“新建”->“继承的项目”重新创建一个全新的框架,然后复制所有内容,也没有产生很好的结果。

最终说明

我意识到这可能很快就会变得困惑,因为流式 DFM 文件和多代后代等等......这就是为什么我要求整体“需要注意的事情”概念方面的部分原因,但也还给出了问题的具体现实世界更简单版本(在我看来,应该是可行的)。

我创建了一个小测试包来进行学习尝试,并且正在学习很多东西,但进展缓慢,并且来自德尔福“绝地大师”的任何指导/见解将非常感激。 :)



稍后回答更新:

下面的两个答案都有帮助。同样,创建一个与普通 TFrame 没有任何变化的“基框架类”,然后在添加任何属性、方法等之前继承它,似乎可以极大地稳定继承流。不知道为什么,但到目前为止是这样。

最佳答案

除了更改 TMyFrameTreeView 的基类之外至TMyBaseFrame将 dfm 文件中的第一个单词更改为 TMyFrameTreeView来自objectinherited .

关于delphi - TFrame继承重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/589040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com