TMainMenu中的透明PNG图像(带有TImageList)

时间:2011-08-13 13:25:39

标签: delphi delphi-xe

我想在TImageList中加载具有透明背景的PNG,并在TMainMenu中使用它(通过TAction)。
但是,在Delphi中,背景只是黑色。 PNG支持只有一半在Delphi中实现吗?

This家伙说这对他有用,但是只用一个按钮代替主菜单。

我的设置:

  • 我的图像是每种颜色8位加上透明通道的8位(我也尝试过1位透明但仍然不起作用)。在任何其他程序中,图像看起来都很好。
  • Delphi XE。
  • 在TImageList的编辑器中,“透明色”和“填充色”设置为“默认”并被禁用。

注意意外行为:

当用户更改ColorDepth属性的值时,DELPHI将丢失所有图像(仅在TIMAGELIST中的整个表格中)。

可以根据需要重现该错误。丢失的图像可以从之前的DFM文件中恢复,来自'histoy'文件夹。

3 个答案:

答案 0 :(得分:12)

没有理由备份整个DFM文件。

在对ImageList做某事之前,您应该导出图像:单击图像列表编辑器中的“导出”按钮,它会将所有图像保存到单个.BMP文件中。

更改属性后:ColorDepth = cd32Bit, DrawingStyle = dsTransparent

您应该点击“添加”按钮,然后选择您之前导出的文件。然后,图像将在菜单和工具栏中以透明的方式绘制(至少在D2010上)......无需使用第三方组件。

答案 1 :(得分:6)

自Delphi 7以来,我一直在使用TPngComponents。这为大多数delphi内置/第三方组件提供了非常好的png支持。 Embarcadero购买了另一个众所周知的开源PNG支持组件,称为TPngImage,并在后来的Delphi版本中构建了Delphi的原生图形支持。所以当我改为Delphi 2010时,我认为Delphi现在有本机支持并测试本机支持,但发现alpha支持不够好。

所以我再次使用了TPngComponents,它对大多数组件都有更好的支持,包括主菜单。我认为该软件包应该可以用于DXE并且修改有限。

编辑:感谢Uwe Raabe指出产品Codegear(现为Embarcadero)购买的是另一个组件TPngImage,而不是TPngComponent。

答案 2 :(得分:5)

以下是解决方案:http://www.aha-soft.com/faq/delphi-imagelist-png.htm
小心:这将删除(没有任何添加通知TImageList中的所有图像),因此解决方案仅适用于只加载少量图像的解决方案。备份您的图像和DFM文件。

在我的情况下,我已超过100个,因此我逐个导出所有图像并以相同的顺序加载它们并不是很有效率。

所以结论是Delphi XE尚未准备好使用透明的PNG文件(在TImageList中)。我最好回到我原来的第三方PNG图书馆,或者只使用普通的BMP图像。


更新:

这是如何在Delphi 7下完成的: http://www.ic0de.org/showthread.php?10477-TUT-Working-with-delphi-s-imagelist-and-transparency