这个问题在这里已经有了答案:




8年前关闭。






我们最近已从 StarTeam 更改为 SVN,但我们的 DFM 文件有问题。看起来 Delphi 更改了 DFM 文件,即使我们实际上并未更改表单。

例如:我打开一个现有文件,更改事件标签页,保存文件,将标签页改回其原始状态,然后再次保存。当我比较这两个文件时,PixelsPerInch、TextHeight、Top 和许多其他值是否发生了变化?我的代码的一个小示例:

   PixelsPerInch = 96
      TextHeight = 13
      inherited PageControl1: TPageControl
        Top = 105
        Height = 629
        Margins.Left = 5
        Margins.Top = 5
        Margins.Right = 5
        Margins.Bottom = 5
        HotTrack = True
        inherited TabSheet1: TTabSheet
          Margins.Left = 5
          Margins.Top = 5
          Margins.Right = 5
          Margins.Bottom = 5

我的问题是:有没有办法让 Delphi 仅在表单更改时才更改 DFM?现在,我们一直在 SVN 中更新时会发生冲突。

最佳答案

这只是 Delphi 的表单流机制如何工作的结果。

当您在 Delphi 设计器中打开一个表单时,.dfm 文件用于创建表单上每个组件的实例。在您的情况下,表单设计器将实例化 .dfm 文件中的每个对象。 .dfm 文件中的每个属性都将被读入。

然后,如果您在设计器中执行任何将表单标记为已修改的操作(例如更改事件标签页),则设计器将在您保存时重新创建 .dfm 文件。它通过要求内存中的组件保存自己来重新创建 .dfm 文件。这个保存过程没有考虑磁盘上的 .dfm 文件是什么样的。每个组件只是保存它在那个时间点的属性。

因此,总而言之,您实际上无法改变 Delphi 的行为。您能做的最好的事情就是解决它以尽量减少影响。

如果您的表单有 Scaled=True,那么您应该确保所有开发人员机器使用相同的字体缩放。否则,当开发人员 A 以一种字体缩放保存时,该 .dfm 文件将与开发人员 B 以不同字体缩放保存的文件完全不同。所有职位都会改变。听起来好像您有一些使用 120dpi 字体缩放的开发人员。这会让你的悲伤永无止境。

如果对表单文件的良性编辑导致大量更改,请提交这些更改。一旦您以相同的方式配置每台开发人员机器,您就会发现事情稳定下来。这些良性编辑不应再导致 .dfm 文件更改。

这只是 Delphi 视觉设计的职业危害之一。无论何时提交,您都需要非常小心和注意您的 .dfm 文件。我经常发现自己从 Tortoise 提交对话框中恢复对 .dfm 文件的更改。我也经常选择在文本编辑器中修改 .dfm 文件而不是使用表单设计器!

关于Delphi XE2 改变了 DFM 即使没有任何改变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12911124/

10-11 22:11