Aller au menu - Aller au contenu

Icône Les ressources

Avatar
Mise à jour : 13/12/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
23 410 visites depuis 7 jours, dont 206 sur ce chapitre classé 14/786
Vous l'avez compris, le VB est essentiellement basé sur le design de l'interface utilisateur.

C'est bien beau ce que l'on fait pour le moment mais on a toujours pas vu comment ajouter une image, un son, une vidéo ... Bref c'est ce qu'on appelle une ressource, on étudie ça tout de suite.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

Qu'est-ce qu'une ressource

Une ressource en VB va contenir des données "externes". Cela peut être une image que l'on veut en arrière plan de fenêtre, un son qu'il faudra jouer pendant un jeu, ou même un chaine de caractère que l'on veut facilement modifiable.

J'appelle mon ami Wikipedia : Ressources

Pour vous résumer le tout :

Les ressources sont des données statiques (au même titre que les constantes) qui sont intégrées à l'exe ou aux DLL lors de la compilation. Donc si vous insérez toutes vos images, videos, etc ... En tant que ressources, l'utilisateur ne verra pas un dossier à rallonge avec toutes les images utilisées pendant votre programme, elles seront intégrées dans l'exe, dans les DLL pour un projet plus conséquent.

Mais attention, le système des ressources n'est pas infaillible. Si vous intégrez des informations en tant que ressources, elles pourront toujours être récupérées. Il existe des "décompilateurs" de ressources permettant de faire ressortir les ressources utilisées dans un exe.

L'utilisation de ressources est habituellement une tâche fastidieuse : compilation et intégration de ses ressources puis la récupération ... Bref les programmeurs hésitent des fois à les utiliser.

Dans notre cas ça va être un véritable jeu d'enfant d'intégrer et d'utiliser des ressources, les assistants de visual studio se chargent de tout.

Découvrons tout de suite comment cela se présente :

Les ressources dans VB 2010



Vous avez surement déjà vu l'onglet "ressources" lorsque vous vous situez dans la fenêtre de configuration de votre projet :

Image utilisateur


C'est là que l'on va se rendre pour ajouter nos ressources, les éditer etc ...

Rendez vous donc sur l'icône "My Project" dans l'explorateur de solutions puis onglet "Ressources".

Vous tombez nez à nez avec une grande zone blanche et vide, c'est ici que viendront s'ajouter nos ressources. Vous êtes actuellement sur le tableau des strings. Ce sont les ressources de type chaînes de caractères, vous pourrez stocker les chaînes de connection à la BDD lorsque nous y serons ou simplement des titres, des noms, etc ...

Utilisez la petite flèche à côté de "Chaînes" pour naviguer entre les différents écrans de ressources (images, videos, ...).

Image utilisateur


Vos ressources sont bien organisées et classées.

Ajoutons nos ressources

Nous allons avoir deux grandes manières d'ajouter nos ressources.

Prenons les images comme exemple.

Vous allez pouvoir soit ajouter un fichier contenant déjà une image.
Vous vous souvenez sûrement du TP sur la navigateur web, à la fin de ce TP une partie "design" nous apprenait a utiliser les images en tant que ressources "externes", cette fois nous allons utiliser les images en "interne".

Donc placez-vous dans la fenêtre ressources dédiée aux images, cliquez sur ajouter une ressource, fichier existant.

Image utilisateur


Selectionnez ensuite l'image souhaitée.

Vous vous appercevez qu'elle s'ajoute directement et qu'un aperçu est disponible.

La seconde manière d'ajouter un fichier ressource est de le créer directement :

Image utilisateur


Rendez vous sur Nouvelle image > Le type que vous souhaitez, donnez lui un nom, pour moi ce sera "fond" et votre éditeur d'images préféré s'ouvrira (pour moi ce sera paint).

Créez un motif basique : Image utilisateur



Puis sauvegardez, vous voici avec une ressource rapidement crée.

Vous pouvez faire de même avec un fichier texte (très pratique lorsque vous voulez un fichier de configuration caché).
Attention tout de fois, avec cette méthode, il faut que l'utilisateur lance le programme avec les droits en écriture (le plus souvent administrateur) pour avoir accès à cette fonctionnalité.

Pour ce qui est des chaînes de caractères, inscrivez simplement le nom de la Clé (comme dans un fichier ini), la valeur que vous voulez lui assigner et pourquoi pas un commentaire.

Bien, vous savez maintenant ajouter vos ressources, tâchons de les récupérer.

Récupérons les maintenant

Bon, j'ai crée un nouveau programme de test, vous pouvez faire de même.

J'ai ajouté deux ressources : l'étoile et la chaine de caractères de nom APP_NOM.

Essayons de les récupérer.

Rendez-vous dans le form_load de votre application.
Pour accéder aux ressources nous n'allons pas utiliser Me en préfixe d'instruction mais My.

