Delphi 如何加载一个小的系统图标?

Delphi 如何加载一个小的系统图标?,delphi,timage,loadimage,Delphi,Timage,Loadimage,我需要显示16x16像素的错误/警告/信息图标。不幸的是,LoadIcon(0,IDI_*)和LoadImage(0,OIC_*,IMAGE_u图标,16,16,LR_共享)总是给我32x32版本的图标 我读到了关于ShGetStockIconInfo的内容,但这只在Vista之后才可用,我仍然需要支持XP 有什么想法吗 我正在使用Delphi 2010和一个TImage组件,如果这很重要的话。问题是,当你这样做的时候,你会得到一个图标的缓存版本,这是系统加载的第一个图标。这将是大尺寸图标,通常

我需要显示16x16像素的错误/警告/信息图标。不幸的是,
LoadIcon(0,IDI_*)
LoadImage(0,OIC_*,IMAGE_u图标,16,16,LR_共享)
总是给我32x32版本的图标

我读到了关于ShGetStockIconInfo的内容,但这只在Vista之后才可用,我仍然需要支持XP

有什么想法吗


我正在使用Delphi 2010和一个
TImage
组件,如果这很重要的话。

问题是,当你这样做的时候,你会得到一个图标的缓存版本,这是系统加载的第一个图标。这将是大尺寸图标,通常为32x32。你指定的尺寸无关紧要

您可以在user32.dll中找到所需资源的ID,并使用如下内容:

LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON,
    16, 16, LR_DEFAULTCOLOR);
您最好调用
GetSystemMetrics(SM\u CXSMICON)
来获得图标大小,而不是硬编码16,但您可能已经知道了这一点


我不确定您从哪里获得user32中资源的资源ID,甚至不确定它们是否能保证在不同的Windows版本中保持不变。我猜会的,因为太多的程序会崩溃,但这纯粹是猜测。

您试图加载的图标是否为16x16?如果图标仅为32x32,则始终为32x32。这些图标以16/32/48px的形式提供。感谢您对为什么它不能以我的方式工作的出色解释!100:IDI_应用程序,101:IDI_警告,102:IDI_问题,103:IDI_错误,104:IDI_信息,105:IDI_WINLOGO,106:IDI_SHIELD,使用ResourceHacker进行反向工程,现在可以工作了。仍然需要在不同的Windows版本上进行测试,但到目前为止看起来不错!谢谢不客气,但表达感激的习惯方式是接受回答@大卫·赫弗南,谢谢!我花了整整一天的时间试图弄清楚为什么(Delphi的)imagelist在插入一个从user32.dll加载的16x16图标时会显示一个32x32图标。问题是,Windows图标的动态调整让我确信我得到了16x16的图标(我甚至将它保存到了一个文件中,并且它确实存在于16x16中——在图像查看器中进行了检查)。所以你刚刚解决了我的疑惑,谢谢。