短版
我正在尝试为我制作的自定义按钮实现我的第一个组件编辑器。在一些在线文章的帮助下,我成功安装了编辑器,当我在表单设计器中右键单击我的按钮时,可以看到菜单项。
但是当选择多个按钮控件时,这个组件编辑器菜单没有显示。
默认情况下,组件编辑器是仅使用单个选定的控件,还是可以使用多个选定的控件?如果是,如何使用?
长版
我正在为我自己的一个组件实现TPropertyEditor,但现在已经决定更好地服务TComponentEditor,或者我认为。
基本上我有一个TCustomButton我已经拥有,这个按钮组件有几个已发布的属性,用于更改外观,如边框和填充颜色等。
我正在实现的组件编辑器在上下文菜单中显示一个新菜单项“从文件加载设置”。执行时,会显示一个简单的TOpenDialog,您可以选择相应的文件,例如Ini文件,然后我将其读取并相应地设置文件中的值。
从我所看到的一切都很好,但是因为我仍然是新的并且掌握了Delphi的整个自定义控件方面,我注意到了一些不会发生的事情 - 我不确定这是不是真的预期的行为或我是否可以改变它。
问题是在我的按钮控件的多个选定实例上使用“组件编辑器”菜单。如果只选择了一个按钮,我在Designer中右键单击,我的菜单显示在上下文菜单的顶部,但是多个选定的控件不显示“组件编辑器”菜单。
代码示例
type
TMyButtonEditor = class(TComponentEditor)
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
implementation
{ TMyButtonEditor }
procedure TMyButtonEditor.ExecuteVerb(Index: Integer);
var
OpenDialog: TOpenDialog;
begin
case Index of
0:
begin
OpenDialog := TOpenDialog.Create(nil);
try
OpenDialog.Filter := 'All Files (*.*)|*.*';
if OpenDialog.Execute then
begin
// handle opened file..
end;
finally
OpenDialog.Free;
end;
end;
end;
end;
function TMyButtonEditor.GetVerb(Index: Integer): string;
begin
case Index of
0:
begin
Result := 'Load settings from File...';
end;
end;
end;
function TMyButtonEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
在注册程序单元中:
RegisterComponentEditor(TMyButton, TMyButtonEditor);
从我所看到的只有单个组件可以在任何给定时间使用组件编辑器,或者我错了,它们可以用于多个控件?
我希望在表单设计器上选择说3或4个按钮,然后使用组件编辑器同时在这些按钮上应用导入的设置。
答案 0 :(得分:4)
组件编辑器只能在单个组件上运行。
这是一个非常好的理由,希望尽可能通过Object Inspector而不是组件编辑器提供属性。因为Object Inspector可以同时对多个组件进行操作。