Delphi 2010 的 TSpeedButtons 似乎并没有真正正确支持 PNG 透明度,因为 Glyph 属性在内部使用了 TBitmap,而 TBitmap 用于位图,并且不正确支持 PNG 透明度,然后 TSpeedButton.Glyph 不能支持透明度..更新:但实际的问题是我有一些外部的东西(Developer Express 组件)正在渲染 delphi 的 PNG 支持不起作用,另一方面,TImage,虽然它仍然是 TPicture,并且可以支持 PNG,但也受到了这个 Developer express漏洞。
此处已经提出了一个问题,答案显示了如何使用预混合以使透明度不会变成黑色像素。我想知道是否有另一个按钮控件将使用在设计时加载的 alpha 混合 PNG,并且它不会将 PNG 资源转换为 BMP 格式而丢弃 alpha 通道,并导致此处显示黑色边框。
简而言之,此控件不会使用 TBitmap,也不会使用 TBitmap 所具有的色键透明度功能。
重复一遍,我不是在问如何在仍然使用过时的基于 TBitmap/TSpeedButton 的 VCL 功能的同时解决外部黑色问题,因为它缺乏现代 PNG 透明度功能,我问的是用它替换它其他“正常工作”的东西。
作为次要缺点,将小的 .png 文件转换为 .DFM 位图资源实际上是在浪费空间并使我的表单 .DFM 内容太大。.dfm 中的原生 .png 文件格式存储应该使生成的表单更小。
更新: PngComponents 看起来应该可以工作,但是Invalid Graphic format
当我尝试将 png 加载到 Png 速度按钮时出现错误。请注意,Png 图像列表组件没有此类问题。似乎 cxLibrary(一个开发人员快递包)正在破坏事物。一旦我删除了所有开发人员快递的东西,这个问题就消失了。因此,尽管我选择了 Pngcomponents 作为答案,但如果您安装了 devex 东西,请改用它们的按钮,而不是 pngcomponents。