为什么 Delphi XE7 在每个 FMX 表单保存时更改 PNG 图像?

Why does Delphi XE7 change PNG image on every FMX form save?

我有一个包含许多自定义 firemonkey 组件的表单,其中每个组件都包含多个位图(从 PNG 图像文件加载)。每次保存表格时,FMX文件中PNG图片的二进制数据都会发生变化!

这打乱了我的版本控制日志 (SVN),因为仅更改表单中的一个 属性 会导致数千行更改。

有什么办法可以避免这种情况吗?

在此处查看 SVN diff 的屏幕截图:

保存表单时,DotInlay.PNG图像没有被我更改,甚至包含图像的控件也没有任何更改。

编辑: 根据评论,这是 Delphi 中的错误,因此我创建了一个新的 QP 报告: https://quality.embarcadero.com/browse/RSP-11259

如果你觉得应该解决,请投票。

IDE就是这样。将二进制资源放入 .dfm/.fmx 文件的风险之一。我不相信你能做任何事。只有 Embarcadero 可以更改他们的 IDE。

您必须对 .dfm/.fmx 文件和源代码管理执行的操作是仔细检查每个提交并还原意外更改。无论如何你都需要这样做,因为 IDE 确实有改变不应该改变的事情的习惯。即使是非二进制资源。

不过我的建议是不要将图像放在 .dfm/.fmx 文件中。将它们保存在资源中。这样您就可以将图像文件放入修订控制并将其作为资源链接到您的可执行文件。您需要在代码中做更多工作才能在运行时加载资源,但如果需要,您可以将其包装在辅助方法中,并且每个图像加载都应减少到一行。

这种方法的真正好处是您可以更好地控制二进制资产的变更。