Réponse acceptée !
Salut
Le click-droit en lui même n'est pas difficile à gérer (grace à MenuPopup), mais la difficulté avec les ListView, c'est que lors d'un click droit, l'item situé sous la souris ne prend pas le focus. Il faut donc simuler un click gauche avant.
Voici un exemple dans une de mes applis qui consiste à faire apparaitre un menu proposant la suppression de l'item.
Si tu n'as pas besoin de sélectionner l'item avant apparition du menu, tu n'auras besoin que de la ligne qui est soulignée.
-1- Crée un module et place ce code dedans :
Option Explicit
' Module pour la gestion du click-droit dans les listes
Public Type POINTAPI
x As Long
y As Long
End Type
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Public Const MOUSEEVENTF_MOVE = &H1 ' mouse move
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20
Public Const MOUSEEVENTF_MIDDLEUP = &H40
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As Long)
Public Declare Function GetMessageExtraInfo Lib "user32" () As Long
Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0 'X Size of screen
Public Const SM_CYSCREEN = 1 'Y Size of Screen
-2- Dans le MouseDown de ta ListView :
Private Sub maListView_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim lpPoint As POINTAPI
Dim Temp As String
If Button And vbRightButton Then
' On simule un click gauche avant d'afficher le menu
Call GetCursorPos(lpPoint)
' Transforme en coordonnées absolues
lpPoint.x = lpPoint.x * (&HFFFF& / GetSystemMetrics(SM_CXSCREEN))
lpPoint.y = lpPoint.y * (&HFFFF& / GetSystemMetrics(SM_CYSCREEN))
' Place la souris sur ce point
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, _
lpPoint.x, lpPoint.y, 0, GetMessageExtraInfo()
' Mouse Down
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo()
' Mouse Up
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo()
DoEvents
Temp = lstMatières.SelectedItem.Text
' et modifie le texte du popup
mnuSupprimer.Caption = "&Supprimer '" & Temp & "'"
' Affiche le menu de proposition de suppression
PopupMenu mnuzSupprimer, vbPopupMenuRightAlign
End If
End Sub
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)