La base de registres est un outil indispensable du moins très pratique pour tout logiciel un peu avancé. Elle permet de stocker des informations qui seront utilisées par le logiciel en temps voulu : préférences personnelles, fichiers ouverts dernièrement, etc.
La base de registres est en fait un fichier stocké par Windows dans lequel sont enregistrées toutes les spécificités des types de fichiers, des programmes, du matériel, des utilisateurs, etc... Pour y accéder, on utilise l'éditeur de registres exécutable par la commande Démarrer/Exécuter en tapant REGEDIT. Elle est illustrée par l'éditeur comme une arborescence de clés (représentées par un dossier), de valeurs (représentées par des icônes de fichiers : Chaîne, Binaire, DWord) et des données, qui sont contenues dans les valeurs.
Sur cette illustration, par exemple, la valeur "Last Username" est stockée dans la clé "Identities" Elle-même dans "HKEY_CURRENT_USER" a pour donnée une chaîne (icône "ab") "Identité principale".
Les données stockées par une application VB à l'aide des commandes de bases d'accès au registre (sans appel d'API) sont elles stockées dans :
HKEY_CURRENT_USER/SOFTWARE/ VB AND VBA PROGRAM SETTINGS/MONAPP/
où MONAPP est le nom du programme (défini dans Projet/Propriétés de ...)Prenons l'exemple d'un traitement de texte comme Word qui veut stocker dans la base de registres une donnée "Affichage" permettant de déterminer au démarrage si la barre d'outils doît être affichée ou pas. On stockera "1" si oui et "0" si non.
Ceci se fera dans une boîte de dialogue "Options" du programme. Nous allons simplifier en n'utilisant qu'une feuille. Sur la feuille Form1, placez les contrôles suivants :
Contrôle Propriété Valeur Command1 Caption Remise à zéro Command2 Caption Fermer Command2 Default True Check1 Caption Afficher la barre d'outils ToolBar1 Name tb ToolBar1 BorderStyle ccFixedSingle
Pour utiliser une barre d'outils, il faut l'ajouter (c'est un composant). Allez dans Projet/Composants (Ctrl+T) et cochez "Microsoft Windows Common Controls 5.0 (ou 6.0) puis validez. Le bouton à gauche apparaît alors.
Pour ajouter des boutons à la barre d'outils, cliquez sur la propriété (Personnalisé) et cliquez sur
. Dans l'onglet Boutons, cliquez plusieurs fois sur Ajouter un bouton. Vous pouvez tester les possibilités de paramétrage (images, texte, tooltiptext, etc.).
Le code pour le bouton Fermer (Command1) est bien sûr Unload Me,
L'enregistrement de la donnée affichage de la barre d'outils se fera au clic sur la case à cocher.
La variable chaîne sera stockée dans le chemin suivant (On appelera notre Projet "Projet1") :
HKEY_CURRENT_USER/Software/VB And VBA Program Settings/Projet1La commande SaveSetting effectue la sauvegarde. Elle accède directement à "HKEY_CURRENT_USER/Software/VB And VBA Program Settings/Projet 1/" et on ne doit préciser que les autres sous-répertoires :
SaveSetting App.Title, "Toolbar", "Affichage"...
App.Title = Projet1 (renvoyant le nom du projet). Le chemin complet sera alors :
HKEY_CURRENT_USER/Software/VB And VBA Program Settings/Projet1/Toolbar/AffichageLors d'un clic sur la case à cocher, il faudra tester si la valeur de la case (Check1.value) est "cochée"=1 ou "vide"=0. on utilise pour cela une structure conditionnelle :
Private Sub Check1_Click()
If Check1.Value = 1 Then
'la barre d'outils est affichée, stocker "1"
SaveSetting App.Title, "Toolbar", "Affichage", "1"
Else
'la barre d'outils n'est pas affichée, stocker "0"
SaveSetting App.Title, "Toolbar", "Affichage", "0"
End If
End SubUne fois ceci effectué, il faut ajouter une procédure au démarrage du programme qui affichera ou masquera la barre d'outils en fonction de ce qui est stocké dans la base de registres. On utilise pour cela l'instruction GetSetting et on stockera le contenu de la base de registres dans une variable non déclarée TBaff :
TBAff = GetSetting(App.Title, "Toolbar", "Affichage", "1")
"1" est la valeur par défaut si une erreur de lecture survient avec GetSetting. On affiche dons la barre d'outils par défaut. On teste ensuite la valeur de TBAff avec une structure conditionnelle :
If TBAff = "1" Then
tb.Visible = True
Else
tb.Visible = False
End IfLa barre d'outils ast appelée TB. Le code total sera en conclusion :
Private Sub Form_Load()
TBAff = GetSetting(App.Title, "Toolbar", "Affichage", "1")
If TBAff = "1" Then
tb.Visible = True
Else
tb.Visible = False
End If
End SubAmélioration : ajoutant le code suivant au second bouton (remise à zéro) qui efface la valeur créée dans la base de registres :
DeleteSetting App.Title, "Toolbar", "Affichage"
Remarque essentielle pour les versions non anglophones de Visual Basic :
Un bug concernant les variables booléennes (True/False) fait que si l'on veut stocker une valeur booléenne dans la base de registre en mode de débogage (i.e : programme non compilé), la valeur stockée sera "Vrai" ou "Faux" et non "True" ou "False". Ceci génère des erreurs lors de la lecture, le "Vrai"/"Faux" n'étant pas reconnus comme des valeurs booléennes. Le problème est réglé une fois le programme compilé. C'est difficile à détecter puisque parfois on lance le programme en débogage et tout fonctionne bien avec les valeurs Vrai/Faux reconnues par l'interpréteur de commandes, puis plante une fois le tout compilé car le programme compilé ne comprend pas Vrai/Faux.
Le bug est présent dans les version 5 et 6 au moins. Pour le contourner, je vous conseille d'utiliser des 1 et 0 à la place des vrai et faux.