我是C++ Builder的新手,我刚刚把我的普通图标添加到一个设置为32位的TImageList
中,看起来很糟糕(当通过IDE在TImageList
中查看或在它使用的控件中查看时,如TTreeView
)。图标有多种大小,其中一种有48 x48,32 x32,24 x24,16 x16,所有RGB/A。32 x32 TImageList
看起来比16 x16 TImageList
好一点,它几乎就像它添加了第一个大小发现48 x48并按比例缩小,而不是挑选与TImageList
匹配的大小,但那将是一个主要的限制,没有任何意义。我一定是做错了什么?有没有解决方案来确保它们看起来很好?
编辑:
我做了一个测试,从16 x16 TImageList
中删除了所有项目并添加了这个(当然是在将.rc
文件添加到项目之后):
void __fastcall TSharedDataModule::DataModuleCreate(TObject *Sender)
{
for (UINT i=IDI_USER_ICON_START; i<=IDI_USER_ICON_END; i++) {
TIcon *icon = new TIcon;
icon->Handle = reinterpret_cast<HICON>(LoadImageW(HInstance, MAKEINTRESOURCE(i), IMAGE_ICON, ImageList16->Width, ImageList16->Height, 0));
ImageList16->AddIcon(icon);
delete icon;
}
}
而且图标在TTreeView
中看起来很棒,所以从.ico
文件加载正确的图像看起来确实像是IDE中的一个bug或缺少的功能。
我确实注意到我的TDBGrid
图标现在是纯黑色的,所以接下来我必须处理这个问题。
这就是答案吗,还是我错过了在IDE中需要执行的某些操作?
1条答案
按热度按时间envsm3lx1#
与 Delphi 文档中的声明相反,TImageList不能在设计时处理32位半透明图像。
https://docwiki.embarcadero.com/Libraries/Alexandria/en/Vcl.Controls.TImageList
PNG或BMP(32位,预乘与否)-将产生错误。以下是不同背景下的三个图像(非预乘bmp,预乘bmp,png)的示例:
On clBtnFace background
On clGreen background
这是一个长期存在的bug。它存在于所有的 Delphi 版本中,包括最新的Delphi 11。