16

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。

在此处输入图像描述

4

3 回答 3

12

你可以看看PngComponents。它有一个 TPngSpeed 按钮和其他一些直接使用 PngImages 的控件。

于 2011-08-23T15:54:33.373 回答
2

您还可以查看名为 TAdvGlowButton 的 TMS 软件组件,因为它支持具有 alpha 透明度的 PNG 图像。

链接到网站...

于 2011-08-23T16:56:11.233 回答
2

事实证明,Developer Express VCL 组件包中的 cxButton 也支持 PNG 按钮。

于 2011-08-23T17:46:06.550 回答