【问题标题】:Does the order of properties in DFM file matter?DFM 文件中的属性顺序是否重要?
【发布时间】:2020-02-13 02:59:12
【问题描述】:

不标准的属性顺序会导致任何问题吗?

例如,IDE 在 DFM 文件中存储了一个TButton 组件,如下所示:

  object Button1: TButton
    Left = 288
    Top = 160
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end

如果我手动更改属性的顺序,这会导致任何问题吗?

  object Button1: TButton     
    OnClick = Button1Click
    Left = 288
    Top = 160
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
  end

【问题讨论】:

  • 顺序无关紧要,但IDE会在下次编辑表单时将它们恢复为原始顺序,所以无论如何都无所谓。您可以在大约 60 秒内自行测试,方法是创建一个新的 VCL 应用程序,在其上放置一个按钮,保存它,然后使用记事本编辑 DFM 并在 IDE 中重新打开它。
  • 有时顺序很重要!有关一些示例,请参阅下面的答案。
  • @Ken White 只会在特定情况下给出答案...
  • 当然,在某些情况下订单很重要。不是这里列出的属性。

标签: delphi dfm


【解决方案1】:

似乎在某些情况下顺序实际上很重要!

例如,请参阅 TStandardColorMap、TActionManager、TActionClientItem、TTabControl、TTreeView、TMonthCalendar、TDateTimePicker 和 TComboBoxEx(仅举几例来自 Vcl)的已发布部分中的 cmets,其中发布属性的顺序是相关的。

由于 DFM 中属性的顺序决定了发布属性的设置顺序,因此任何其他顺序都可能在从 DFM 读取组件后影响属性的值。

MartynA 在另一个答案中提到的修复机制不适用于此类属性。

【讨论】:

    【解决方案2】:

    这没什么区别。

    TReader 类负责处理从 DFM 流中读取组件属性。这是通过创建从流中读取的属性值的“修复列表”来操作的,在读入整个组件之后,使用该列表来设置组件的属性。请参阅 Danny Thorpe 撰写的 Delphi 组件设计 (ISBN 0-201-46136-6) 中的 Streaming 章节,了解更多详细信息,了解它为何如此设计。

    我看到 Uwe Raabe 添加了一个答案,而且他通常是对的。

    【讨论】:

    • 修正列表适用于作为组件指针的属性,而不适用于非指针的属性。如果某个属性引用了尚未流式传输的外部组件,则读者记得稍后返回并修复该引用。非指针属性(如字符串和整数等)并非如此,它们会立即按原样流式传输。
    • @RemyLebeau:谢谢,但这就是我提到 D Thorpe 的书的原因。
    【解决方案3】:

    据我所知,DFM 文件中的属性顺序无关紧要。

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多