Je vous explique rapidement l'utilité de My car il sera exploré dans un chapitre futur donc je passe brièvement dessus.

My va permettre d'accéder dirrectement aux fonctionnalités de votre ordinateur. C'est avec My que nous accèderons a l'audio de votre PC, a ses périphériques, aux informations sur l'utilisateur actuel de l'ordinateur, etc ... Finalement c'est aussi là que nous trouverons les ressources que nous avons ajoutés précédemment.

Pour y accéder c'est plus qu'enfantin, il vous suffit d'inscrire My.Resources. pour que l'assistant vous affiche les différents noms de vos ressources. Elles sont dirrectement accessibles comme des propriétés.

Donc dans mon cas, je veux donner comme nom à ma fenêtre la valeur de la ressource APP_NOM et en image de fond l'image Fond, il me reste à écrire :

Code : VB.NET
1
2
Me.Text = My.Resources.APP_NOM
        Me.BackgroundImage = My.Resources.Fond


Et je me retrouve avec une fenêtre un peu folklorique :

Image utilisateur

Mais notre utilisation des ressources est parfaitement fonctionnelle.

Pour l'utilisation des sons et des videos nous aborderons leur utilisation ultérieurement, mais vous savez quand même les ajouter à votre projet.

Le registre

Image utilisateur


Bon, les ressources incorporées dans l'executable c'est bien beau, mais pour certains programmes il serait plus utile de placer des valeurs (comme de la configuration) dans le registre.

C'est quoi ça, le registre ?


Le registre, ou plutôt base de registre est en fait une base de données utilisée par Windows pour stocker des quantités monstres d'informations sur la configuration. C'est dans le registre que tous vos paramètres Windows sont stockés, il faut donc faire très attention lorsqu'on le manipule.

Nous allons nous en servir pour stocker nos informations de configuration.

Tout d'abord, pour accéder à votre éditeur de registre Windows, inscrivez "regedit" dans menu démarrer -> éxécuter.

Voici à quoi ressemble mon éditeur de registre :

Image utilisateur


Vous voyez qu'on se retrouve avec une arborescence semblable à des dossiers. Cependant ici les dossiers sont matérialisés par des "Clés" et les fichiers des "Valeurs".

Image utilisateur
La valeur "Path" présente dans la clé 7-Zip, les données qu'elle contient est le path de l'emplacement de ce programme dans mon ordinateur.


Donc pour notre programme nous rassemblerons toutes les valeurs de configurations dans la même clé pour organiser le tout.

Pour ce qui est des clés, la méthode sera la même qu'avec notre fichier .ini : un nom et sa valeur correspondante.
Image utilisateur

Pour enregistrer et récupérer des configurations dans le registre nous allons étudier deux méthodes :

1 - Les fonctions internes de VB



Des fonctions ont été pré implémentées dans VB.NET pour faire cela facilement, leur avantage : la rapidité et la facilité. Inconvénient : la clé dans laquelle les valeurs seront enregistré n'est pas sélectionnable, elles se situeront dans : HKEY_CURRENT_USER\Software\VB and VBA Program Settings\NomDuProgramme.
Vous pourrez ensuite choisir dans cette clé de créer des sous-clés mais vous ne pouvez pas changer de clé "principale".

Commencons par l'écriture :

Code : VB.NET
1
SaveSetting("Ressources", "Configuration", "Config1", "10")


Le premier argument permet de spécifier le nom du programme, la clé qui sera crée dans VB and VBA Program Settings. Le second paramètre permet de spécifier la section, ici j'utilise "Configuration", puis viens le nom de la valeur puis son contenu.

Ce qui nous créera la clé
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Ressources\Configuration

Avec à l'intérieur la valeur
Config1 = 10

Pour la récupérer :

Code : VB.NET
1
Valeur = GetSetting("Ressources", "Configuration", "Config1")


Les arguments correspondent à la fonction précédente.
Avec possibilité de spécifier un 4eme argument en valeur par défaut.

La suppression de clé :

Code : VB.NET
1
DeleteSetting("Ressources")


Vous pouvez spécifier en paramètre optionnels le nom de la section à supprimer et la valeur si vous ne voulez supprimer qu'une seule valeur de configuration.

2 - En utilisant les API



Une API (Application Programming Interface) est un rassemblement de fonctions ou méthodes permettant de réaliser un certain type de travail.
Ici, cette API va nous permettre de travailler sur le registre.

Passons à la seconde méthode avec plus de possibilités. Nous allons pouvoir, entre autres, spécifier dans quelle section écrire.
Au sommet de l'arborescence nous avons le choix entre 2 sections : HKEY_LOCAL_MACHINE et HKEY_CURRENT_USER.
Local machine contient tout ce qui est relatif à votre ordinateur, tandis que current user contient uniquement des données utilisables par l'utilisateur actuel.

Après tout dépend l'utilité qu'aura votre programme.

