2010-11-26 5 views
6

エラー/警告/情報用に16x16ピクセルのアイコンを表示する必要があります。残念ながら、LoadIcon(0, IDI_*)LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)は常に私にアイコンの32x32バージョンを与えます。小さなシステムアイコンを読み込む方法は?

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

アイデア?

私はDelphi 2010とTImageコンポーネントを使用しています。

+0

読み込もうとしているアイコンは16x16として利用可能ですか?アイコンが32x32のみの場合は、常に32x32になります。 –

+0

これらのアイコンは、16/32/48pxでご利用になれます –

答えて

15

このようにすると、システムの最初にロードされたアイコンがキャッシュされたバージョンになります。これは大型アイコン、通常は32x32です。あなたが指定するサイズではありません。あなたは何ができるか

はUSER32.DLLに必要なリソースのIDを見つけて、このようなものを使用している:

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

ではなく、アイコンの大きさを手に入れるためにGetSystemMetrics(SM_CXSMICON)を呼び出すためにあなたが良いだろうハードコード16、しかし、あなたはすでにそれを知っているでしょう。

user32のリソースからリソースIDを取得する場所がわからない場合や、異なるWindowsバージョン間で一定の状態を保つことが保証されている場合でも、わかりません。私の推測では、あまりにも多くのプログラムが壊れてしまうため、彼らはそうなるだろうが、それは純粋な推測に過ぎない。

+0

私はそれをやり方で動作していない理由の優れた説明をありがとう! –

+5

100:IDI_APPLICATION、101:IDI_WARNING、102:IDI_QUESTION、103:IDI_ERROR、104:IDI_INFORMATION、105:IDI_WINLOGO、106:IDI_SHIELD、これをリバースエンジニアリングするためにResourceHackerを使用 –

+0

これで動作しました。まだ別のWindowsバージョンでテストする必要がありますが、これまでのところよく見えます!ありがとう! –

関連する問題