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

Delphi 如何将两个现有组件合并在一起?,delphi,delphi-2010,Delphi,Delphi 2010,如何将两个VCL组件合并在一起,以便访问它们的两个属性 例如,我想将TImage和TPanel合并为一个,我要求TPanel是基本组件,因此TImage将是TPanel的子组件 有可能这样做吗 我一直试图在Delphi2010中通过Component>New VCL Component实现这一点,但当我需要一个可视组件时,它会创建非可视组件 我能做些什么来改变这一点?Delphi语言不支持实现的多重继承,只支持接口的多重继承。因此,您不能简单地以您希望的方式将两个类合并在一起 不管怎样,你的提议

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

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

有可能这样做吗

我一直试图在Delphi2010中通过Component>New VCL Component实现这一点,但当我需要一个可视组件时,它会创建非可视组件


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

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


不管怎样,你的提议听起来有点奇怪。TPanel和TImage都有自己的视觉表面。我能想象的唯一可信的事情是,你可以让蒂玛吉成为一个孩子。从TPanel派生一个新组件。该组件将创建并拥有一个TImage。将TImage子控件的父控件设置为面板。要在控件中显示TImage控件的任何属性和事件都必须手动完成。这是组合而不是继承。

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

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


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

您可以使用TFrame创建在设计时存在其他视觉组件的组件,例如带有时间限制的TPanel。这可能并不完全是您想要的:属性没有“合并”在一起,您必须设计自己的属性和方法,以使新创建的组件按您希望的方式运行。您希望根据鼠标点更改视觉特性的功能只需在框架中构建一次。

这是因为您需要先编写代码,如果一切正常,则需要在IDE中注册组件。为了访问这两个属性,您需要为这两个组件(即setter和getter)定义代理属性。您是否尝试使用从TComponent派生的类来执行此操作?因为这就是为什么它是非视觉的。TComponent是非可视组件的基类。换句话说,您可以从TPanel继承,TPanel可以包含一个TImage。但这不是合并,而是合并。复合控件不是很难。一旦包含TImage的TPanel作为designtime软件包安装,它就可以作为单个项目放到表单中。但这有多有用呢?不太好。我能理解你为什么说它不是很有用,但我想做的是减少编码。我正在添加依赖OnMouseCenter的视觉功能。如果用户将鼠标悬停在TPanel上,其斜面将发生变化,但如果鼠标光标移动到TPanel的子页面,则斜面将被删除。这意味着我必须为TPanel和TImage添加代码,以使视觉功能正常工作。@petersmileyface:这意味着您只需要一个特定的TImage后代,它不会因为不负责鼠标而弄乱面板的边框。在某种程度上,使图像对鼠标操作透明,如果图像位于面板上,则由面板处理所有内容。虽然不知道如何做到这一点,但我相信沃伦、陆路或其他VCL高手会在这方面帮助你。