TFrame继承重构

2024-05-21

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

尝试 Darrian 的 TFrame 继承建议here https://stackoverflow.com/questions/382562/delphi-visual-component-moving-away-from-tframe-base/382607#382607:

规格:

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

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

Example:

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

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

最后说明

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

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



稍后回复更新:

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


除了更改基类之外TMyFrameTreeView to TMyBaseFrame将 dfm 文件中的第一个单词更改为TMyFrameTreeView from object to inherited.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TFrame继承重构 的相关文章

  • 当显示对话框时淡出应用程序的所有其他窗口?

    如何在 Delphi 2009 中调暗 淡出应用程序的所有其他窗口 Form 有一个 AlphaBlend 属性 但它仅控制透明度级别 但如果我们能有这样的东西那就太好了 集中窗口 http www anappaday com downlo
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • Java中对象类的继承

    当我读java书时 我遇到了 每个类都扩展类 Object 但是如果想要 B 类扩展 A 类 但是 B 类现在将具有多重继承 一个来自 Object 类 一个来自 A 类 如何解决冲突 谁能解释一下吗 它是多级继承 而不是多重 class
  • 仅检索子类的属性[重复]

    这个问题在这里已经有答案了 我有一个像这样的课程 class parent public foo class child extends parent public lol public function getFields return
  • 带位图的简单组合框

    如何将位图放入组合框中并将样式设置为简单 例如 Google Chrome 的右侧有星号 Firefox 的右侧有箭头 我尝试了这段代码 procedure TForm2 ComboBox1DrawItem Control TWinCont
  • 继承php中的属性

    我有一个超类 其中包含用于设置它们的属性和方法 class Super private property function construct set this gt property set 然后我有一个需要使用该属性的子类 class
  • Python 类中的继承顺序

    我有课ExampleSim它继承自基类Physics class Physics object arg1 arg1 def physics method print physics method class ExampleSim Physi
  • Objective-C 继承中@synthesize/@property 的使用

    如果您有一个带有实例变量 foo 的类 A 该类具有 property synthesize 指令 并且类 B 继承自类 A 那么它是否还需要 property synthesize foo 我问的原因是因为当我尝试使用 B 类的 foo
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

    我有这样的构造 ifopt FINITEFLOAT ON message FINITEFLOAT option ON else message FINITEFLOAT option OFF endif 在我的源代码中 它不会编译 这一定是一
  • 如何在运行时(Delphi/Windows)程序中添加代码?

    我正在Windows XP Delphi 7上工作 我需要在正在运行的程序中添加一些过程 或函数 并且我不想在完成后再次重新编译它 我只有一个具有 5 个功能的主机应用程序来发送不同类型的警报 但是还有其他新的警报类型 所以我必须执行新的功
  • 在 Delphi 中编程延迟的最佳方法是什么?

    我正在开发的 Delphi 应用程序必须延迟一秒 有时甚至两秒 我想使用最佳实践来对此延迟进行编程 在阅读 stackoverflow 上有关 Delphi Sleep 方法的条目时 我发现了以下两条评论 我遵循这样的格言 如果你觉得需要使
  • Delphi 6 命令行编译:无 DCU

    当对 dpr 文件使用 dcc32 时 它会生成一个 dll 但不会生成 dcu 项目级别 cfg 使用 N 开关设置路径 但指定的目录中没有任何内容 当 E 开关正在工作时 它必须看到 cfg 我尝试在调用 dcc32 之前对 dpr 文
  • 如何将纹理传递给 DirectX 9 像素着色器?

    我有像素着色器 fxc exe tiles fs T ps 3 0 Fotiles fsc Fctiles fsl struct PSInput float4 Pos TEXCOORD0 float3 Normal TEXCOORD1 fl
  • 构造函数和析构函数的继承

    我相信Constructors and Destructors in base class不能被继承derived classes的基类 我的理解是否正确 你的理解是正确的 例如 如果您有 class Base Base int i cla
  • 扩展 Protobuf 消息

    我有许多不同的模式 但是每个模式都包含一组字段 我想知道是否有一种方法可以让不同的模式扩展父模式并继承其字段 例如 这就是我想要的 message Parent required string common1 0 optional stri
  • C# 中隐式/显式转换方法是否继承?

    我不确定我在这里做错了什么 我有一个通用类 它基本上是一个美化的整数 具有一些用于某些字符串格式设置的方法 以及字符串和 int 之间的转换 public class Base protected int m value From int
  • Delphi 将面板流传输至文件

    今天我有一个关于将表单的一部分流式传输到文件的问题 在此示例中 我使用 Tmemo 而不是文件来查看流 这是我的表格 表单右上角的面板有一些控件 如标签 编辑等 使用 保存面板 按钮将面板保存在 TStream 上 这里是代码 proced
  • 查找字符串是否在列表中的最佳方法(没有泛型)

    我想做这样的事情 Result MyString in string1 string2 string3 string4 这不能与字符串一起使用 我不想做这样的事情 Result MyString string1 or MyString st

随机推荐