Code

Signaler
Messages postés
22
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
22 janvier 2010
-
Messages postés
22
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
22 janvier 2010
-
je voudrais faire un menu en vb 6.0 mais je voudrais que se menu glisse de la marge gauche de la form MDI jusqu'au milieu de la form


merci

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Non, il existe bien un code permettant de déplacer un item de menu vers la droite, mais il n'existe pas de constante équivalente pour le centrage.

Si tu veux tester, place ce code dans un module judicieusement appelé "modMenuDroite.bas" et appelle la fonction depuis ta forme comme ceci :
    Call Menu_Droite(Me.mnuzHelp)
Ici, mon l'item "Aide" de mon menu se retrouve à droite de la forme.

Module :
Option Explicit
'-------------
' Déclarations nécessaires pour le passage d'un des Menus à droite de la forme
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
' Dans les deux fonctions qui suivent :
' Si ItemPosition = True  : uItem désigne la position de l'item.
'                   False : uItem désigne l'identifier
Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" ( _
                            ByVal hMenu As Long, _
                            ByVal uItem As Long, _
                            ByVal itemPosition As Boolean, _
                            lpMenuItemInfo As MENUITEMINFO) As Long
Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" ( _
                            ByVal hMenu As Long, _
                            ByVal uItem As Long, _
                            ByVal itemPosition As Boolean, _
                            lpcMenuItemInfo As MENUITEMINFO) As Long



Private Const MIIM_TYPE         As Long = &H10
Private Const MIIM_STRING       As Long = &H40
Private Const MFT_RIGHTJUSTIFY  As Long = &H4000
Private Const MFT_STRING        As Long = &H0



Private Type MENUITEMINFO
    cbSize          As Long
    fMask           As Long
    fType           As Long
    fState          As Long
    wID             As Long
    hSubMenu        As Long
    hbmpChecked     As Long
    hbmpUnchecked   As Long
    dwItemData      As Long
    dwTypeData      As String
    cch             As Long
End Type
'



Public Sub Menu_Droite(ByRef Menu As Control)
    ' Menu est ici l'Item de type menu à placer sur la droite
    Dim MnuInfo As MENUITEMINFO
    Dim hWnd As Long
    Dim Ret As Long
    Dim No As Integer
   
    ' Récupère le handle du menu à partir du handle de la forme (parent)
    hWnd = GetMenu(Menu.Parent.hWnd)
   
    Ret = 1
    No = 0  ' No d'ordre du menu
    Do While Ret = 1    ' Scrute tous les menus de la forme
        ' Prépare la variable et récupère ces caractéristiques
        ' -1- Fait un 1er appel pour connaitre la longueur du texte (cch)
        MnuInfo.dwTypeData = vbNullChar
        MnuInfo.cch = 0
        MnuInfo.fMask = MIIM_TYPE
        MnuInfo.fType = MIIM_STRING
        MnuInfo.cbSize = Len(MnuInfo)
        Ret = GetMenuItemInfo(hWnd, No, True, MnuInfo)        If Ret 0 Or MnuInfo.cch 0 Then Exit Do
       
        ' -2- Refait la même demande en ayant préparé un buffer
        '     d'une longueur de cch + 1 (pour le vbNull)
        MnuInfo.cch = MnuInfo.cch + 1
        MnuInfo.dwTypeData = String(MnuInfo.cch, " ")
        MnuInfo.fMask = MIIM_TYPE
        MnuInfo.fType = &H40
        MnuInfo.cbSize = Len(MnuInfo)
        Ret = GetMenuItemInfo(hWnd, No, True, MnuInfo)
        If Ret = 0 Then Exit Do
       
        '-3- Compare avec le Menu que l'on cherche
        If MnuInfo.dwTypeData = (Menu.Caption & vbNullChar) Then
            ' Modifie les données et les ré-écrit
            MnuInfo.fType = MFT_RIGHTJUSTIFY Or MFT_STRING
            MnuInfo.cbSize = Len(MnuInfo)
            Ret = SetMenuItemInfo(hWnd, No, True, MnuInfo)
            ' Met à jour l'affichage
            Ret = DrawMenuBar(Menu.Parent.hWnd)
            Exit Do
        End If
        No = No + 1
        DoEvents
    Loop



End Sub


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés





<hr />

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
PS : La prochaine fois, ne poste pas deux questions sur le même sujet, ça ne sert à rien.
Applique toi à mettre un titre à tes question : "Aide" ou "Code" n'inciteront pas les membres à lire ton message.
Messages postés
22
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
22 janvier 2010

merci pour les conseils