logo Pierre AULAS
Visual Basic 6 - Menus
 Parcours  |   Réalisations  |   Cours  |   Chroniques  |   Divers
Création de l'interface graphique
Définition des propriétés
Ecrire le code du programme

Les menus


Pour aujourd'hui, vous pouvez voir ce que donne la version VB2008 de l'exercice.
Pour le code vous devez connaître les deux formules magiques suivantes :

txtMenu.BackColor = Color.Magenta 'qui permet d'affecter une couleur

et

lblMenu.Font = New System.Drawing.Font("Courier New", 12, lblMenu.Font.Style, GraphicsUnit.Pixel, CType(0, Byte))
'qui permet d'affecter une police avec tous ses paramètres (nombreux, je vous l'accorde)

Le corrigé complet pour la version VB8 arrive dans les heures qui viennent.


Cet exercice permet d'apprendre à créer des menus standards (ceux situés en haut d'une fenêtre) et des menus contextuels (ceux qu'on obtient sur les PC avec le clic droit de la souris).

Cette image vous montre l'aspect de votre application une fois terminée.
Au centre du formulaire se trouvent une zone de texte et juste au-dessous une étiquette.
L'utilisateur dispose de trois menus: un menu lui permettant de choisir la couleur de fond de la zone de texte, un menu permettant de choisir la police d'affichage du texte de l'étiquette. Le dernier menu remplace notre traditionnel bouton Quitter et permet de fermer l'application.
Pour mieux comprendre comment fonctionne cette application, vous pouvez la lancer en cliquant ici.

Haut de page

1. Création des menus

Les menus sont les seuls contrôles dont la création ne passe pas par la boite à outils.
Pour créer un menu, séléctionnez Outils > Créateur de menu ou utilisez le raccourci Ctrl + E.

Si vous n'avez pas fait d'erreur, vous devriez voir s'afficher la boite de dialogue suivante:

Cette boite de dialogue est divisée en deux parties:
  - une zone supérieure qui permet de définir les propriétés de chaque menu.
  - une zone inférieure qui permet de déterminer l'organisation des menus entre eux (les menus principaux, les sous-menus, etc.).

La liste des menus que vous allez créer est la suivante:

Avant de commencer, prenez soin de bien comprendre comment ces menus fonctionnent:
  - vous avez trois menus principaux: Zone de texte, Etiquette et Quitter
  - chacun de ces menus contient des sous-menus qui fonctionnent comme des groupes de contrôles (i.e. qu'ils partagent la même propriété Name mais se distinguent par leur Index).
  - notez qu'un menu avec pour propriété caption " - " fonctionne comme un séparateur.

Objet  Propriété  Valeur
Menu1  Caption  &Zone de texte
 Name  mnuZonedetexte
Menu2  Caption  &Jaune
 Name  mnuZonedetexte_Couleur
 Index  0
 Checked  True
Menu3  Caption  &Cyan
 Name  mnuZonedetexte_Couleur
 Index  1
Menu4  Caption  &Magenta
 Name  mnuZonedetexte_Couleur
 Index  2
Menu5  Caption  &Etiquette
 Name  mnuEtiquette
Menu6  Caption  &Courier New
 Name  mnuEtiquette_Police
 Index  0
 Checked  True
Menu7  Caption  &Symbol
 Name  mnuEtiquette_Police
 Index  1
Menu8  Caption  &Times New Roman
 Name  mnuEtiquette_Police
 Index  2
Menu9  Caption  -
 Name  mnuEtiquette_Police
 Index  3
Menu10  Caption  &Souligné
 Name  mnuEtiquette_Police
 Index  4

Pour organiser les menus en menu principaux et sous-menus, utilisez les flèches situées en bas de la boîte de dialogue. Les menus principaux sont situés le plus à gauche de la zone de liste, les sous-menus sont précédés de "..." et suivent immédiatement le menu principal dont ils dépendent.
En théorie vous pouvez emboîter jusqu'à quatre niveaux de menus. En pratique il est déconseillé d'aller au-delà de deux afin de conserver une navigation aisée.

Outre les propriétés énumérées dans le tableau ci-dessus, vous pouvez utiliser la propriété ShortCut qui permet de définir un raccourci clavier du type Ctrl + E. Lorsque vous définissez un raccourci, celui-ci est affiché dans le menu à droite du Caption.

La propriété WindowList permet, dans le cadre d'un formulaire MDI, d'afficher la liste des formulaires ouverts (un peu comme dans Words vous disposez d'un menu qui vous indique les différents documents ouverts en même temps et vous permet de circuler entre eux).

2. Définition des propriétés

Il vous reste à définir les propriétés des deux contrôles zone de texte et étiquette.

Objet  Propriété  Valeur
Form1  Name  frm01
 Caption  Exercice - Menus
Text1  Name  txtMenu
 Alignment  2 - Center
 Multiline  True
Label1  Name  lblMenu
 Alignment 2 - Center
 BorderStyle 1 - Fixed Single

Votre formulaire devrait désormais ressembler à cela:

Il ne reste plus qu'à créer les procédures événementielles destinées à interagir avec l'utilisateur.
N'oubliez pas que vous pouvez tester l'application ici.

Haut de page

3. Ecrire le code du programme

3.1 Le menu Quitter

Le plus simple est commencer par le traditionnel bouton Quitter qui s'est ici transformer en menu.

Pour accéder à la procédure événementielle qui réagit au Clic de l'utilisateur sur un menu, il suffit de séléctionner celui-ci dans l'interface graphique. Automatiquement vous êtes basculé sur la fenêtre de code avec le script suivant:

Private Sub mnuQuitter_Click()
  
End Sub

Si vous allez voir dans le menu déroulant situé en haut à droite de la fenêtre de code, vous constatez que les menus ne disposent que d'un seul événément: Click.
Il ne vous reste plus qu'à ajouter le traditionnel Unload Me ou End.
Vous pouvez tester que votre premier menu fonctionne en utilisant le raccourci F5.

3.2 Définition des propriétés de la zone de texte et de l'étiquette au démarrage

Il vous reste ensuite à donner aux textes de la zone de texte et de l'étiquette un contenu et une apparence conforme aux menus séléctionnés par défaut (fond jaune (vbYellow) pour la zone de texte, police Courier New pour l'étiquette.

Dans le corrigé de l'exercice, nous avons choisi d'affecter les chaines suivantes:
  - dans la zone de texte: "Zone de texte: la couleur de fond peut être modifiée."
  - dans l'étiquette: "Le style et la police sont variables."

Rappel:
pour définir les propriétés couleur de fond, police et style, vous pouvez accéder à ces propriétés de la manière suivante:

txtMenu.BackColor = vbYellow
lblMenu.Font.Name = "Courier New"
lblMenu.Font.UnderLine = False

Si vous avez correctement définies les propriétés au démarrage de votre application (événément Form_Load), vous devriez obtenir un formulaire avec l'allure suivante:

Vos menus doivent avoir une apparence proche de cela:

    

3.3 Les sous-menus mnuZonedetexte_Couleur

Il vous reste ensuite à gérer l'événement Click pour les trois options (jaune, cyan et magenta) du menu Zone de texte.
N'oubliez pas que ces trois sous-menus appartiennent à un groupe de contrôles: la procédure événementielle vous renvoie donc un paramètre Index vous indiquant le numéro d'index du bouton qui a été cliqué.

Sachez que VB fournit des constantes couleurs (comme le blue, yellow, red, green de html). Pour l'exercice vous avez besoin de: vbYellow, vbCyan, vbMagenta.

Une fois cette étape réalisée pensez à faire en sorte que seul le nouveau menu séléctionné par l'utilisateur voit sa propriété Checked définie à True.

3.4 Les sous-menus mnuEtiquette_Police

Le principe est le même que pour les sous-menus mnuZonedetexte_Couleur. Faites seulement attention au fait que trois sous-menus qui permettent de séléctionner la police et un qui permet de séléctionner le style Souligné ou non.

Pour le style Underline qui est défini par un booléen, la syntaxe suivante permet d'inverser facilement le style:

lblMenu.Font.Underline = Not lblMenu.Font.Underline

Vous pouvez procéder de la même manière pour sa propriété Checked:

mnuEtiquette_Police(4).Checked = Not mnuEtiquette_Police(4).Checked

Haut de page

3.5 Utiliser les sous-menus comme des menus contextuels

Lorsque l'utilisateur fait un clic droit soit sur la zone de texte, soit sur l'étiquette, on peut faire apparaitre un menu contextuel comme le montre l'image suivante:

    

Ces menus contextuels peuvent être appelés dans la procédure événementielle MouseUp des deux contrôles.
Attention: pour distinguer un clic gauche, d'un clic droit sur un événement MouseUp, vous devez tester si le paramètre Button renvoyé par la procédure événementielle vaut vbRightButton ou non.

Exemple:

Private Sub txtMenu_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = vbRightButton Then
    instructions
  End If
End Sub

Le menu contextuel peut alors être appelé à l'aide de la méthode PopUpMenu dont la syntaxe est la suivante:

[Objet.]PopUpMenu nomMenu[, Attributs[,x [,y] ] ]

Les coordonnées x et y déterminent l'endroit où doit apparaître le menu.
On peut définir cette position à l'aide de constantes VB du genre: vbPopUpLeftAlign, vbPopUpMenuCenterAlign, vbPopUpMenuRightAlign.

Exemple:

PopUpMenu mnuZonedetexte_Couleur, vbPopUpMenuCenterAlign

Votre application est maintenant complète. Si des passages vous ont paru trop complexes:
les sources de cet exercice sont disponibles ici en faisant un clic droit "Enregistre la cible de ce lien".

Haut de page
Plan du site  |  Mentions légales  |  Crédits  |  Aide