如何将两个现有组件合并在一起?

时间:2012-05-20 12:43:45

标签: delphi delphi-2010

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

例如,我想将TImageTPanel合并为一个,我要求TPanel是基本组件,因此TImage将是子级到TPanel

是否可以这样做?

我一直试图通过Component>在Delphi 2010中做到这一点。新的VCL组件,但当我需要可视组件时,它会创建非可视组件。

我该怎么做才能改变这个?

3 个答案:

答案 0 :(得分:5)

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

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

Component Creation - Joining Components Together?

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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