2010-11-26 6 views
6

J'ai besoin d'afficher des icônes de 16x16 pixels pour les erreurs/avertissements/informations. Malheureusement les deux LoadIcon(0, IDI_*) et LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED) me donnent toujours la version 32x32 de l'icône.Comment charger une petite icône du système?

Je l'ai lu ShGetStockIconInfo mais qui est disponible uniquement à partir de Vista partir et je dois encore soutenir XP.

Des idées?

J'utilise Delphi 2010 avec une composante TImage si cette matière.

+0

est l'icône que vous essayez de charger disponible en 16x16? Si l'icône est seulement 32x32, vous obtenez toujours 32x32. –

+0

ces icônes sont disponibles en 16/32/48px –

Répondre

15

Le problème est que lorsque vous le faites de cette façon, vous obtenez une version en cache de l'icône, le premier qui a chargé le système. Ce sera l'icône de grande taille, généralement 32x32. Peu importe la taille que vous spécifiez.

Ce que vous pouvez faire est de trouver l'ID de la ressource désirée dans user32.dll et utiliser quelque chose comme ceci:

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

Vous seriez mieux d'appeler GetSystemMetrics(SM_CXSMICON) pour mettre la main sur la taille des icônes plutôt que de code dur 16, mais vous le savez probablement déjà.

Je ne suis pas sûr où vous obtenez les ID de ressource à partir des ressources en user32, ou même si elles est une garantie qu'ils resteront constantes dans les différentes versions de Windows. Je suppose qu'ils le feront parce qu'il y aura trop de programmes, mais ce n'est que pure conjecture.

+0

Merci pour l'excellente explication de pourquoi il ne fonctionne pas comme je le fais! –

+5

100: IDI_APPLICATION, 101: IDI_WARNING, 102: IDI_QUESTION, 103: IDI_ERROR, 104: IDI_INFORMATION, 105: IDI_WINLOGO, 106: IDI_SHIELD, ont utilisé ResourceHacker pour le désosser –

+0

Vous avez réussi à le faire maintenant. Encore besoin de tester sur différentes versions de Windows mais en regardant bien jusqu'à présent! Merci! –

Questions connexes