奇怪[数字] S IN德尔福DFM文件 - 起源和必要性?(Strange [number]s in

2019-06-25 06:27发布

我需要改变大量在一个包中定义到另一个包中那些类似Delphi组件的。 保存为当然的文本 - 许多繁重的工作,可以通过替换文本(组件类型和属性)在DFM文件来完成。

我已搜查#1和谷歌,我现在从适应菲利克斯科利柏DFM解析器http://www.felix-colibri.com/papers/colibri_utilities/dfm_parser/dfm_parser.html

我碰到一个“功能”在DFM文件分析器扼流圈:[序号] S型规格这样后:

inherited DialoogEditAgenda: TDialoogEditAgenda
  ActiveControl = PlanCalendar
  Caption = 'Agenda'
  [snip]
  inherited PanelButtons: TRzPanel
    Top = 537
    [snip]
    inherited ButtonCancel: TRzBitBtn [0]  <== *here*
      Left = 852
      [snip]
    end
    object CheckBoxBeschikbaarheid: TRzCheckBox [1]  <== *here*
      Left = 8
      [snip]
    end
    inherited ButtonOK: TRzBitBtn [2]  <== *here*
      Left = 900
      [snip]
    end
  end
  inherited PageControl: TRzPageControl
    Left = 444
    [snip]
  end
  object PanelBeschikbaarheid: TRzSizePanel [2]  <== *here*
    Left = 967
    [snip]
  end
  object PanelScheduler: TRzPanel [3]  <== *here*
    Left = 23
    Top = 22
    [...]

许多这类的DFM都严重依赖继承(我不得不去适应Colibr的那些已经代码),但与继承一个小的测试应用程序未能在DFM产生[数字]秒。

不得不延长解析器代码之前,我的问题:有没有人知道这些[数字]来自S和结果,可我也许解析DFM文件之前将其删除?

谢谢

一月

Answer 1:

这些数字并非完全无用。 比方说,你有类TATBTC ,以及TBTC从两个派生TA 。 该的DFM的样子:

object A: TA
  object X: TX
  end
end

inherited B: TB
  object Y: TY
  end
end

inherited C: TC
  object Y: TY [0]
  end
  inherited X: TX [1]
  end
end

BC不同,因为它们的顺序XY子组件被反转。 为了子组件的精确含义取决于组件(见下文),但最值得注意的是,如果他们是TWinControl的后代,或者他们都是TControl后代不派生自TWinControl ,这意味着他们在是否不同X被示为YYX

删除这些数字可能会改变形式,所以你不应该盲目地去做。 然而,这取决于你的目标,你可以修改解析器(源代码看起来可用)简单地跳过的数字。

组件的相对顺序一般并不普遍多大关系,但也有一些例外。 在一些更详细的解释:

对于正常对照,子组件开始(1) TControl后代不从派生TWinControl ,然后(2) TWinControl后代,最后(3)的任何非TControl组件。 在每个这些,组件的相对顺序是可调节的:对于控件,“置于前”和“发送到备份”尽可能移动控制,与非限制TWinControl永远后放TWinControl 。 对于非控制,(略名不副实)“创建顺序”选项允许你更改顺序。 所以,让我们假设你有两个标签(A和B),两个编辑控件(C和d),以及数据集和数据源(E和F),你可以得到为了例如,ABCDEF,BACDEF,ABDCFE ,但不ACBDEF。

当不使用可视化继承,成分简单地得到保存,为了重新加载:保存到DFM文件时才能被保留。 当你使用继承,在DFM文件被加工基地,以得来,所以在上述情况下,当TC被创建,它的X成员总是它之前创建Y成员。 的[0][1]需要告诉Delphi的RTL事后修复了顺序,在那些情况下,部件顺序的事项。

什么组件订单实际执行取决于组件类型。 由于“置于顶层” /“发送到回”顾名思义,控制使用该组件以指定的Z顺序。 对于其他组件类型,这意味着无论组件想它的意思。 例如,菜单可以使用该组件,以指定它们的菜单项(从上到下)的顺序。 工具栏控件可以使用该组件以指定工具栏按钮的顺序,即使这些工具栏按钮本身没有控制。 数据集使用组件为了指定字段顺序,并且由此也列的默认顺序在TDBGrid



文章来源: Strange [number]s in Delphi DFM files - origin and necessity?