4

可能重复:
是否有一个 Delphi 选项可以“锁定”表单的设计(布局)以防止意外更改?

我们最近从 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 中更新时发生冲突。

4

2 回答 2

8

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

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

然后,如果您在设计器中将表单标记为已修改,例如更改活动选项卡,则设计器将在您保存时重新创建 .dfm 文件。它通过要求内存中的组件保存自己来重新创建 .dfm 文件。此保存过程不考虑磁盘上 .dfm 文件的外观。每个组件只是保存其当时的属性。

所以,总而言之,你真的无法改变 Delphi 的行为。您能做的最好的事情就是解决它以最大程度地减少影响。

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

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

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

于 2012-10-16T09:18:44.397 回答
0

如果您在上次保存该表单后更新了 delphi 版本,您还将看到 dfm 更改。因此,如果您有一个旧表格并检查它以进行微小更改,您将看到许多其他更改。有时这些是新的 delphi 版本中引入的新属性,有时会更改值。这些还表明对尚未签出的表单进行的未决更改。升级 delphi 后,您可以签出每个表单,并立即将其重新签入以记录所有这些更改。

通过视觉设计,我们喜欢“按照我们喜欢的方式”创建表单,然后让 delphi 保存所有这些更改。它悄悄地设置了很多属性,但是随着不同的开发人员在表单上工作,这些属性可能会发生变化。如果设置很重要 - 可能是高度和宽度 - 在代码中设置它。您仍然会看到属性更改,但您会知道这并不重要。

于 2012-10-16T12:52:04.260 回答