【问题标题】:Delphi 10.4 stores default VirtualTree's default properties in .dfm fileDelphi 10.4 将默认 VirtualTree 的默认属性存储在 .dfm 文件中
【发布时间】:2020-09-27 15:45:18
【问题描述】:

更新到 Delphi 10.4 Sydney 后,我的 TVirtualStringTree 实例将其 Colors.XYZ 属性存储在 dfm 文件中,尽管我将这些属性保留为默认值:

VirtualTrees.pas中,这些颜色值有一个默认值,这通常意味着这些不应写入dfm文件:

  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 文件中的这些默认颜色?

【问题讨论】:

  • 属性声明中的默认值意味着流系统将这些值与实际值进行比较,如果它们相同,则不写入。
  • 所以流媒体系统再也看不到这些属性的默认值了?我想知道这是否与“颜色”本身就是一个对象这一事实有关。
  • 这是否也发生在新项目中或仅在您的旧项目中?
  • @Anse iamjoosy 想说的是,Colors 属性对象的 constructor 必须将值分配给与子属性上声明的默认值相匹配的子属性-特性。是否有这样的构造函数,它是否设置了正确的属性值?请注意,在您的 DFM 示例中,DisabledColors 保存为 clGray,但其默认值为 clBtnShadow。这意味着构造函数中的不匹配,或者 Colors 对象中的其他内容正在更改构造后的子属性值。与保存为数字而不是文本别名的其他属性相同
  • Embarcadero 论坛上的一个相关问题解释了可能的罪魁祸首:community.idera.com/developer-tools/general-development/f/…

标签: delphi virtualtreeview delphi-10.4-sydney


【解决方案1】:

这是因为StyleServices.IsSystemStyle 过去在设计器以前的 Delphi 版本中返回 True,现在在 10.4 中返回 False。

这将很快在 Virtual TreeView 中得到修复:https://github.com/JAM-Software/Virtual-TreeView/issues/975

【讨论】:

    【解决方案2】:

    根本原因可能是表单设计者使用了:

    Delphi 10.3 Rio 中的“Windows”样式,所以StyleServices.IsSystemStyle 返回True

    Delphi 10.4 Rio 中的“Windows10”样式,所以StyleServices.IsSystemStyle 返回False

    如此多的组件包受到该更改的影响,并更新了 .DFM 文件中的组件颜色。例如在 TMS VCL UI Pack 中到处都有这个代码(LStyle.Name <> 'Windows')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 2016-03-17
      • 2010-10-16
      • 2012-09-27
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多