德尔福和48×48(或更大)的图像列表 – 是否有解决方法?

我正在获取系统图像列表(使用SHGetFileInfo和SHGFI_LARGEICON),添加两个我自己的图标并将其附加到TListView.

问题是如果用户的图标大小未设置为32×32(例如它设置为48×48),则Delphi7 TImageList会因“图像大小无效”错误而失败.

有没有人知道是否有可用的解决方法?我尝试过使用TPngImageList但它会导致其他问题.

此外,请注意我想保留图标的Alpha通道.正常的1位透明度是不够的,因为图标往往看起来很丑陋.

谢谢!

我不知道TImageList可以容纳的图像大小有任何限制.听起来我的问题是你有不同大小的图标,你不能在同一图像列表中保存不同大小的图标.

如果您正在使用不同大小的图标,那么您将需要增大尺寸较小的图标.您必须使用位图在代码中构建它.使用纯透明Alpha通道填充位图,然后将较小的图标blt到位图的中心.

另一个选择是维护两个单独的图像列表,但如果你需要将图标绘制到相同的列表视图中,那么我认为这不会完成工作.我的猜测是你需要增长小图标.

对于alpha,您将需要自己创建图像列表句柄,因为D7中不存在ColorDepth属性.因此,香草D7 TImageList根本无法支持带alpha通道的图标.

您可以通过调用ImageList_Create,传递ILC_COLOR32并将结果分配给ImageList.Handle来解决此限制.在添加任何图像之前执行此操作.你必须在运行时填充列表而不是设计时间,但听起来你已经在做了.

这是一个48×48工具按钮的屏幕截图,带有带alpha透明度的32bpp图标:

确实,我在D2010中做到了这一点,但我的上述解决方法适用于D7 – 直到最近才使用D6.我只是展示这个以证明图像列表可以容纳48px图标.由于TImageList只是系统映像列表组件的包装器,我相信你所尝试的应该是完全可行的.

相关文章
相关标签/搜索