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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Position popup menu - menu contextuel


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 37
    Par défaut Position popup menu - menu contextuel
    Bonjour,

    J'ai implemente un popup menu lors d'un clic droit (right click) dans une listbox.

    J'aimerais que ce menu contextuel se place correctement sur l'element selectionne. En effet, si je selectionne un element puis que je deplace la souris dans la listbox, si je fais un clic droit, le menu apparait pres du curseur de la souris et pas sur l'element selectionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    Private Sub lstPrerequisites_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     
    On Error GoTo lstPrerequisites_MouseUp_Error
     
        ' Check if an item is selected in the listbox
        If lstPrerequisites.ListIndex >= 0 Then
            ' Check if it's a right click
            If Button = vbRightButton Then
                'Display popup menu
                PopupMenu mnuPopUp
            End If
        End If
     
        Exit Sub
     
    lstPrerequisites_MouseUp_Error:
        MsgBox "Error " & err.Number & " (" & err.Description & ") in procedure lstPrerequisites_MouseUp of Form frmImplementedFilesManagement", vbCritical
     
    End Sub
    J'ai essaye de travailler avec X et Y mais je m'y perds un peu.

    Quelqu'un peut m'aider SVP ?

    Merci d'avance

    Jeannot

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    F1 + Affichage de menus contextuelles

    te donnerras les renseignements nécessaires et en autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Command1_Click ()
       ' Dimensionnez les variables X et Y.
       Dim xloc, yloc
     
       ' Définissez les variables X et Y au centre de la feuille.
       xloc = ScaleWidth / 2
       yloc = ScaleHeight / 2
     
       ' Affichez le menu contextuel.
       PopupMenu mnuEdit, vbPopupMenuCenterAlign Or _
       vbPopupMenuRightButton, xloc, yloc
    End Sub
    A+

    Edit: Excuse-moi pour les balises, j'avais probablement la tête dans les nuages (je suis en vacances)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 37
    Par défaut
    Bonjour,

    Merci pour la réponse, mais je ne veux pas faire apparaitre le popup menu au milieu de la fenetre mais bien sur l'element selectionné dans ma listbox.

    Avec votre exemple, le curseur n'est pas sur l'element selectionné, le menu s'affiche près du curseur et pas sous l'élement de la listbox

    Merci d'avance

    Jeannot

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re-bonjour Jeannot,

    Il te faut simplement calculer comme tu l'entends xloc et yloc.

    Tu as pour ce faire tout ce qu'il te faut, me semble-t-il puisque :
    1) tu connais la valeur de Top de ta listbox
    2) tu connais la valeur de Left de ta Listbox
    3) tu connais l'index sur lequel tu cliques
    4) tu connais l'index du l'item affiché en haut de ta listbox (topindex)
    5) tu sais donc combien d'index sont affichés entre le topindex et l'index sur lequel tu cliques (simple soustraction)
    6) tu sais maintenant calculer la hauteur d'une ligne de ta listbox (tu l'as appris aujourd'hui dans ton autre post... : variable que j'ai appelée haut)
    Il te suffit donc maintenant de dire que :
    yloc = list1.top + ((index-cliqué - topindex) * haut)

    Non ?
    Allez... fais-moi ce plaisir, s'il te plait...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 37
    Par défaut
    Bonjour ucfoutu,

    Merci pour ton aide ...

    Voici le code que j'ai écrit en suivant tes reflexions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    Private Sub lstPrerequisites_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     
    Dim intHeight As Integer
    Dim intIndex As Integer
     
     
    Dim yloc, xloc
     
    On Error GoTo lstPrerequisites_MouseUp_Error
     
        If lstPrerequisites.ListCount > 0 Then
            If Button <> 2 Then Exit Sub
            Set Font = lstPrerequisites.Font
            intHeight = TextHeight("get_current_element")
            intIndex = lstPrerequisites.TopIndex + Int(Y / intHeight)
     
            If intIndex < lstPrerequisites.ListCount Then
                lstPrerequisites.Selected(intIndex) = True
            End If
     
            ' Check if an item is selected in the listbox
            If lstPrerequisites.ListIndex >= 0 Then
                ' Check if it's a right click
                If Button = vbRightButton Then
                    'Display popup menu
     
     
                    yloc = lstPrerequisites.Top + ((lstPrerequisites.ListIndex - lstPrerequisites.TopIndex) * intHeight)
     
                    PopupMenu mnuPopUp, vbPopupMenuRightButton, , yloc
                End If
            End If
        End If
     
        Exit Sub
     
    lstPrerequisites_MouseUp_Error:
        MsgBox "Error " & err.Number & " (" & err.Description & ") in procedure lstPrerequisites_MouseUp of Form frmImplementedFilesManagement", vbCritical
     
    End Sub
    Par contre, j'ai un souci quand même ... en effet, le menu s'affiche en haut de mon form, bien loin de la listbox même quand le curseur se trouve sur l'élement selectionné dans la listbox ...

    La coordonnée X que je ne précise pas dans l'appel de la fonction PopupMenu me semble correct.

    Et si je mets +9500 (arbitraire et défini après plusieurs essais), cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    yloc = lstPrerequisites.Top + ((lstPrerequisites.ListIndex - lstPrerequisites.TopIndex) * intHeight) + 9500
    Pour finir, je précise que la listbox se trouve dans une frame;
    Cette frame se trouve dans une autre frame;
    La 2e frame se trouve sur un SSTAB;
    Le SSTAB se trouve sur mon form.

    La valeur de Left de ma listbox lors de l'affichage est 0.
    Tu parles de la valeur Left, mais on ne l'utilise pas ?

    Voilà ... encore merci pour votre aide

    Jeannot

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je ne sais vraiment pas quoi te dire, Jeannot...

    Je tiens à ce que tu te casses un peu la tête (et c'est par amitié que j'y tiens, en général).

    Bon...

    Je ne vais pas écrire ton code mais presque... en simulant ta fenêtre popup par l'emploi d'une picturebox.

    Un projet : Une Form avec un Frame Frame1 dans lequel tu mets ta listbox List1

    Où tu veux (hors du cadre Frame1) une picturebox picture1

    Ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub Form_Activate()
      For i = 1 To 50
        List1.AddItem "a" & i
      Next
    End Sub
     
     
     
     
    Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
      If Button <> 2 Then Exit Sub
      Dim ou As Integer, haut As Integer
      Set Font = List1.Font
      haut = TextHeight("Alors je m'en Fiche")
      ou = List1.TopIndex + Int(Y / haut)
      Set Picture1.Container = Frame1
      DoEvents
      Picture1.Left = List1.Left
      Picture1.Top = ((ou - List1.TopIndex) * haut) + List1.Top
      If ou <= List1.ListCount - 1 Then
        List1.Selected(ou) = True
      End If
      List1.SetFocus
    End Sub
    Comme tu le vois, j'y traite, au click droit, à la fois la sélection et le positionnement de la picturebox (la totale, donc)...
    A toi de comprendre et d'adapter à ta popup, maintenant ....
    Travaille bien.
    Bon Week-end.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD12] Position d'un menu contextuel ouvert
    Par Kestumate dans le forum WinDev
    Réponses: 5
    Dernier message: 30/04/2010, 13h21
  2. Position image avant menu
    Par Skeud007 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 21/02/2008, 17h25
  3. position d'un menu
    Par tenderstoune dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 23/06/2007, 00h50
  4. position d'un menu.js dans un JSP
    Par Smix007 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/02/2007, 14h33
  5. popup sans menu
    Par rib dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/10/2006, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo