Windows Small System图标高度不正确

时间:2017-09-11 23:50:06

标签: icons windows-10 delphi-7

我在Windows 10上运行,但是使用Delphi 7(是的,我知道它已经很老了)。

我想在Windows中使用系统图标,并通过定义名为TImageList的{​​{1}}来解决此问题,我将其初始化如下:

SystemIcons

我将var fileInfo: TSHFileInfo; begin SystemIcons.Handle := ShGetFileInfo('', 0, fileInfo, SizeOf(fileInfo), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX); ... 个属性静态设置为SystemIcons组件,其宽度和高度设置为16。

在其他地方,我希望在给定有效shell对象的图像索引的情况下从此图像列表中检索图标。因为这些是"小系统图标",我希望它们是16x16。调用TImageList的结果会产生16.奇怪的是,维度取决于我是将它们检索为位图还是图标。

GetSystemMetrics(SM_CYSMICON)

... var icon: TIcon; bm: TBitmap; begin ... icon := TIcon.Create; SystemIcons.GetIcon(imgIndex, icon); bm := TBitmap.Create; SystemIcons.GetBitmap(imgIndex, bm); 是正确的,两种情况都是一样的。正如预期的那样,在每种情况下检索的图像都是相同的。位图(imgIndexbm.Width)的尺寸也符合预期:16x16。但是,图标(bm.Heighticon.Width)的尺寸不是。它们是32x32。

当我在画布上绘制图标时,它显示为16x16。因此,只有icon.HeightHeight值显示不正确。很奇怪。

为什么这些不同?

1 个答案:

答案 0 :(得分:0)

图像实际上可能是32x32开始。

在内部,TImageList.GetIcon()只需使用HICON直接从基础Win32 ImageList API检索所选图像的ImageList_GetIcon(),并将其分配给TIcon.Handle属性。< / p> 另一方面,

TImageList.GetBitmap()有点不同。它将TBitmap的尺寸调整为TImageList(16x16)的尺寸,然后拉伸使用TBitmap.Canvas将所选图像绘制到TImageList.Draw()上,ImageList_DrawEx()依次使用list<> }}。