Attention aux images !
Ce qui suit est de la plus haute importance ! (ce qui précédait aussi, d'ailleurs).
Lorsqu’on a recours dans une application VB à un fichier image (du type .bmp), par exemple, on pourrait penser qu’il suffit de poser un contrôle Image, et de définir sa propriété Picture (son contenu) en désignant l’image voulue. Malheureusement, ce n’est pas si simple. A l’exécution, il ne suffira pas en effet qu’on ait dit qu’on voulait tel fichier image dans tel contrôle. Il faudra aussi impérativement que ce fichier ait été préalablement chargé en mémoire.
Dès lors, il y a deux stratégies possibles.
on inclut directement les fichiers image dans l’application. C'est-à-dire que la propriété Picture du contrôle est réglée par défaut sur le fichier image à inclure. La conséquence est que lors de la compilation, VB repère que tel ou tel fichier image doit être inscrit dans un contrôle. Du coup, il embarquera in extenso le fichier image au sein de l'exécutable. Avantage, les graphiques feront partie à part entière de cet exécutable, et on est certain qu’ils seront présents quand on en aura besoin. Inconvénient, cela alourdit l’exécutable, parfois dans des proportions désastreuses.
Moralité, on ne doit employer cette technique commode que pour les petits fichiers images, ne pesant pas lourd en termes de mémoire. C'est d'ailleurs ce que je me suis permis de faire pour les exercices livrés à votre pâture dans ce cours.
l'autre stratégie consiste à ne pas affecter par défaut la propriété Picture des contrôles, et on utilise la fonction LoadPicture dans le code. Cette fonction a pour rôle de charger au cours de l'exécution l'image dans le contrôle, en allant chercher le fichier adéquat sur le disque dur, le CD-ROM, etc. Dès lors, l'image ne sera pas incluse dans l'exécutable. Celui-ci se contentera, lorsqu'il tombera sur cette instruction, d'aller chercher le fichier pointé par cette ligne de code.
Cette dernière technique est certes un plus difficile à mettre en oeuvre, mais c'est la seule qui assure que l'exécutable restera dans des proportions raisonnables.
Elle implique deux choses :
Premièrement, il faut écrire le code en pointant correctement sur les fichiers images qui devront être situés dans un répertoire relatif à celui de l'application. Couramment, quel que soit le répertoire de l'exécutable, on constitue par exemple un sous-répertoire "Images", dans lequel on stocke tous les fichiers images dont l'application a besoin. Le chargement des images s'accomplira via le code suivant (on suppose que le contrôle image s'appelle Tableau, et que le fichier est "VanGogh.jpg" :
Chemin = App.Path
If Right(Chemin, 1) <> "\" Then
Chemin = Chemin & "\"
Endif
Chemin = Chemin & "Images\"
Tableau.Picture = LoadPicture(Chemin & "VGogh.jpg")
Mais, et c'est le deuxième point, pour que cette affaire continue à marcher lorsque je vais distribuer mon application sur d'autres machines, il faut que je puisse être certain que les fichiers images seront bien présents dans le bon répertoire, celui que pointe l'instruction LoadPicture (en l'occurence, dans un sous répertoire "Images" de mon application. C'est entre autres à cela que sert un indispensable utilitaire, l'installateur automatique.