相关疑难解决方法(0)

如何加载小系统图标?

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

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

有任何想法吗?

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

delphi timage loadimage

8
推荐指数
1
解决办法
3600
查看次数

使用LoadImage兼容加载小型OEM图标

我相信我的代码符合LoadImage规范,但尽管明确指定了维度,但加载的图像是最大的非PNG图标.

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.Icon.Handle := LoadImage(
    0,
    MakeIntResource(OIC_SHIELD),
    IMAGE_ICON,
    GetSystemMetrics(SM_CXSMICON),
    GetSystemMetrics(SM_CYSMICON),
    LR_SHARED
  );
  Win32Check(Image1.Picture.Icon.HandleAllocated);

  OutputDebugString(PChar(Format('%d×%d', [
    Image1.Picture.Icon.Width, 
    Image1.Picture.Icon.Height
  ]))); //  128×128
end;
Run Code Online (Sandbox Code Playgroud)

注意:我更喜欢遵循更新的LoadImage语义,而不是依赖于此问题LoadIcon的答案中指定的显式模块和资源ID(基本上回退到语义).


来自LoadImage规范的引用正好勾勒出我的互斥LoadImage行为问题(无论是失败还是使用以前加载的股票资源,忽略了所需的维度) - 请参阅Adrian McCarthy的回答.


虽然OIC_SHIELD特定于Windows 6.0+,但从版本4.0开始,Windows中存在的其他股票图标(OIC_xxx常量)也是如此.

delphi winapi

0
推荐指数
1
解决办法
943
查看次数

标签 统计

delphi ×2

loadimage ×1

timage ×1

winapi ×1