我相信我的代码符合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常量)也是如此.
使用SHGetStockIconInfo在Vista和起来,并从其它问题的解决方案对于所有其他操作系统.
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |