Delphi设计师,组件是否继承?

6
我正在编写一个自定义组件编辑器,类似于TActionList编辑器,允许创建子组件。编辑器有添加/删除组件的按钮。
现在,我想知道所选组件是否是继承的,以便我可以禁用删除按钮。我在IDesigner或相关接口中没有找到这样的成员。
如果我直接通过Designer.DeleteSelection(True)进行删除,那么我会得到一个异常:
“选择包含在祖先中引入的组件xxx,无法删除。”
这并不太糟糕,但我更愿意在第一时间禁用删除按钮。

当您在列表视图中选择项目时,可以访问您的项目列表,并询问每个项目是否InheritsFrom某个类。 - TLama
1
@TLama 不是这样的。丹尼尔在谈论视觉继承,这可以从 .dfm 文件中的 inherited 关键字看出来。 - David Heffernan
如果这是可能的,我会感到惊讶。尝试使用标准的TActionList来实现您所描述的内容。错误信息为:无法重命名组件Action1,该组件在祖先表单中引入。但是,当单击操作时,它仍然会消失,并出现另一个错误消息:参数超出范围。因此,IDE 无法正确处理它! - David Heffernan
1个回答

9

好的,显然有一种方法可以通过检查 TComponent.ComponentStatecsAncestor 实现:

在 ComponentState 中使用 csAncestor

并且这已经被记录下来了:

csAncestor - 组件在祖先窗体中被引用。仅当同时设置了 csDesigning 时才设置。


3
非常好。 做得很好。也许有人应该告诉Embarcadero这件事,以便他们可以修复他们的操作列表编辑器! - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接