【问题标题】:Delphi IDE changing imagelist in inherited DFM filesDelphi IDE 在继承的 DFM 文件中更改图像列表
【发布时间】:2011-03-15 17:10:27
【问题描述】:

当在 Delphi 中打开一个包含继承的 TImageList 的表单时(在这种情况下是 2010,但它可能会在其他版本中这样做),IDE 总是(我找不到任何韵律或节奏)添加图像数据再次到继承的形式。这会增加可执行文件的大小。任何人都知道为什么,以及如何阻止它发生?我再说一遍,图像没有改变。

【问题讨论】:

  • 我所做的是将图像列表放在数据模块上并将其添加到您的表单使用条款中。设计师应该能看到
  • @jeroen Pluimers - 已添加
  • 您非常谨慎地重申图像没有更改,因为它的第一个记录现在可能已丢失或损坏。 :)

标签: delphi delphi-2010


【解决方案1】:

这是 TImageList 的一个已知问题,除了继续删除垃圾数据之外,您无能为力。 (BeyondCompare 在这里非常有用,尤其是与源代码控制结合使用时。)If you want to see it fixed, please vote for the QC report on it.

【讨论】:

    【解决方案2】:

    我所做的是将图像列表放在数据模块上,然后将其添加到表单使用子句中。表单设计者将能够看到图像列表

    【讨论】:

    • 在我的大多数项目中,我都有一个或多个包含这些图像列表的资源数据模块。
    【解决方案3】:

    这不是问题的“解决方案”,而是对正在发生的事情的更多解释。给定图像列表的图像数据存储为二进制数据块。这个数据块是从 comctl32.dll 的底层 IMAGELIST 实现中获得的。

    可能发生的情况是,由于某种原因,comctl32.dll 中的 Windows 实现在“祖先”实例和“后代”实例之间以不同方式流式传输图像数据。对于 Windows,这两个实例之间没有任何关系。

    表单继承的工作方式是,它在流式传输时对“后代”和“祖先”进行逐个属性的比较,以确定是否应将给定属性写入表单。因为图像数据是一团不透明的粘性物质,我们所能做的就是逐字节比较祖先上的 TImageList 实例所写的内容和后代上的 TImageList 实例所写的内容。如果只有一个字节不同,流系统别无选择,只能假设 something 发生了变化,从后代实例写入数据。例如(我不知道细节,因为它是不透明的),如果 goo 的 blob 包含时间戳,可以想象每次写入的数据都会不同。

    【讨论】:

      【解决方案4】:

      我的建议:永远不要将图像保存在 .dfm 文件中。始终将它们放在资源文件中并重新控制您的应用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2013-11-09
        相关资源
        最近更新 更多