9

エラー/警告/情報のために16x16ピクセルのアイコンを表示する必要があります。残念ながら、両方ともLoadIcon(0, IDI_*)常にLoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)32x32バージョンのアイコンを教えてくれます。

読んShGetStockIconInfoだことがありますが、それはVista以降でのみ利用可能であり、XPをサポートする必要があります。

何か案は?

TImageそれが重要な場合は、コンポーネントでDelphi2010を使用しています。

4

1 に答える 1

17

問題は、この方法でこれを行うと、システムが最初にロードしたアイコンのキャッシュバージョンを取得することです。これは大きなサイズのアイコンで、通常は32x32です。指定するサイズは重要ではありません。

あなたができることは、user32.dllで目的のリソースのIDを見つけて、次のようなものを使用することです。

LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON,
    16, 16, LR_DEFAULTCOLOR);

GetSystemMetrics(SM_CXSMICON)ハードコード16を使用するよりも、アイコンサイズを取得するために呼び出す方がよいでしょうが、おそらくすでにそれを知っています。

user32のリソースのリソースIDをどこから取得するか、またはそれらが異なるWindowsバージョン間で一定に保たれることが保証されている場合でもわかりません。私の推測では、あまりにも多くのプログラムが壊れてしまうので、そうなると思いますが、それは単なる推測です。

于 2010-11-26T15:40:00.597 に答える