如何加载小系统图标?

Oli*_*sen 8 delphi timage loadimage

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

我读过ShGetStockIconInfo但是只能从Vista开始,我仍然需要支持XP.

有任何想法吗?

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

Dav*_*nan 17

问题在于,当您这样做时,您将获得图标的缓存版本,即系统加载的第一个版本.那将是大尺寸的图标,通常是32x32.重要的不是你指定的尺寸.

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

LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON,
    16, 16, LR_DEFAULTCOLOR);
Run Code Online (Sandbox Code Playgroud)

你最好打电话GetSystemMetrics(SM_CXSMICON)来获取图标大小而不是硬编码16,但你可能已经知道了.

我不确定从哪里获取user32中资源的资源ID,或者即使它们可以保证它们在不同的Windows版本中保持不变.我的猜测是,他们会因为太多的程序会破坏,但那只是纯粹的猜测.

  • 100:IDI_APPLICATION,101:IDI_WARNING,102:IDI_QUESTION,103:IDI_ERROR,104:IDI_INFORMATION,105:IDI_WINLOGO,106:IDI_SHIELD,使用ResourceHacker对其进行反向工程 (6认同)