Rappel : Ce cours est enseigné dans la
spécialité PISE du Master MECI (Université Paris 7)
par Christophe Darmangeat

Partie 5
Eléments Graphiques
VB étant un langage objet, donc événementiel, il exploite l'interface Windows. Alors, autant mettre de la couleur, des images, et tout ce qui rend la vie plus agréable. Surtout que ce n'est franchement pas difficile.
1. Utiliser (bêtement) la méthode Print
Form1.Print "Coucou"
Ira écrire "Coucou" en haut à gauche de la Form. La prochaine instruction Print provoquera une écriture juste en dessous… sauf si nous avions terminé l’instruction précédente par un point-virgule. Auquel cas, la prochaine écriture s’effectuera à la suite.
Remarque : A priori, si l'utilisateur redimensionne la Form, le texte précédemment inscrit disparaîtra, ce qui peut être gênant. Il est facile d’y remédier : fixez auparavant la propriété AutoRedraw de la Form à True. Attention toutefois, cela ralentit l’application.
Autre Remarque : Print s’applique également aux contrôles PictureBox. Cela représente une alternative par rapport aux modifications de Label.Caption que nous avions utilisé jusque là.
Dernière Remarque : utiliser la méthode Print revient de fait à utiliser VB comme un bon vieux langage non graphique. Autrement dit, je ne l’ai signalée que pour le principe, il y a bien mieux à faire que se servir de ce bidule.


2. Spécifier les couleurs
Dans les exercices qui ont jalonné ce cours, nous avons croisé, sans nous y arrêter, un certain nombre de propriétés gérant la couleur des différents contrôles : ForeColor, BackColor, etc.
Ce qu’il faut savoir, lorsqu’on passe une instruction pour affecter une valeur à l’une de ces propriétés, c’est qu’il existe pas moins de trois systèmes de couleurs en Visual Basic, systèmes que vous pouvez utiliser indifféremment.
  • les huit couleurs de base, gérées par VB lui-même. Vous en trouverez la liste complète dans l’aide, ainsi que les Constantes VB qui désignent ces couleurs. Cela donnera des instructions du genre :
    Form1.BackColor = VbBlack
  • Les seize couleurs de la palette, accessibles par la fonction QBColor(i), i désignant bien entendu le code de la couleur voulue. Là aussi, il suffit d'aller voir l’aide pour obtenir la liste des couleurs disponibles. Par exemple, pour mettre la Form en vert clair (c'est immonde, mais tant pis) :
    Form1.BackColor = QbColor(10)
  • les 16 millions de couleurs du web. Là, attention, il y a deux manières de procéder. La première est celle qu'emploie spontanément VB, et elle est calquée sur le principe du code HTML : trois fois deux caractères, représentant respectivement le codage de 256 niveaux de rouge, de vert et de bleu, en hexadécimal (si vous n'avez rien compris à cette phrase, lisez celle qui suit. Si vous l'avez comprise, lisez quand même cella qui suit).
    Le problème est que VB s'amuse à bidouiller tout seul ce codage à six caractères, exigeant qu'il soit précédé par les signes "&H" et s'amusant à l'occasion à faire sauter certains des six caractères susnommés. Alors, un bon conseil, en Visual Basic, évitez comme la peste le codage HTML et utilisez à la place la fonction RGB. Celle-ci fonctionne exactement sur le même principe, mais les doses de rouge, de vert et de bleu, fournies en argument, sont spécifiées sous forme d'entiers. Ainsi, pour repeindre la Form en rouge vif, on écrira :
    Form1.Backcolor = RGB(255, 0, 0)

Nom de l'exercice
Exécutable
Sources
Mieux qu'à la TV



