Ce chapitre fourre-tout a pour but de faire un tour relativement complet des propriétés et des événements les plus utiles pour les différents objets. Bien entendu, vous avez déjà eu l’occasion de croiser un certain nombre de ces choses, mais là, vous allez repartir avec de quoi faire votre petit marché en toute quiétude.
1. Deux objets de curiosite
1.1 Un contrôle particulier : le Timer
Il s’agit du petit chronomètre situé dans la barre de contrôles. Ce contrôle joue un rôle fondamental et indispensable : c’est lui qui va permettre d’effectuer des traitements, à intervalles fixés d'avance, indépendamment des actions effectuées par l’utilisateur.
Jusqu’à présent, en effet, le code ne s’exécutait (si l’on met de côté le Form_Load et une éventuelle procédure principale située dans un module) qu’au cas où l’utilisateur faisait quelque chose : saisie au clavier, mouvement ou clic de souris, etc. Or, on peut tout à fait avoir besoin, dans certaines applications, que le code se mette en route, même si l’utilisateur ne fait rien du tout.
Le contrôle Timer, graphiquement toujours invisible, va générer des événements, des "tops", à une cadence choisie par le programmeur, qui déclencheront la procédure NomDuTimer_Timer(). Le programmeur pourra donc mettre dans cette procédure tout ce qui doit se passer indépendamment de ce que fera – ou ne fera pas - l’utilisateur.
Un Timer est très utile dans certains jeux, soit qu’on ait besoin de chronométrer quelque chose, soit qu’on ait besoin de provoquer certains événements à intervalles réguliers (un déplacement d’un bidule, la survenue d’un événement du jeu tiré au hasard, etc.)
La propriété essentielle d'un Timer est Interval. C'est elle qui fixe l'intervalle entre chaque top, exprimé en millisecondes).
Nom de l'exercice Exécutable Sources
Compte Harbour
1.2 L'objet "Application" : App
Ce jour est à marquer d'une pierre blanche, car voici notre première rencontre avec un objet qui n'est pas un contrôle, et qui ne possède donc aucune existence sous forme de représentation graphique. Loin des yeux, mais pas loin du cœur, voici l'objet App, qui n'est autre que l'ensemble de votre application elle-même, en personne. App, comme tout objet, possède un certain nombre de propriétés. L’une d’entre elles est particulièrement utile : il s'agit de la propriété Path, accessible uniquement en lecture, et qui indique quel est le chemin d’accès de l'exécutable.
Ceci se révèle particulièrement utile quand on a besoin d'aller chercher d'autres documents (fichiers textes, images à charger, etc.) dans une application. On ne sait jamais a priori comment s'appelle le répertoire dans lequel votre application a été installée sur d'autres machines que la vôtre. Grâce à l'objet App, et à sa propriété Path, on va donc pouvoir récupérer l'emplacement de l'exécutable, et de là, pointer le chemin conduisant au fichier que l'on veut manipuler.
Donc, en résumé, on peut utiliser cette propriété pour désigner un fichier par référence relative au répertoire dans lequel a été installé l'application, quel que soit le répertoire en question.
Admettons par exemple que vous ayez besoin d'aller désigner un fichier au cours d'un programme, parmi une dizaine disponibles (genre mois01.txt, mois02.txt, etc.). Vous mettez donc le nom du fichier à aller chercher dans une variable nommée Fic. Mais comment préciser à l'ordinateur le chemin menant à ce fichier ? Ce chemin sera a priori différent selon la manière dont votre application aura été installée sur chaque machine. La parade consistera donc :
à obliger l'application à installer la série des fichiers txt toujours au même endroit par rapport à l'exécutable (on supposera ici qu'ils sont dans un sous-répertoire nommé Files). On verra plus loin comment réaliser cette prouesse.
à désigner dans le code le chemin du fichier en récupérant celui de l'exécutable, et en pointant ensuite le sous répertoire Files.
Illustration :
' La variable Fic stocke le nom du fichier à ouvrir
Chemin = App.Path
If Right(Chemin, 1) <> "\" Then
Chemin = Chemin & "\"
EndIf
Complet = Chemin & Fic
MsgBox "L'emplacement complet est : " & Complet