Jer*_*dge 3 delphi components properties default-value
我正在编写一个组件,其中包含许多属性,这些属性将出现在Delphi IDE Object Inspector中(已发布的属性)...
type
TMyComponent = class(TComponent)
private
FMyProperty: String;
published
property MyProperty: String read FMyProperty write SetMyProperty default 'Something';
end;
Run Code Online (Sandbox Code Playgroud)
但是,它不允许我将默认值应用于字符串属性...
[DCC Error] MyUnit.pas(278): E2146 Default values must be of ordinal, pointer or small set type
Run Code Online (Sandbox Code Playgroud)
所有其他属性默认值都可以正常工作(Integer,Enum等).
我的目标是A)如果它们是默认值,则不将字符串属性保存到DFM,B)如果它不是默认值,则将对象检查器中的值显示为粗体,如果不是,则显示常规值.此组件有超过130个属性,其中大约50个是字符串属性,有些属性具有相当大的默认值.
为什么我不允许声明具有默认值的字符串属性?这是Delphi的一个缺点,还是有技术上的原因为什么字符串不能默认?
编辑
如果您真的想知道我在做什么,我将封装Inno Setup并将功能包装到具有广泛属性/集合编辑器的组件中.本主题仅涉及Setup单独的部分,实际上包含100多个属性.预计这些属性中只有大约20个实际用于简单实现,因此我不希望所有其余的字符串属性膨胀DFM的大小(如果它们设置为默认值).根据组件的设置方式,它将生成一个Inno Setup脚本文件.
只有数字属性才能default在属性声明中指定值.但是,您可以使用说明stored符,例如:
type
TMyComponent = class(TComponent)
private
FProp: String;
function MyPropIsStored: Boolean;
procedure SetProp(const Value: String);
public
constructor Create(AOwner: TComponent); override;
published
property MyProp: String read FProp write SetProp stored MyPropIsStored;
end;
constructor Create(AOwner: TComponent); override;
begin
Inherited;
FProp := 'my default value';
end;
function TMyComponent.MyPropIsStored: Boolean
begin
Result := FProp <> 'my default value';
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3446 次 |
| 最近记录: |