0

如何将两个 VCL 组件合并在一起,以便我可以访问它们的两个属性?

例如,我想将 aTImage和 a合并TPanel为一个,我要求 theTPanel是基本组件,因此TImage将是TPanel.

是否有可能做到这一点?

我一直在尝试通过 Component > New VCL Component 在 Delphi 2010 中执行此操作,但是当我需要可视组件时它会创建非可视组件。

我能做些什么来改变这一点?

4

3 回答 3

5

如果我理解正确,我认为您想将两个组件合并在一起并公开两者的属性?

如果这是您正在寻找的,我问了一个类似的问题,将 TImage 和 TScrollBox 连接在一起,可以在这里找到:

组件创建 - 将组件连接在一起?

SetSubComponent 是实现这一目标的关键,可能值得阅读上面链接中的评论和答案以了解更多信息。

于 2012-05-20T13:24:57.063 回答
3

Delphi语言不支持实现的多重继承,只支持接口的多重继承。因此,您不能以您希望的方式简单地将两个类合并在一起。

无论如何,您提出的建议听起来有点奇怪。两者TPanel都有TImage自己的视觉表面。我能想象的唯一合理的事情是你可以TImageTPanel. 从 派生一个新组件TPanel。该组件将创建并拥有一个TImage. 使TImage子控件的父级成为面板。TImage您想要在控件中显示的控件的任何属性和事件都必须手动完成。这是组合而不是继承。

于 2012-05-20T12:54:22.433 回答
1

您可以使用 aTFrame创建一个在设计时存在于其他可视组件中的组件,例如TPanel带有 a 的 a TImage。这可能不是您想要的:属性没有“合并”在一起,您必须设计自己的属性和方法,以使这个新创建的组件按您希望的方式运行。您想要的功能(根据鼠标的位置改变视觉特征)只需在框架中构建一次。

于 2012-05-21T05:49:14.863 回答