Delphi DFM文件中的奇怪[数字] – 起源和必要性?

Delphi DFM文件中的奇怪[数字] – 起源和必要性?,第1张

概述我需要将一个包中定义的大量Delphi组件更改为另一个包中的类似组件。 大多数grunt工作可以通过替换DFM文件中的文本(组件类型和属性)来完成 – 保存为文本当然。 我已经搜索Stackoverflow和谷歌和我现在调整Felix Colibri DFM解析器从http://www.felix-colibri.com/papers/colibri_utilities/dfm_parser/df 我需要将一个包中定义的大量Delphi组件更改为另一个包中的类似组件。
大多数grunt工作可以通过替换DFM文件中的文本(组件类型和属性)来完成 – 保存为文本当然。

我已经搜索Stackoverflow和谷歌和我现在调整Felix Colibri DFM解析器从http://www.felix-colibri.com/papers/colibri_utilities/dfm_parser/dfm_parser.html

我在DFM文件中遇到了解析器阻塞的“特性”:[number] 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是严重继承的(我不得不改编Colibri的代码已经),但一个小的测试应用程序继承无法生成DFM中的[数字]。

我的问题之前不必扩展解析器代码:有谁知道这些[数字]从哪里来,因此,我可以在解析DFM文件之前删除它们吗?

谢谢

Jan

解决方法 这些数字并不完全无用。假设你有TA,TB和TC类,TB和TC都来自TA。 DFM看起来像:
object A: TA  object X: TX  endendinherited B: TB  object Y: TY  endendinherited C: TC  object Y: TY [0]  end  inherited X: TX [1]  endend

B和C的不同之处在于它们的X和Y子组分的顺序相反。子组件顺序的确切含义取决于组件(见下文),但最显着的是,如果它们是TWinControl后代,或者它们都是不是从TWinControl派生的TControl后代,这意味着它们在X是否显示在Y ,或Y在X上。

删除这些数字可能会改变形式,所以你不应该盲目地做。但是,根据您的目标,您可以修改解析器(源代码似乎可用),以便跳过数字。

组件的相对顺序通常通常不重要,但是有一些例外。更详细地解释:

对于正常控件,子组件开始于(1)不从TWinControl派生的TControl子体,然后(2)TWinControl子体,最后(3)任何非TControl组件。在每个组件中,组件的相对顺序是可调的:对于控件,“Bring to front”和“Send to back”尽可能远地移动控件,限制是非TWinControl永远不能放在TWinControl。对于非控件,(略有误称)“创建订单”选项允许您更改订单。所以,假设你有两个标签(A和B),两个编辑控件(C和D),一个数据集和数据源(E和F),你可以得到的顺序是例如ABCDEF,BACDEF,ABDCFE ,但不是ACBDEF。

保存到DFM文件时保留该顺序:当不使用可视继承时,组件只是按顺序保存和重新加载。当你使用继承时,DFM文件得到处理基地派生,所以在上面的情况下,当创建TC时,它的X成员总是在它的Y成员之前创建。需要[0]和[1]来告诉Delphi RTL修正顺序,在那些组件顺序很重要的情况下。

组件顺序实际上取决于组件类型。由于“带到前面”/“发送回”名称建议,控件使用组件顺序指定Z顺序。对于其他组件类型,它意味着组件想要的意思。例如,菜单可以使用组件顺序来指定其菜单项的顺序(从上到下)。工具栏控件可以使用组件顺序来指定工具栏按钮的顺序,即使这些工具栏按钮本身不是控件。数据集使用组件顺序来指定字段顺序,从而也指定TDBGrID中列的默认顺序。

总结

以上是内存溢出为你收集整理的Delphi DFM文件中的奇怪[数字] – 起源必要性?全部内容,希望文章能够帮你解决Delphi DFM文件中的奇怪[数字] – 起源和必要性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1282140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存