Delphi 10.4存储默认的VirtualTree';.dfm文件中的默认属性
更新到Delphi 10.4 Sydney后,我的TVirtualStringTree实例将其Colors.XYZ属性存储在dfm文件中,尽管我将这些属性保留在默认值上: 在中,这些颜色值具有默认值,这通常意味着这些颜色值不应写入dfm文件:Delphi 10.4存储默认的VirtualTree';.dfm文件中的默认属性,delphi,virtualtreeview,delphi-10.4-sydney,Delphi,Virtualtreeview,Delphi 10.4 Sydney,更新到Delphi 10.4 Sydney后,我的TVirtualStringTree实例将其Colors.XYZ属性存储在dfm文件中,尽管我将这些属性保留在默认值上: 在中,这些颜色值具有默认值,这通常意味着这些颜色值不应写入dfm文件: published property BorderColor: TColor index cBorderColor read GetColor write SetColor default clBtnFace; property Di
published
property BorderColor: TColor index cBorderColor read GetColor write SetColor default clBtnFace;
property DisabledColor: TColor index cDisabledColor read GetColor write SetColor default clBtnShadow;
property DropMarkColor: TColor index cDropMarkColor read GetColor write SetColor default clHighlight;
...
如何去除dfm文件中的这些默认颜色?这是因为
StyleServices.IsSystemStyle
在designer以前的Delphi版本中返回True,现在在10.4中返回False
这将很快在Virtual TreeView中得到修复:根本原因可能是表单设计器使用了: Delphi 10.3 Rio中的“Windows”样式,因此
StyleServices.IsSystemStyle
返回True
delphi10.4rio中的“Windows10”样式,因此StyleServices.IsSystemStyle
返回False
许多组件包都会受到该更改的影响,并更新.DFM文件中的组件颜色。例如,在TMS VCL UI Pack中,到处都有此代码
(LStyle.Name“Windows”)
属性声明中的默认值意味着流媒体系统将这些值与实际值进行比较,如果它们相同,那么它们就不会被写入。所以流媒体系统再也看不到这些属性的默认值了?我想知道这是否与“颜色”有关是对象本身。这在新项目中还是仅在旧项目中发生?@Anse iamjoosy试图说的是,Colors
property对象的构造函数必须为与子属性上声明的默认值匹配的子属性赋值。是否有这样的构造函数,它是否设置了正确的属性值?请注意,在DFM示例中,DisabledColors
保存为clGray
,但其默认值为clBtnShadow
。这意味着构造函数不匹配,或者Colors
对象中的其他内容在构造后更改子属性值。与其他属性保存为数字而不是文本别名相同Embarcadero论坛上的一个相关问题解释了一个可能的罪魁祸首: