无法声明字符串属性默认值

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脚本文件.

Rem*_*eau 7

只有数字属性才能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)