IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Ajouter un menu dans un formulaire

Ce support constitu un exemple d'agrémentation possible de vos formulaires et d'utilisation des fonctions de mesure de coordonnées de l'API Windows.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. Introduction

Le but de ce tutoriel est de vous fournir une astuce permettant d'inclure une barre de menu au sein d'un formulaire Access, au même titre que leurs homologues sous Visual Basic.

Image non disponible

Pour cela, nous allons utiliser des barres de menu contextuels qui seront affichées en dessous d'une étiquette qui correspondra au titre du menu.

2. Création du formulaire

Ici, il s'agit d'un formulaire tout simple, il ne sera lié à aucune donnée, il s'agit juste de montrer le principe de la barre de menu. La seule chose à faire est donc de déposer l'étiquette qui servira de titre au menu. L'exemple choisi est celui du menu Fichier.

Image non disponible

Il est possible à ce stade de donner le style de votre choix à vos étiquettes de menu. Ici, en fixant la propriété Apparence à Ciselé, une ligne 3D est affichée en dessous du texte.

Pour que le résultat soit optimal lors de la visualisation, il est primordial de désactiver le sélecteur d'enregistrement du formulaire sans quoi, le menu ne sera pas aligné sur la gauche du formulaire.

3. Création de la barre de menu

3-1. Créer une nouvelle barre

Pour créer une barre de menu personnalisée, il suffit de réaliser un clic droit dans la barre de menu Access et sélectionner Personnaliser.

Image non disponible

Une fenêtre s'ouvre et il est alors possible de créer une nouvelle barre de menu. La barre ainsi créée sera nommée MenuFichier. Son nom doit représenter son action afin de faciliter les opérations de maintenance

Image non disponible

La barre de menu MenuFichier est rajoutée en bas de la liste et il est possible désormais d'éditer ses propriétés.

Image non disponible

Le type de la barre correspond à son mode d'affichage. La valeur Fenêtre Indépendante correspond à un menu contextuel. Toutefois, il n'est pas intéressant de changer cette valeur lors de la phase de création du fait qu'une fois convertie, la barre disparaît de la liste. Pour y accéder de nouveau, il faut alors afficher les propriétés d'une autre barre, puis dans la liste déroulante figurant en haut de la page de propriété, vous devrez sélectionner MenuFichier et, enfin, la repasser en barre d'outils.

La conversion en barre de menu contextuel est donc en général réalisée une fois que l'ensemble de la barre est au point.

Dans un premier temps, il ne faut donc pas modifier ces propriétés. Vous pouvez donc fermer la fenêtre.

3-2. Personnaliser la barre

Quelque part sur l'écran, est apparue votre nouvelle barre. Elle doit normalement ressembler à quelque chose proche de ceci :

Image non disponible

En cliquant sur l'onglet Commande, de la fenêtre Personnalisation, il est possible de glisser et déposer des boutons vers votre nouvelle barre. Dans la majeure partie des cas, vous créerez un bouton personnalisé. En effet les autres boutons apparaissant dans la liste possèdent des actions prédéfinies par Access et qui pour la plupart ne sont pas très utiles. Vous remarquerez aisément qu'aucun bouton ne permet par exemple d'ouvrir le bloc-notes ou Internet Explorer (ce que malgré tout, nos boutons devront faire).

Il suffit alors de cliquer sur le bouton personnalisé et de le déposer sur votre barre.

Image non disponible

En réalisant un clic droit sur le bouton créé dans votre barre de menu, vous constaterez qu'il est possible de modifier chacune de ses propriétés. En particulier son image. Par exemple, réalisez une copie d'écran de votre menu Démarrer section Accessoires et retravailler l'image afin de ne garder que l'icône du bloc-notes. Copier ensuite l'image dans le presse-papier puis dans le menu contextuel figurant sur votre bouton, cliquez sur Coller l'image du bouton.

Image non disponible

Dans les propriétés du bouton, vous pouvez ensuite définir sa légende (ce qui sera affiché).

Image non disponible

Répétez ensuite l'action pour chaque bouton à créer.

Image non disponible

3-3. Code des boutons

Les boutons utilisés sur la barre de menu étant des boutons personnalisés, ils ne sont affectés à aucune action. Il est donc nécessaire d'écrire les traitements auxquels ils sont destinés. L'utilisation des macros étant trés restreinte, il sera bon de privilégier des fonctions écrites en VBA (langage qui offre bien plus de possibilités et de robustesse).
De plus, afin de faciliter les opérations de maintenance, il est conseillé de consacrer un module par barre (ou par groupe) de menu.

Créez un nouveau module et nommez le mduMenuFichier. Saisissez alors la fonction permettant d'ouvrir le bloc-notes :

 
Sélectionnez
Public Function LancerBlocNote()
Shell "Notepad.exe"
End Function

Répétez l'opération pour chaque bouton en écrivant le code adéquat.

3-4. Affectation du code aux boutons

Vous devez revenir à l'invite de personnalisation de votre barre d'outils (clic droit dessus puis Personnaliser). Dans les propriétés de vos boutons, vous avez peut être remarqué le champ Action. Cela correspond à l'action à effectuer lors du clic sur le bouton. C'est ici qu'il faut faire référence à vos fonctions VBA.

La syntaxe est simple :

 
Sélectionnez
=NomFonction()
Image non disponible

La barre est maintenant opérationnelle, il est désormais possible de la convertir en menu contextuel.

Image non disponible

4. Liens avec le formulaire

Il est malheureusement impossible d'utiliser le principe d'affichage des menus contextuels sur le clic droit. En effet, ici, la barre doit réagir à un clic gauche sur l'étiquette Fichier.

Il existe cependant un moyen simple d'afficher une barre de menu contextuel en VBA :

 
Sélectionnez
CommandBars("MenuFichier").ShowPopup X,Y

Où X et Y correspondent à la position en pixel où doit être affiché le menu. Mais, second souci, Access ne délivre jamais de coordonnées en pixel mais uniquement en twips. Le salut viendra des fonctions de l'API Windows qui nous permettront de récupérer ces coordonnées via quelques conversions (notamment 1 twips = 1/1440 pouces).

Voici les déclarations de l'API à placer dans un nouveau module nommé mduAPI :

 
Sélectionnez
Public Type POINTAPI
    X As Long
    Y As Long
End Type
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Puis enfin, sur l'événement Souris Appuyée (MouseDown) de l'étiquette Fichier, il suffira de placer le code suivant :

 
Sélectionnez
Private Sub lblFichier_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pt As POINTAPI
Dim NbPointParPouceX As Long, NbPointParPouceY As Long
'récupère la position de la souris
GetCursorPos pt
'Récupère le nombre de pixel par pouce
NbPointParPouceX = GetDeviceCaps(GetDC(0), 88)
NbPointParPouceY = GetDeviceCaps(GetDC(0), 90)
'Affiche la barre de menu à l'endroit souhaité
CommandBars("MenuFichier").ShowPopup pt.X - (X / (1440 / NbPointParPouceX)), pt.Y + (lblFichier.Height - Y) / (1440 / NbPointParPouceY)
End Sub

Le formulaire ressemble assez à ce que l'on pourrait attendre :

Image non disponible

5. Conclusion

Certes, le résultat n'est pas totalement conforme aux menus VB, toutefois, cela peut rendre d'énormes services dans le cas de formulaires surchargés.

Il serait aussi possible via des moyens plutôt compliqués de changer la couleur et l'aspect de l'étiquette de titre Fichier. Toutefois, ceux-ci étant peu fiables, je n'ai pas désiré pas m'étendre sur leur sujet.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2005 - 2010 WARIN Christophe. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.