私のコードはLoadImage
仕様に準拠していますが、明示的に指定されたディメンションにもかかわらず、読み込まれたイメージは最大PNG以外のアイコンです。LoadImageを使用して小さなOEMアイコンをロードする
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;
注:this questionへの答えに指定されている私は(基本的にバックLoadIcon
セマンティクスに落下する)新しいセマンティクスに準拠するようにではなく、明示的なモジュールおよびリソースIDに依存することを好みます。スペックから
引用は正確に(所望の寸法を無視して、以前にロードされたストック・リソースを失敗したり、使用するか)相互に排他的LoadImageの行動と私の問題を概説している - Adrian McCarthy's answerを参照してください。
OIC_SHIELD
は、Windows 6.0以上、特定のですが、同じことは、バージョン4.0以降のWindowsに存在する他の株式のアイコン(OIC_xxx定数)で発生します。あなたがにリンクされているLoadImageのドキュメントのLR_SHARED
上のNotesから
-1。あなたが提供した最初のリンクは、この問題の回避策を示しました。あなたが気に入らないという事実は、それが解決策であるという事実を変えない。 「解決策があることは知っていますが、私はそれを使用したくない」というのは良い質問ではなく、「MSを使用しようとすると、それほど支持されていないバージョンで定義された定数の意味が変わるかもしれません。 「オン」にもなりません。あなたがそれに同意しないならば、それを受け入れないでください。) –
(あなたがそれに同意しないならば、あなたはダビデの答えを落としたという事実は間違っています。 @Ken White、よく知られている回避策の存在は、自動的にそれを良い解決策にしません。以下の詳細をお読みください。私の言葉をもう偽造しようとしないでください。私は定数**に対して何も言わなかった。 –
しかし、あなたが直接抱えている問題について説明しているドキュメントがある場合、よく知られている回避策**が**解決策です。そして@ Davidの答えに対するあなたの最初のコメントは、「株式資源のポイントは、あなたがそれを単一の定数として特定することです」 - あなたが**引用した最後の言葉を読むことができますか?あなたはあなたが入力した "一定の" **あなたが(私がそれを偽っていると非難するつもりなら)あなたは見えませんか? –