Ce cours est visible gratuitement en ligne.

Paperback available in this course

Ce cours existe en eBook.

Got it!
Apprenez à programmer en VB .NET
Last updated on Monday, June 24, 2013
  • 4 semaines
  • Facile

Les ressources

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 n'a toujours pas vu comment ajouter une image, un son, une vidéo… Bref, ce qu'on appelle une ressource, on étudie ça tout de suite.

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 une chaîne de caractères que l'on veut facilement modifiable. Ce sont des données statiques (au même titre que les constantes) qui sont intégrées à l'exécutable 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 dans votre programme, elles seront intégrées dans l'exécutable, 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 parfois à 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 (voir figure suivante).

Onglets « Ressources »
Onglets « Ressources »

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 String. 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…), comme à la figure suivante.

Utilisez la flèche
Utilisez la flèche

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.

La première manière consiste à ajouter un fichier contenant déjà une image.
Vous vous souvenez sûrement du TP sur le navigateur web, à la fin de ce TP une partie « design » nous apprenait à 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, puis Ajouter un fichier existant… (voir figure suivante).

« Ajouter un fichier existant…»

Sélectionnez ensuite l'image souhaitée. Vous vous apercevez 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, comme à la figure suivante.

Créer un fichier directement

Rendez-vous sur Nouvelle image, sélectionnez 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 puis sauvegardez-le ; 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 toutefois avec cette méthode, il faut que l'utilisateur lance le programme avec les droits en écriture (le plus souvent administrateur) pour avoir accéder à 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éé un nouveau programme de test, vous pouvez faire de même.

J'ai ajouté deux ressources : une étoile et la chaîne 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 n'ai pas parlé du mot My mais c'est une des choses que vous allez pouvoir découvrir par vous même. My va permettre d'accéder directement aux fonctionnalités de votre ordinateur. C'est avec My que nous accéderons à l'audio de votre PC, à 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ées précédemment.

Pour toutes ces choses spécifiques, vous pouvez vous laisser guider par l'assistant (inscrivez My. et regardez la liste de possibilités). Vous allez pouvoir développer des programmes interagissant avec votre machine. Pour le moment, concentrons nous sur l'accès aux ressources.

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 directement 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 :

Me.Text = My.Resources.APP_NOM
        Me.BackgroundImage = My.Resources.Fond

Et je me retrouve avec une fenêtre un peu folklorique, comme le montre la figure suivante. Mais notre utilisation des ressources est parfaitement fonctionnelle.

Voici mon rendu

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

Le registre

Bon, les ressources incorporées dans l'exécutable, 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, écrivez regedit dans le menu Démarrer > Exécuter.

La figure suivante vous montre à quoi ressemble mon éditeur de registre.

Mon éditeur de registre
Mon éditeur de registre

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 par des Valeurs, comme le montre la figure suivante.

La valeur « Path » est présente dans la clé 7-Zip, ce qu'elle contient est le chemin de l'emplacement de ce programme dans mon ordinateur
La valeur « Path » est présente dans la clé 7-Zip, ce qu'elle contient est le chemin 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. 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ées 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 ».

Commençons par l'écriture :

SaveSetting("Ressources", "Configuration", "Config1", "10")

Le premier argument permet de spécifier le nom du programme, c'est-à-dire 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 vient le nom de la valeur, puis son contenu.

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

Avec à l'intérieur la valeur Config1 = 10. Et pour la récupérer :

Valeur = GetSetting("Ressources", "Configuration", "Config1")

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

La suppression de clé :

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 deux 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 de 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 Cle dans notre programme grâce à :

Dim Cle As Microsoft.Win32.RegistryKey

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

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é ;

  • Écrire 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, puis y créer une Valeur1 qui est égale à 1 :

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 Cle 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) à 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) :

CreateSubKey("App_Ressources")

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

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

OpenSubKey("App_Ressources")

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

Pour créer une valeur (un fichier) :

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) :

GetValue("Valeur1")

… où l'argument est le nom de la valeur à retrouver, renvoie Nothing si la valeur n'existe pas.

Pour conclure ce chapitre, je tiens à 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écessaires au design de vos applications, pour modifier facilement les chaînes de caractères ou valeurs (même avec 50 fenêtres, 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 peuvent vite devenir un gros inconvénient.

  • Les ressources nous permettent de stocker des informations que l'on souhaite réutiliser.

  • On les utilise pour stocker les icônes et les images de notre application.

  • Le registre nous permettra de sauvegarder les configurations de l'utilisateur. Attention cependant aux logiciels nettoyant le registre.

Example of certificate of achievement
Example of certificate of achievement