为 Delphi 制作可编辑的设计时组件

Posted

技术标签:

【中文标题】为 Delphi 制作可编辑的设计时组件【英文标题】:Making an editable designtime component for Delphi 【发布时间】:2012-01-24 15:04:11 【问题描述】:

我一直在整个互联网上寻找答案,但我找不到。

我想做的是创建一个组件,我在设计时可以添加组件、移动它们、右键单击它们以弹出菜单、更改它们的属性等。

例如,我删除了组件“A”(基于 Graphics32 库中的 TImage32),然后我希望能够删除组件“B”(基于 @987654322 @) 到 A,但由于 B 不是从像 TPanel 这样的标准 VCL 继承的,所以我不知道如何制作设计时组件。

【问题讨论】:

你到底想要什么? 1)将“A”组件转换为类似 TPanel 的容器的解决方法或 2)扩展“A”组件功能以嵌入(?)“B”组件的集合或 3)编写高级组件编辑器?跨度> 【参考方案1】:

您正在寻找的是创建父/子关系的能力。父级充当容器,子级包含在容器的边界内。 TPanel 是容器的经典示例。任何视觉组件都可以是子组件。

就祖先而言,父项必须源自TWinControl,子项必须源自TControl。实际上,您很少直接从这些类派生,而是从它们的后代之一派生。如果我没记错的话,另一个因素是父控件必须在其ControlStyle 中包含csAcceptsControls

现在,TImage32 确实派生自 TWinControl,因此它可以充当容器。但是,我不确定csAcceptsControls 是否包含在ControlStyleTImage32 中。

我对@9​​87654332@真的不熟悉,不知道能不能做父母。我怀疑它不是为了充当容器而设计的。如果是这种情况,那么您可以在派生类的构造函数中将csAcceptsControls 添加到ControlStyle,并让控件充当父级。

我怀疑如果TImage32 不包含csAcceptsControls,那么这是设计使然,图像控件不应充当父级。

显然TImage32 与VCL TImage 不同,确实能够充当其他控件的父级。

至于您问题中的其他控件,TBitmap32 不是从TControl 派生的,不能是子控件。

【讨论】:

A 派生自 TcustomControl,因此可以很好地充当容器。问题是 B 不是从 TControl 派生的,因此不适合 OP 想要做的事情。 嗯...需要对您指出的那些事情进行一些研究。 @iamjoosy 谢谢。事实上,我怀疑它可能更复杂。感觉TImage32不收小孩了。 然而,就像大卫所说的那样。我想做的是在这个父母里面有一个父母和孩子。我发现很难描述我的项目是什么,但简而言之,我制作了一个库,允许您在其中创建父级并拥有子级,但它都在运行时,我也希望能够在设计时使用它。但是,它在设计时使用时不必实时运行,我只想让开发人员看到正在发生的事情的草稿示例。 @xaid 谁说要在TImage32 上画画?鼠标事件从何而来?您的问题似乎是关于父母/子女关系的。我现在很困惑。

以上是关于为 Delphi 制作可编辑的设计时组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在设计师的“收藏编辑器窗口”中制作可编辑的对象?

Delphi组件编辑器

Mailchimp - 如何制作可编辑的链接

有人可以为 Delphi 推荐一个颜色选择器组件吗?

教学技术 | 使用“MicroSoft Pix”快速制作教材电子版(可编辑)

如何使用 jQuery 制作可编辑的列表项?