【问题标题】:How to create a component property that lists other components?如何创建列出其他组件的组件属性?
【发布时间】:2013-12-08 05:05:02
【问题描述】:
SynEdit 组件具有“荧光笔”属性,其中包含一个下拉列表,其中列出了所有当前存在的荧光笔(设计时)。对我来说,这似乎是设计时组件的一个非常重要的概念,但我根本无法弄清楚它是如何工作的:
假设您将 TSynEdit 和 TSynPasSyn 下拉到表单中。然后单击具有 Highlighter 属性的 TSynedit。您现在可以选择之前创建的 TSynPasSyn。如果您创建另一个 TSynPasSyn,它也会添加到此列表中。我的问题:
在您自己的组件中执行此类操作的最佳方法是什么?您可以简单地使用属性编辑器,还是需要自定义帮助程序类,或者完全不同的东西?
【问题讨论】:
标签:
delphi
properties
lazarus
synedit
【解决方案1】:
也许这会让您感到惊讶,但是在您自己的组件中的组件属性的属性编辑器中列出现有组件不需要任何操作。只需将属性声明为所需的类型,VCL 框架将完成剩下的工作。
例如,考虑这个非常简单的组件:
type
TButtonSelector = class(TComponent)
private
FButton: TButton;
published
property Button: TButton read FButton write FButton;
end;
在 IDE 中安装此组件后,当您在 Object Inspector 中选择 Button 属性时,会列出当前 Form 上的所有现有按钮。
这都是在DesignEditors.TComponentProperty中构建的,也就是说唯一的要求就是让你想要选择的对象从TComponent下降。