3. Les coordonnées
Dès que l’on va placer ou déplacer des objets graphiques, il va falloir spécifier les coordonnées. Et ce n’est pas toujours d’une simplicité biblique.
Premier point, sur lequel M. de Lapalisse, un ancien voisin à moi, ne m’aurait pas démenti : l’écran possède deux dimensions. Cette forte pensée étant posée, il reste que l’origine (le point 0, 0) se trouve en haut à gauche, et pas du tout en bas à gauche, là où tout occidental, hormis Bill Gates, l’aurait placé.
Deuxième problème : comment savoir quelles sont les dimensions de l’objet sur lequel on veut dessiner ? Là, il faut faire attention. Car si Height et Width sont, comme vous le savez, les dimensions extérieures d'un objet, dans le cas d'une Form, on peut avoir besoin de connaître les dimensions intérieures. Celles-ci nous sont alors fournies par les propriétés ScaleHeight et ScaleWidth de cette Form.
Autre aspect : on dispose de plusieurs unités de mesures possibles pour les coordonnées.
L’unité par défaut est le twip. Cette chose représente très exactement 1/567e de centimètre. Le gros avantage de cette unité, c’est qu’elle est indépendante de la résolution du périphérique utilisé. Un centimètre, c’est toujours un centimètre (nous négligerons ici les effets de la relativité, la vitesse moyenne de déplacement des écrans par rapport à celui qui les regarde étant généralement négligeable par rapport à la vitesse de la lumière).
Mais il y a aussi le pixel. L’avantage du pixel, c’est sa rapidité. Vous épargnez à Windows une conversion, puisque un pixel, c’est un point. Mais l’inconvénient, c’est que selon les résolutions d’écran, le nombre de pixels varie fortement… (le nombre de twips varie aussi selon la taille de l’écran, me direz-vous, alors perdu pour perdu…)
On modifie (ce qui n’est généralement pas indispensable) le système de mesures par la propriété ScaleMode de la Form.


4. Contrôles graphiques et images
Certains contrôles sont dédiés à l'affichage de graphiques, d'une manière ou d'une autre. Il est maintenant temps de s'y intéresser de plus près…
4.1 contrôles graphiques
On doit mentionner pour mémoire, mais vraiment uniquement pour cela :
  • le contrôle Shape, qui peut prendre des formes géométriques simples : lignes, rectangles, cercles, ellipses.
  • le contrôle Line, qui se contente de figurer une ligne.
L'utilisation de ces deux contrôles demeure cependant marginale. S'ils peuvent éventuellement servir à faire de petits schémas, ils sont incapables de produire de vrais effets graphiques. Mais surtout, ces contrôles sont très peu employés parce qu'ils ne peuvent recevoir aucun événement souris. Leur intérêt pour un programme est donc fatalement extrêmement limité.
4.2 contrôles image
La première chose à dire si l'on a besoin d'une image, c'est qu'on peut la mettre directement en fond d'une Form, via la propriété Picture. Les boutons de commande, eux aussi, possèdent cette propriété Picture, et peuvent donc servir de support à une image - à condition, je le rappelle, que leur propriété Style ait auparavant été réglée sur Graphical.
Toutefois, on peut avoir besoin d'images qui ne s'identifient pas avec une Form ou un Bouton. Dans ce cas, des contrôles adéquats sont là pour nous sauver la vie.
Ce sont des contrôles de VB, exactement comme les zones de textes, les boutons, etc., mais qui ont pour but de contenir des jolies images. Enfin, des images. Il y en a deux : le contrôle PictureBox et le contrôle Image. Voici un bref récapitulatif de leurs caractéristiques respectives :
 
 
Image
PictureBox
Taille mémoire
Faible
Importante
Contenu
exclusivement
images
images et autres contrôles
Redimensionnement
peut déformer le contenu (selon valeur de la propriété Stretch)
ne modifie pas le contenu
Traçage de graphiques durant l'exécution
impossible
possible
 
De ces trois critères, sauf cas très spécial, seuls les deux premiers sont réellement importants. Conclusion, soit on a juste besoin d'un image, et alors il faut choisir un contrôle Image. Soit on a besoin d'un conteneur incorporant d'autres choses en plus de l'image, et alors il faut choisir le PictureBox.
La propriété essentielle d'un contrôle Image est Picture, qui permet de désigner le fichier graphique qui viendra s'incruster dans le contrôle.
4.3 Méthodes graphiques
Il existe un certain nombre d’actions dites méthodes graphiques, qui ne sont pas des contrôles, mais qui sont du code qui a pour rôle de tracer des dessins sur un objet (une Form, notamment). Le dessin s’effectue donc au cours de l’exécution du programme. Donc, cela gagne de l’occupation mémoire par rapport à un contrôle similaire.
Ce n’est pas que cela serve beaucoup, mais par acquit de conscience, allons-y :
  • Pset : qui permet de tracer des pixels un par un
  • Line : qui permet de tracer des lignes
  • Circle : qui dessine cercles, arcs de cercles et ellipses
Pour la syntaxe précise, je vous renvoie à l'aide, bien que je doute que tout cela vous serve fréquemment.