*?!$... de ressources

Signaler
Messages postés
154
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
2 octobre 2009
-
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
-
'Lu à tous.

J'ai un problème avec les ressources.

Je voudrais compiler quelques icones avec mon éxécutable, afin de pouvoir les réutiliser lors de l'éxécution, mais ça ne marche pas.

Comme je n'ai pas Visual Studio .NET, je me suis inspiré d'un exemple du SDK pour créer un fichier .resx:

....
ResXResourceWriter rsxw = new ResXResourceWriter("MonFichier.resx");
Icon MonIcon=new Icon("Fichier.ico")
rsxw.AddResource("MainIcon",MonIcon);
rsxw.Close();

Dans mon application, je mets quelque chose du style :

ResourceManager Rsrc = new ResourceManager(Assembly.GetExecutingAssembly());
MaForm.Icon=(System.Drawing.Icon)rm.GetObject("MainIcon");

Je compile le tout avec la commande (abrégée) :

csc /res:MonFichier.resx Main.cs
J'obtiens donc un fichier Main.exe, qui bien sûr plante lorsque je l'éxécute.

J'attends avec impatience vos solutions, ou conseils.

Merci d'avance, et bonne prog à tous

5 réponses

Messages postés
9
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
6 octobre 2004

Salut !! bon dans mon cas je voulais faire la meme chose mettre plusieurs icones afin de creer un service et modifier l icone dans la bare des taches en fonction des evenements ..
tou fonctionne sauf que les icones etaient stockées a coté de l executble ... (chiant quoi)
grace a ton aide j ai peu trouve ou se cacher l icone dans le fichier et en rajouté ... (avec l aide de visual :p)

----------------------------------------------------------------------------------------------

donc si tu regarde ton fichier resx (sous visual)
l icone du prg principale se caracterisent par les lignes suivantes :

<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAB3d3d3d3d3cH+IiIh3d4dwBwAAAAAAAAAHiIiIiIiIAAcGZmZmZmgABwbm5u5u
6AAHBm5u7u74AAcG5u5u7ugABwZu7u7v6AAHBu5u7u7oAAcG7u7v7vgABwZu7u7v6AAHBu7v7v74AAcA
AAAAAAgAAHd3d3d3dwCAAQAAAAAAAAAAAACAAAAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAADAAwAA
</value>
----------------------------------------------------------------------------------------------
et dans le prg principale on retrouvera l appelle de cette maniere :

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

----------------------------------------------------------------------------------------------

donc ce que j ai fait a ete de rajouter dans le fichier resx mes icones
ex :

<data name="$this.IconBlack" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAB3d3d3d3d3cH+IiIh3d4dwBwAAAAAAAAAHiIiIiIiIAAcFVVVVVVgABwV1dXdX
eAAHBVdXd3f4AAcFdXdXd3gABwVXd3d/eAAHBXdXd3d4AAcFd3d/d/gABwVXd3d/eAAHBXd/d/f4AAcA
AAAAAAgAAHd3d3d3dwCAAQAAAAAAAAAAAACAAAAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAADAAwAA
</value>

<data name="$this.IconJaune" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAB3d3d3d3d3cH+IiIh3d4dwBwAAAAAAAAAHiIiIiIiIAAcDMzMzMzgABwOzs7s7
uAAHAzs7u7v4AAcDs7s7u7gABwM7u7u/uAAHA7s7u7u4AAcDu7u/u/gABwM7u7u/uAAHA7u/u/v4AAcA
AAAAAAgAAHd3d3d3dwCAAQAAAAAAAAAAAACAAAAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAADAAwAA
</value>

<data name="$this.IconBlue" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAB3d3d3d3d3cH+IiIh3d4dwBwAAAAAAAAAHiIiIiIiIAAcGZmZmZmgABwbm5u5u
6AAHBm5u7u74AAcG5u5u7ugABwZu7u7v6AAHBu5u7u7oAAcG7u7v7vgABwZu7u7v6AAHBu7v7v74AAcA
AAAAAAgAAHd3d3d3dwCAAQAAAAAAAAAAAACAAAAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAADAAwAA
</value>

----------------------------------------------------------------------------------------------
puis dans l initializeComponent pour recuperer ses icones (oui je l ai mis la dedans car une des variables de recup n est reconnue que la dedans ... ) j ai rajouté ca :

myIcons = new Icon[5];
myIcons[1] = ((System.Drawing.Icon)(resources.GetObject("$this.IconBlack")));//arret noir
myIcons[0] = ((System.Drawing.Icon)(resources.GetObject("$this.IconBlue")));//marche bleu
myIcons[2] = ((System.Drawing.Icon)(resources.GetObject("$this.Iconvert")));//traitement vert
myIcons[3] = ((System.Drawing.Icon)(resources.GetObject("$this.IconJaune")));//copie jaune
myIcons[4] = ((System.Drawing.Icon)(resources.GetObject("$this.IconRouge")));//rouge erreur

----------------------------------------------------------------------------------------------

voila je sais pas si j ai ete tress clair .. enfin acvec les exemples ca devrait aider .. (les icones c est moi qui les ai faites)
parcontre la modif effectué ca bloque le designer ..
si qqu un a mieu sympa de faire suivre !
Messages postés
9
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
6 octobre 2004

oups dans mon exemple resx j ai oublié les balises </data>
c est tout
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
1
Salut,

Je voulais savoir comment tu connaissais les valeurs qu'il faut mettre dans entre les balises <value></value> ???

-=[JuS]=-
Messages postés
9
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
6 octobre 2004

salut -=[JuS]=- !

alors pour se faire j ai utilisé visual studio par contre je previens c est caca ...
- j ai mis chaque icone une a une comme etant l icone pricipale du programme ...
- edité les fichier .resx (du mainprg)...
- copié les valeurs entre les balises <value></value>
et voila je me suis trouvé avec toutes mes icones ...
parcontre obligé de les garder dans un ficher separé et de les recoller a chaque modif du resx par visual sinon il ecrase tout !!

a priory c est code en object.bytearray.base64 donc il doit etre possible de faire un petit prg qui crache ca dans un txt de n importe quelle source !
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
1
En cherchant c'est aussi la méthode que j'avais fait !
Mais bon c'est vrai que c'est fastidieux à faire !!!
Alors j'ai trouvé une meilleure solution !!!

Il faut créer une ImageList et insérer tes images dedans !
C'est easy à faire avec Visual Studio, mais bon si tu ne l'as pas ...

-=[JuS]=-