TBitmap的按钮控件和底层替换,可以在不编写预混合代码的情况下正确处理PNG透明度

War*_* P 15 delphi png delphi-2010 png-transparency

Delphi 2010的TSpeedButtons似乎并没有真正支持PNG透明度,因为Glyph属性在内部使用TBitmap,TBitmap用于位图,并且不能正确支持PNG透明度,并且TSpeedButton.Glyph不能支持透明度然后.. 更新:但实际的问题是我有一些外部的东西(Developer Express组件)让delphi的PNG支持无功能,另一方面TImage,虽然它仍然是TPicture,并且可以支持PNG,也受此开发者快递的影响错误.

这里已经提出了一个问题,答案显示了如何使用预混合,以便透明度不会变成黑色像素.我想知道是否有另一个按钮控件将使用在设计时加载的alpha混合PNG,并且不会将PNG资源转换为丢弃Alpha通道的BMP格式,并导致此处显示的黑色边框.

简而言之,此控件不会使用TBitmap,也不会使用TBitmap所具有的颜色键透明度功能.

重复一遍,我不是问如何在仍然使用过时的基于TBitmap/TSpeedButton的VCL功能的情况下解决黑外问题,因为它缺乏现代的PNG透明功能,我要求用它替换它"正常工作"的其他东西.

作为次要的缺点,将一个小的.png文件转换为.DFM位图资源本质上是浪费空间并使我的表单.DFM内容太大..dfm中的原生.png文件格式存储应该使得结果形式更小.

在此输入图像描述

更新: PngComponents看起来应该可以工作,但是Invalid Graphic format当我尝试将png加载到Png speedbutton时出现错误.请注意,Png图像列表组件没有这样的问题.似乎cxLibrary(开发人员快递包)正在破坏事物.一旦我删除了所有开发者表达的东西,这个问题就消失了.因此,尽管我选择了Pngcomponents作为答案,但如果你安装了devex的东西,请改用他们的按钮,而不是pngcomponents.

在此输入图像描述

Uwe*_*abe 11

你可以看看PngComponents.它有一个TPngSpeed按钮和一些其他控件直接与PngImages配合使用.