Page 1 sur 1

Fichier ressource

Publié : jeu. 10/mars/2011 7:15
par Programmes
Bonjour à tous,
J'essaie de créer un programme qui contiendra plusieurs icones. Pour le moment, la solution que j'ai trouvé, est d'extraire avec Ressource Hacker le contenu du fichier explorer.exe (c:\windows) que j'ai sauvegardé sous C:\Icones\1.rs.
Le contenu de ce fichier est:
ICO_MYCOMPUTER ICON "Icon_1.ico"
101 ICON "Icon2.ico"
102 ICON "Icon_3.ico"
103 ICON "Icon_4.ico"
J'ai également sauvegardé toutes les icones dans ce même répertoire. Dans les options du compilateur (PB 4.51), sous l'onglet ressources, j'ai bien spécifié l'emplacement de mon fichier rs (C:\Icones\1.rs). Cependant, jj'obtient ce message d'erreur:
PORC: C:\Icones\1.rc(1):error: File not found: 'Icon_1.ico'.
PORC: C:\Icones\1.rc(3):error: File not found: 'Icon_2.ico'.
PORC: C:\Icones\1.rc(5):error: File not found: 'Icon_3.ico'
.PORC: C:\Icones\1.rc(7):error: File not found: 'Icon_4.ico'.
J'ai bien essayé en mettant les icônes dans le répertoire du compilateur, mais le résultat est le même! Pouvez-vous m'aider?
Merci.

Re: Fichier ressource

Publié : jeu. 10/mars/2011 14:11
par Programmes
Pas beaucoup de réponses...

Re: Fichier ressource

Publié : jeu. 10/mars/2011 14:12
par Warkering
Je n'ai jamais utilisé de fichier ressource, désolé. :|

Re: Fichier ressource

Publié : jeu. 10/mars/2011 14:17
par Cool Dji
Pareil, j'utilise pas les ressources...désolé.

Re: Fichier ressource

Publié : jeu. 10/mars/2011 15:00
par gnozal
Gérer des ressources en PB : http://www.purebasic.fr/english/viewtop ... 12&t=17950 par exemple.

Je n'utilise pas l'IDE de PB, et la gestion des ressources est différente dans jaPBe.
Cependant, concernant l'erreur de PORC, je pense qu'il s'agit d'un problème de chemin de fichier...
Essaie de mettre un chemin dans le fichier RC, par exemple
Test.RC a écrit :ICO_MYCOMPUTER ICON "c:\\purebasic450\\test\\Icon_1.ico"

Re: Fichier ressource

Publié : jeu. 10/mars/2011 18:25
par Programmes
Merci...Une question? On peut ajouter plusieurs icones à un exe avec jaPBe?
J'ai entendu parler de ce programme mais je ne le connais pas...Je suis sur qu'il serait interressant...

Re: Fichier ressource

Publié : ven. 11/mars/2011 8:55
par gnozal
Programmes a écrit :Merci...Une question? On peut ajouter plusieurs icones à un exe avec jaPBe?
J'ai entendu parler de ce programme mais je ne le connais pas...Je suis sur qu'il serait interressant...
Oui, jaPBe gère les ressources.
Avec PB, on peut faire plus simple avec les DataSection :

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Image_0
  #Image_1
  #Image_2
EndEnumeration
Enumeration
  #Image_Image_0
  #Image_Image_1
  #Image_Image_2
EndEnumeration
DataSection ; On peut inclure des icônes ou images ...
  Image_Image_0:
  IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\CdPlayer.ico"
  Image_Image_1:
  IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\Drive.bmp"
  Image_Image_2:
  IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\File.bmp"
EndDataSection
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 226, 80, "Icones", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    ImageGadget(#Image_0, 10, 20, 36, 36, CatchImage(#Image_Image_0, ?Image_Image_0), #PB_Image_Border)
    ImageGadget(#Image_1, 70, 30, 20, 20, CatchImage(#Image_Image_1, ?Image_Image_1), #PB_Image_Border)
    ImageGadget(#Image_2, 110, 30, 20, 21, CatchImage(#Image_Image_2, ?Image_Image_2), #PB_Image_Border)
  EndIf
EndProcedure
OpenWindow_Window_0()
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
Les ressources, c'est Windows only.

Re: Fichier ressource

Publié : ven. 11/mars/2011 11:12
par Programmes
Je viens d'avoir un gros probleme d'ordi. Je te remercie pour ta réponse, je m'empresse d'aller essayer ton code.

Re: Fichier ressource

Publié : mer. 27/avr./2011 15:44
par Anonyme2
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 !