Voila comment je pratique pour PureIconManager ou l'ensemble des images et icônes de l'interface sont inclues dans un fichier ressource . rc (et pas rs), le 2ème fichier ressource contient l'ensemble des chaines pour les langues et mes codes d'erreurs etc.
Voilà le fichier ressource avec mes images et icônes (il y a d'autres choses à la fin mais je l'ai laissé tel quel) :
#include "resource.h"
#define folder_explorer 0
#define Extraire 1
#define Convertir 2
#define supprimer 3
#define Favoris 4
#define Tools 5
#define Aide 6
#define Apropos 7
#define Quit 8
#define AproposDe 10
#define Icone_vierge 20
#define FlecheUp 21
#define FlecheDown 22
#define Icone_Compression_Vista 23
#define Sphere_Jaune 24
#define Sphere_Bleue2_16_16_XP 25
#define Empy_dll 40
#define IID_IStorage 41
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
// Les images PNG de la barre d'outils
folder_explorer RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Folder ouvrir.png"
Extraire RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Enregistrer_sous.png"
Convertir RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Convertir.png"
supprimer RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Supprimer_32_32.png"
Favoris RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Favoris.png"
Tools RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Tools.png"
Aide RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Aide.png"
Apropos RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\logo_PB.png"
Quit RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\exit_32x32.png"
AproposDe RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\PureIconManger_Normal.png"
// Les icônes
Icone_vierge RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Icone_vierge.ico"
FlecheUp RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\ArrowUp.ico"
FlecheDown RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\ArrowDown.ico"
Icone_Compression_Vista RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Compression_Vista.ico"
Sphere_Jaune RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\croix_rouge_16_16_256.ico"
Sphere_Bleue2_16_16_XP RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\Sphere_Bleue2_16_16_XP.ico"
// la dll vide
Empy_dll RCDATA "E:\\PureBasic\\Projets\\Editeur d icones\\PureIconManager\\PIM_1_0\\Icone_barre_outils\\EmptyDll.pak"
// Définition des GUID
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IID_IStorage RCDATA
{
11L, 0L, 192L, 1174405120L
// équivalent à DefineGUID(IID_IStorage, $0000000B, $0000, $0000, $C0, $00, $00, $00, $00, $00, $00, $46)
}
le fichier resource.h est un fichier texte ou je défini les constantes liées aux langues que j'utilise.
#define LANG_NEUTRAL 0
#define SUBLANG_NEUTRAL 0
#define LANG_FRENCH 12
#define SUBLANG_FRENCH 1
#define LANG_ENGLISH 9
#define SUBLANG_ENGLISH_UK 2
#define LOCALE_USER_DEFAULT 1024
Les icônes mais aussi pour les images ont une constante propre qui permet de les sélectionner, elles sont définies par les lignes
#define
par exemple
#define FlecheUp 21
défini la constante 21 pour l'icône FlecheUp
La même chose en PB, les déclarations :
Code : Tout sélectionner
;- icônes en RC_DATA
Enumeration 20
#Icone_vierge
#Fleche_Up
#Fleche_Down
#Icone_Compression_Vista
#Sphere_Jaune
#Sphere_Bleue2_16_16_XP
#EmptyDll = 40
#IID_IStorage
#ICL_NE_Defaut
EndEnumeration
et aussi les constantes des ressources (valeur microsoft à ne pas changer)
Code : Tout sélectionner
Enumeration ; ResourceType, WinUser.h
#RT_CURSOR = 1
#RT_BITMAP = 2
#RT_ICON = 3
#RT_MENU = 4
#RT_DIALOG = 5
#RT_STRING = 6
#RT_FONTDIR = 7
#RT_FONT = 8
#RT_ACCELERATOR = 9
#RT_RCDATA = 10
#RT_MESSAGETABLE = 11
#RT_GROUP_CURSOR = 12
#RT_GROUP_ICON = 14
#RT_VERSION = 16
#RT_DLGINCLUDE = 17
#RT_PLUGPLAY = 19
#RT_VXD = 20
#RT_ANICURSOR = 21
#RT_ANIICON = 22
#RT_HTML = 23
#RT_MANIFEST = 24
EndEnumeration
Maintenant voilà l'appel des ressources pour créer les images :
2 procédures :
Code : Tout sélectionner
Procedure.i Get_RC_DATA_Adress(id)
;///////////////////////////////////////////////////////////////////////////////////////////////////
;//
;// FONCTION: Get_RC_DATA_Adress()
;//
;// BUT: Retourne l'adresse de la ressource RC_DATA de l'id passé en paramètre
;//
;// PARAMS: id - identifiant statique de la ressource RC_DATA
;//
;// RETOURNE: le handle de l'image
;// Retourne #Return_Error en cas d'error
;//
;///////////////////////////////////////////////////////////////////////////////////////////////////
;// mémorise le handle du bloc d'informations du groupe d'icônes
Protected Find_Resource
;// mémorise le handle du bloc d'information des données de la ressource string
Protected LoadResource_RT_RCDATA
;// mémorise l'adresse mémoire du block d'informations de la ressource chargée en mémoire
Protected *LockResource
;// mémorise la taille des données de la ressource RT_String pour la langue choisie
Protected SizeofResource
Find_Resource = FindResourceEx_(hInstance, #RT_RCDATA, MAKEINTRESOURCE(id), MAKELANGID(#LANG_NEUTRAL, #SUBLANG_NEUTRAL))
If Find_Resource = #Return_Error
ProcedureReturn #Return_Error
EndIf
LoadResource_RT_RCDATA = LoadResource_(hInstance, Find_Resource)
If LoadResource_RT_RCDATA = #Return_Error
ProcedureReturn #Return_Error
EndIf
*LockResource = LockResource_(LoadResource_RT_RCDATA)
If *LockResource = #Return_Error
ProcedureReturn #Return_Error
EndIf
ProcedureReturn *LockResource
EndProcedure
Procedure.i CatchImageEx(img_static_id)
;///////////////////////////////////////////////////////////////////////////////////////////////////
;//
;// FONCTION: CatchImageEx()
;//
;// BUT: charger une image depuis la resource RT_RCDATA
;//
;// PARAMS: img_static_id - identifiant statique de l'image, utilisé pour repérer la resource
;//
;// RETOURNE: le handle de l'image
;//
;///////////////////////////////////////////////////////////////////////////////////////////////////
;// mémorise l'adresse de la ressource
Protected *memory
*memory = Get_RC_DATA_Adress(img_static_id)
If *memory <> #Return_Error
CatchImage(img_static_id, *memory)
EndIf
EndProcedure
et voilà comment je charge mes images/icônes :
pour les PNG
Code : Tout sélectionner
UsePNGImageDecoder()
CatchImageEX(#folder_explorer)
CatchImageEX(#Enregistrer)
CatchImageEX(#Convertir)
CatchImageEX(#supprimer)
CatchImageEX(#Favoris)
CatchImageEX(#Tools)
CatchImageEX(#Aide)
CatchImageEX(#Apropos)
CatchImageEX(#Quit)
pour les icônes :
Code : Tout sélectionner
;// charge les 2 icônes flèches bleues
CatchImageEX(#Fleche_Up)
CatchImageEX(#Fleche_Down)
CatchImageEX(#Icone_vierge)
et pour finir la constante
#Return_Error
vaut 0 mais tu peux modifier
Et toujours toujours toujours tester que l'image a bien été créé avec Isimage() qui va bien !