设置firemonkey组件的Default Integer值

时间:2012-09-03 08:05:51

标签: delphi custom-component firemonkey

我们正在努力在Delphi Xe2平台上的firemonkey中创建自定义组件。我正在使用firemonkey自定义组件创建已发布的属性。我已设置默认值,如布尔值,自定义类型,但我设置默认整数值。我正在使用类TControl1 = class(TControl)。 发布时间        属性测试:整数读取FTest写入设置测试默认值10; 在组件查看器上,我的自定义组件显示0 default.Sorry表示我的英语不好。 请任何人帮助我

2 个答案:

答案 0 :(得分:4)

如果我没记错的话,default指令不会设置您的私人成员FTest。您必须在组件的构造函数中初始化它,如下所示:

TControl1 = class(TControl)
private
  FTest: Integer;
  procedure SetTest(Value: Integer);
public
  constructor Create(AOwner: TComponent); override;
published
  property Test: Integer read FTest write SetTest default 10;
end;
.
.
.
constructor TControl1.Create;
begin
  inherited;
  FTest := 10;
end;

答案 1 :(得分:3)

指定default属性值不会在运行时将该值赋给该属性。它所做的就是控制财产的存储方式。如果在存储属性时属性的值等于 default ,则VCL流式框架将省略该属性。

documentation这样说:

  

声明属性时,可以为其指定默认值。 VCL使用默认值来确定是否将属性存储在表单文件中。如果未指定属性的默认值,则VCL始终存储属性。

     

...

     

声明默认值不会将该属性设置为该值。组件的构造函数方法应在适当时初始化属性值。但是,由于对象始终将其字段初始化为0,因此构造函数不一定要将整数属性设置为0,将字符串属性设置为null,或将布尔属性设置为False。

换句话说,您必须在组件的构造函数中初始化属性,除了设置默认值。并且您有责任确保将其初始化为与default指定的值相同的值。

我个人总是发现设计中固有的重复有点令人沮丧。设计师成功地将语言构建为违反DRY principle。您提出这个问题的事实说明了设计的弱点。指定default值后,您会惊讶于编译器似乎忽略了您并要求您再次设置它。