gpt4 book ai didi

delphi - 如何在设计时调用组件的属性编辑器

转载 作者:行者123 更新时间:2023-12-03 14:51:00 33 4
gpt4 key购买 nike

我创建了一个从 TCustomPanel 派生的组件。在该面板上,我有一个从 TOwnedCollection 派生的类的已发布属性。一切运行良好,单击该属性的对象检查器中的省略号将打开默认集合编辑器,我可以在其中管理列表中的 TCollectionItems。

  TMyCustomPanel = class(TCustomPanel)
private
...
published
property MyOwnedCollection: TMyOwnedCollection read GetMyOwnedCollection write SetMyOwnedCollection;
end;

我还希望能够在设计时双击面板并默认打开集合编辑器。我首先创建一个从 TDefaultEditor 派生的类并注册它。

  TMyCustomPanelEditor = class(TDefaultEditor)
protected
procedure EditProperty(const PropertyEditor: IProperty; var Continue: Boolean); override;
end;

RegisterComponentEditor(TMyCustomPanel, TMyCustomPanelEditor);

这似乎是在正确的时间运行的,但我当时不知道如何启动集合的属性编辑器。

procedure TMyCustomPanelEditor.EditProperty(const PropertyEditor: IProperty; var Continue: Boolean);
begin
inherited;

// Comes in here on double-click of the panel
// How to launch collection editor here for property MyOwnedCollection?

Continue := false;
end;

任何解决方案或不同的方法将不胜感激。

最佳答案

据我所知,您没有使用正确的编辑器。 TDefaultEditor 的描述如下:

An editor that provides default behavior for the double-click that will iterate through the properties looking the the most appropriate method property to edit

这是一个编辑器,通过将您放入具有新创建的事件处理程序的代码编辑器来响应表单上的双击。想象一下当您双击 TButton 时会发生什么,然后您就会进入 OnClick 处理程序。

自从我编写设计时编辑器以来已经很长时间了(我希望今天我的内存还可以),但我相信您的编辑器应该源自TComponentEditor。为了显示集合编辑器,您可以从 ColnEdit 单元调用 ShowCollectionEditor

您可以重写 TComponentEditorEdit 方法,并从那里调用 ShowCollectionEditor。如果您想更高级,您也可以使用 GetVerbCountGetVerbExecuteVerb 声明一些动词。如果您这样做,那么您将扩展上下文菜单,并且默认的 Edit 实现将执行动词 0。

关于delphi - 如何在设计时调用组件的属性编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446368/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com