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