我正在尝试为某个自定义组件创建自定义属性编辑器.自定义属性编辑器用于编辑某些set属性,例如
type
TButtonOption = (boOption1, boOption2, boOption3);
TButtonOptions = set of TButtonOption;
Run Code Online (Sandbox Code Playgroud)
我的属性编辑器来自TSetProperty类.问题是:我的自定义属性编辑器没有注册,Delphi IDE似乎使用自己的默认设置属性编辑器,因为属性编辑器方法内的ShowMessage()调用永远不会执行!我从头开始创建了一个示例包/组件,尽可能简单,显示了这个问题.这是代码:
unit Button1;
interface
uses
System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, DesignIntf, DesignEditors;
type
TButtonOption = (boOption1, boOption2, boOption3);
TButtonOptions = set of TButtonOption;
TButtonEx = class(TButton)
private
FOptions: TButtonOptions;
function GetOptions: TButtonOptions;
procedure SetOptions(Value: TButtonOptions);
published
property Options: TButtonOptions read GetOptions write SetOptions default [];
end;
TMySetProperty = class(TSetProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetProperties(Proc: TGetPropProc); override;
function GetValue: string; override;
end;
procedure Register;
implementation
uses
Dialogs; …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
type
TColors = (Red, Blue, Green, Yellow, Orange); // base type
TMyColors = Green..Orange; // subrange type
TAllowedColors = set of TMyColors; // set based on the subrange above
TMyComponent = class(TComponent)
private
FAllowedColors: TAllowedColors;
published
property AllowedColors: TAllowedColors read FAllowedColors write FAllowedColors;
end;
Run Code Online (Sandbox Code Playgroud)
一旦安装到设计时包中,对象检查器就会正确显示属性AllowedColors:
请注意,绿色和黄色均已设置。现在,保存表单并检查 DFM 文件后,我得到的结果是:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
...
object MyComponent1: TMyComponent
AllowedColors = [Red, Blue]
Left = 80
Top = 56
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,IDE 将 AllowedColors …