Nous allons travailler dans le namespace Microsoft.Win32, vous pouvez effectuer un Imports Microsoft.Win32 pour éviter des écritures superflues.

Commençons par créer un objet Clé dans notre programme grâce à :

Code : VB.NET
1
Dim Cle As Microsoft.Win32.RegistryKey


Il faut la placer ensuite dans la section dans laquelle nous voulons travailler, pour moi ce sera local machine.

Code : VB.NET
1
Cle = Microsoft.Win32.Registry.LocalMachine


Registry contenant la liste des clés disponibles à la racine (current_user ...)

Maintenant on peut :
  • Créer une sous-clé
  • Ouvrir une sous-clé
  • Ecrire ou lire une valeur
  • Effacer une valeur


Je vous conseille de créer au minimum une sous clé relative à votre programme pour hiérarchiser le tout.

Ce qui me donne en code pour me placer et créer HKEY_LOCAL_MACHINE\App_Ressources et y créer une Valeur1 qui est égale à 1 :

Code : VB.NET
1
2
3
Dim Cle As Microsoft.Win32.RegistryKey = Nothing
        Cle = Microsoft.Win32.Registry.LocalMachine
        Cle.CreateSubKey("App_Ressources").SetValue("Valeur1", "1")


On résume : création d'une variable clé que j'initialise à nothing (pour que le code soit un peu plus clair).
Ensuite j'attribue la clé HKEY_LOCAL_MACHINE (qui est une clé principale) a ma variable.
Si vous avez donc suivi ma variable représente le "dossier" HKEY_LOCAL_MACHINE.
De ce point, je crée une sous clé (un répertoire) et j'y insère une valeur (un fichier).

Je trouve beaucoup plus simple de se représenter la base de registre sous cette arborescence de dossiers.

En fait vous naviguez simplement au millieu de dossiers.

Récapitulatif



Je récapitule les fonctions (a utiliser sur un objet de type RegistryKey) :

Pour créer une clé (un répertoire) :

Code : VB.NET
1
CreateSubKey("App_Ressources")

L'argument représente le nom de la clé à créer

Pour se déplacer dans une clé (un répertoire):

Code : VB.NET
1
OpenSubKey("App_Ressources")

Où l'argument est le nom de la clé où se déplacer.

Pour créer une valeur (un fichier) :

Code : VB.NET
1
SetValue("Valeur1", "2")

Où le premier argument est le nom de la valeur et le second ... Sa valeur =)

Récupérer une valeur (un fichier) :

Code : VB.NET
1
GetValue("Valeur1")

Où l'argument est le nom de la valeur a retrouver, renvoie Nothing si la value n'existe pas.
Pour conclure ce chapitre, je tien à dire que même s'il est relativement court (les ressources ne sont vraiment pas difficiles à utiliser, inutile de s'y attarder), il n'est pas inintéressant.

Les ressources vont êtres très utiles pour stocker les images nécessaire au design de vos application, les chaines de caractères ou valeurs pour être facilement modifiables (même avec 50 fenêtre, les configurations sont réunies au même endroit) et autres petits sons de bienvenue.

Il est hors de question de stocker un film, une vidéo utile dans votre programme ou tout autre fichier réellement volumineux en ressource, le .exe et ses DLL augmenteront inutilement de taille, ce sera réellement désagréable d'utilisation pour l'utilisateur.

Sachez donc bien gérer vos ressources, y mettre les informations jugées necessaires, les ressources sont en effet très utiles mais elles peuvent vite devenir un gros inconvéniant.
Chapitre précédent Sommaire

Partager

4 commentaires pour "Les ressources"
Note moyenne : 3.60 / 4 (543 votes)
Pseudo Commentaire
Hors ligne Gretho # Posté le 09/11/2010 à 19:26:38
Avatar

Bonjour, j'aimerais savoir si il est possible de référencer un fichier flash.swf dans les ressources? Sinon comment faire pour le distribuer avec le programme sans avoir à le donner séparément? Merci d'avance!

Projet de MMORPG en 2D isométrique : Dawn.

Nous recrutons ici !
 
Hors ligne 0snake22 # Posté le 17/12/2010 à 17:19:17

Bonjour,
Comment sauver les ressources sous forme de dll ?
D'avance, je vous remercie.

Image utilisateur
 
Hors ligne HHppC # Posté le 10/02/2011 à 11:46:33

Que faut-il mettre après le Me. pour que l'on puisse mettre une chanson ?
Voici mon code pour l'instant
Code : VB.NET
1
Me. = My.Resource.brytneylol
Hors ligne Damien Rouchon # Posté le 26/02/2012 à 05:07:34

HHppC , je te donne une solution mais je ne suis pas sûr qu'elle soit celle que tu cherche.

My.Computer.Audio.Play(My.Resources.Machin_truc, AudioPlayMode.Background)

Voir tous les commentaires