Delphi IDE在继承的DFM文件中更改图像列表

时间:2011-03-15 17:10:28

标签: delphi delphi-2010

在Delphi中打开一个包含继承的TImageList的表单时(在本例中为2010,但它可以用于其他版本),IDE总是(我找不到任何押韵或节奏)添加图像数据再次以继承的形式。然后,这会增加可执行文件的大小。任何人都知道为什么,以及如何阻止它发生?我再说一遍,图片已更改。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

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

表单继承的工作方式是它在流式传输时执行“后代”和“祖先”之间的逐个属性比较,以确定是否应将给定属性写入表单。因为图像数据是一个不透明的粘性块,所以我们所能做的就是在祖先写入的TImageList实例和后代写入的TImageList实例之间进行逐字节比较。如果只有一个字节不同,则流媒体系统别无选择,只能根据某事更改的假设从后代实例中写入数据。例如(我不知道细节,因为它是不透明的),如果goo的blob包含时间戳,可以想象每次写入时数据都会不同。

答案 3 :(得分:2)

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