TMyComponent = class(TComponent)private FVariantValue : Variant;published property VariantValue : Variant read FVariantValue write FVariantValue default False;end;
在编译时,我在VariantValue属性行上收到以下错误:
E2026 Constant Expression expected
使用Boolean属性执行相同 *** 作不会导致任何类型的错误.
我读了一点documentation,但我没有发现Variant属性的默认值.
解决方法 这里要小心.默认指令不执行任何 *** 作来设置属性本身的值.它仅影响值是否显式保存在.dfm文件中.如果为属性指定默认值,则仍必须确保构造函数将支持字段初始化为该值.Properties : Storage Specifiers
When saving a component’s state,the storage specifIErs of the component’s published propertIEs are checked. If a property’s current value is different from its default value (or if there is no default value) and the stored specifIEr is True,then the property’s value is saved. Otherwise,the property’s value is not saved.
Note: Property values are not automatically initialized to the default value. That is,the default directive controls only when property values are saved to the form file,but not the initial value of the property on a newly created instance.
这只是组件流系统的一个提示,它不需要在.dfm中显式存储该值 – 您的合同部分是确保您实际将支持字段初始化为该值.进行此类初始化的适当位置是在组件的构造函数中:
constructor TMyComponent.Create(AOwner: TComponent);begin inherited Create(AOwner); FVariantValue := False;end;
也就是说,False是布尔值,而不是变量,因此它不能用作Variant类型的常量表达式.由于变体是复杂类型,因此不能将其表示为单个常量,因此不能具有默认属性.
Per Remy,如果要在后备变量为False时确保变量未保存在.dfm文件中,则可以使用带有无参数方法的stored指令,当变量求值为布尔值False时,该方法返回False.例如 :
property VariantValue : Variant read FVariantValue write FVariantValue stored IsVariantValueStored;
哪里
function TMyComponent.IsVariantValueStored : Boolean;begin Result := not VarIsType(FVariantValue,varBoolean); if not Result then Result := FVariantValue;end;总结
以上是内存溢出为你收集整理的delphi – Variant属性可以有默认值吗?全部内容,希望文章能够帮你解决delphi – Variant属性可以有默认值吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)