【问题标题】:Why does Delphi XE7 change PNG image on every FMX form save?为什么 Delphi XE7 在每个 FMX 表单保存时都会更改 PNG 图像?
【发布时间】:2015-08-17 07:28:16
【问题描述】:

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

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

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

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

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

编辑: 从 cmets 来看,这是 Delphi 中的一个错误,所以我创建了一个新的 QP 报告: https://quality.embarcadero.com/browse/RSP-11259

如果你认为它应该解决,请投票。

【问题讨论】:

  • 相关问题Delphi TImageList bitmap changes Linkes QC 因“不会做”而关闭
  • 您唯一能做的就是不要将这些更改提交到存储库,并在它们发生时还原它们。
  • @DalijaPrasnikar 是的,当我之前使用 VCL 时,也发生过这种情况,但每张图片只更改了一行,我可以忍受。现在有了 Firemonkey,二进制数据中的所有行都被改变了。

标签: delphi png firemonkey delphi-xe7


【解决方案1】:

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

您必须对 .dfm/.fmx 文件和源代码控制做的就是仔细审查每个提交并恢复意外更改。无论如何,您都需要这样做,因为 IDE 确实习惯于更改不应更改的内容。即使是非二进制资源。

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

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

【讨论】:

  • 这似乎只发生在一半的图像上,所以我想知道是什么让另一半在每次保存时都没有改变......
  • 谁知道呢。你可以尝试向 Embarcadero 请求改变,但我怀疑你在那里会有很多运气。
  • 实际上 FMX 下的 PNG 流是由操作系统例程 (WIC) 完成的。因此,操作系统或操作系统内部的任何更改都可能导致此问题。
  • @DavidHeffernan,他们在写入 DFM 文件时最好不要依赖操作系统实现。他们实际上并没有在 VCL 中这样做。 Hans 可以提交 QP 报告吗?
  • @UweRaabe 是的,我知道这听起来很愚蠢,我只是每天都在 Delphi 中发现错误,如果我应该使用 MWE/SSCCE 报告所有错误,那将是一份全职工作。 ..我会找时间报告这个。
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 2015-02-22
  • 2015-12-08
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多