为 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
是否包含在ControlStyle
的TImage32
中。
我对@987654332@真的不熟悉,不知道能不能做父母。我怀疑它不是为了充当容器而设计的。如果是这种情况,那么您可以在派生类的构造函数中将csAcceptsControls
添加到ControlStyle
,并让控件充当父级。
我怀疑如果TImage32
不包含csAcceptsControls
,那么这是设计使然,图像控件不应充当父级。
显然TImage32
与VCL TImage
不同,确实能够充当其他控件的父级。
至于您问题中的其他控件,TBitmap32
不是从TControl
派生的,不能是子控件。
【讨论】:
A 派生自 TcustomControl,因此可以很好地充当容器。问题是 B 不是从 TControl 派生的,因此不适合 OP 想要做的事情。 嗯...需要对您指出的那些事情进行一些研究。 @iamjoosy 谢谢。事实上,我怀疑它可能更复杂。感觉TImage32
不收小孩了。
然而,就像大卫所说的那样。我想做的是在这个父母里面有一个父母和孩子。我发现很难描述我的项目是什么,但简而言之,我制作了一个库,允许您在其中创建父级并拥有子级,但它都在运行时,我也希望能够在设计时使用它。但是,它在设计时使用时不必实时运行,我只想让开发人员看到正在发生的事情的草稿示例。
@xaid 谁说要在TImage32
上画画?鼠标事件从何而来?您的问题似乎是关于父母/子女关系的。我现在很困惑。以上是关于为 Delphi 制作可编辑的设计时组件的主要内容,如果未能解决你的问题,请参考以下文章