Le premier site francophone dédié au développement Pocket PC


Comment créer un Menu Popup avec eVB ?
 
   

 

Une fois de plus, Visual Basic possède une fonction très utilisée que Microsoft n'a pas jugé nécessaire d'inclure à eVB. La fonction PopupMenu, qui permet d'afficher un menu flotttant.

Heureusement, si on recherche un peu dans les API, on se rend compte que les fonctions nécessaires sont présentes et surtout compatibles avec une utilisation directe en eVB.

Pour créer un menu, il faut utiliser plusieurs API :

Fonction
Utilisation
CreatePopupMenu
Crée un menu 'vide' et retourne son handle
AppendMenu Ajoute un item à un menu
TrackPopupMenuEx Affiche le menu comme un PopupMenu

 

Toutes ces API sont déclarées de la manière suivante :

Public Declare Function CreatePopupMenu Lib "coredll" () As Long
Public Declare Function AppendMenu Lib "coredll" Alias "AppendMenuW" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long
Public Declare Function TrackPopupMenuEx Lib "coredll" (ByVal hMenu As Long, ByVal un As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal hWnd As Long, lpTPMParams As Long) As Long

Il existe aussi toute une série de constantes utilisée par la fonction AppendMenu, permettant de régler divers paramètres des items du menu :

Constante
Valeur
Utilisation
MF_ENABLED &h0& L'item est actif
MF_STRING &h0& L'item est une chaine
MF_GRAYED &h1& L'item est grisé
MF_CHECKED &h8& L'item est coché
MF_UNCHECKED &h0& L'item n'est pas coché
MF_SEPARATOR &h800& L'item est un séparateur

Leurs déclarations en eVB sont les suivantes :

Private Const MF_ENABLED = &H0&
Private Const MF_STRING = &H0&
Private Const MF_GRAYED = &H1&
Private Const MF_CHECKED = &H8&
Private Const MF_UNCHECKED = &H0&
Private Const MF_SEPARATOR = &H800&

Pour terminer, il existe aussi une autre série de constantes utilisées par la fonction TrackPopupMenuEx pour aligner le cadre du popup menu par rapport aux coordonnées d'affichage.

Constante
Valeur
Utilisation
TPM_CENTERALIGN &h4& Centre le cadre du popup menu
TPM_RIGHTALIGN &h8& Aligne à droite le cadre
TPM_BOTTOMALIGN &h20& Aligne en bas
TPM_VCENTERALIGN &h10& Centre l'axe vertical
TPM_LEFTALIGN &h0& Aligne à gauche
TPM_TOPALIGN &h0& Aligne en haut
TPM_RETURNCMD &h100& Demande à la fonction de retourner la valeur de l'item sélectionné

Leurs déclarations en eVB sont les suivantes :

Private Const TPM_CENTERALIGN = &H4
Private Const TPM_RIGHTALIGN = &H8
Private Const TPM_BOTTOMALIGN = &H20
Private Const TPM_VCENTERALIGN = &H10
Private Const TPM_LEFTALIGN = &H0&
Private Const TPM_TOPALIGN = &H0&
Private Const TPM_RETURNCMD = &H100&

Pour affiche un menu popup, il faut tout d'abord le créer. Pour celà nous devons utiliser la fonction CreateMenu qui retourne un handle (un handle est un entier long qui permet d'identifier un objet sous Windows) vers un nouveau menu, vide. Il faut ensuite ajouter à ce menu vide des lignes, les items. Pour celà nous utilisons la fonction AppendMenu. Cette fonction prend comme paramètres le handle du menu père (celui retourné par la fonction CreateMenu), un entier long servant à régler l'aspect de l'item, un entier représentant le numéro de l'item dans le menu (ce numéro sera retourné par la fonction TrackPopupMenuEx), et enfin une chaine de caractères définissant le titre de l'item.

Dim hMenu As Long
Dim hMenu2 As Long
Dim NumItem as long

hMenu = CreatePopupMenu()

Call AppendMenu(hMenu, MF_ENABLED Or MF_STRING, 1, "Première Option")
Call AppendMenu(hMenu, MF_ENABLED Or MF_STRING, 2, "Seconde option")
Call AppendMenu(hMenu, MF_SEPARATOR, 0, "")
Call AppendMenu(hMenu, MF_GRAYED Or MF_STRING, 3, "Option grisée")
Call AppendMenu(hMenu, MF_ENABLED Or MF_STRING Or MF_CHECKED, 4, "Option cochée")
Call AppendMenu(hMenu, MF_GRAYED Or MF_STRING Or MF_CHECKED, 5, "Option grisée et cochée")

Une fois le menu créé et rempli, il faut l'afficher. Pour celà, il faut utiliser la fonction TrackPopupMenuEx qui demande comme paramètres le handle du menu créé précédement, un entier long permettant de régler divers aspects sur la manière d'afficher le popup menu, les coordonnées x et y d'affichage, le handle de la fenêtre d'où est affiché ce menu. Le dernier paramètre est toujours réglé à zéro.

NumItem = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN Or TPM_TOPALIGN Or TPM_RETURNCMD, intPosLeft, intPosTop, hWnd, 0)

Si vous exécutez le code de cette page, vous obtiendrez ceci :


La fonction TrackPopupMenuEx retourne le numéro de l'item sélectionné car nous avons combiné (avec un OR) la constante TPM_RETURNCMD avec les constantes d'alignement.

Voilà, vous pouvez maintenant créer des menus flottants, et les faire apparaitre où bon vous semble !

Télécharger le code de cet article

Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.