Bonjour a tous,
Je voudrais créer un popup menu sur un MSFlexgrid. J'ai trouvé une
API qui est "CreatePopupMenu" avec un exemple sur le site allapi.net.
Dans l'exemple on montre comment créé le popup mais pas comment détecter
sur quelle menu on a cliqué. Comme les API c'est assez nouveau pour moi,
est ce que quelqu'un pourrait m'aider.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
François Picalausa
Hello,
Ne peux-tu pas créer ton popup menu avec les méthodes traditionnelles de VB? 1°/ Créer un nouvel élément de menu avec la propriété Visible = False. (Je le nommerai pour cet exemple mnuPopup) 2°Lors du click, afficher le menu: Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 'On affiche le menu ssi il s'agit d'un click droit If Button = vbRightButton Then Me.PopupMenu mnuPopup End If End Sub
Sinon, par API, lors de l'affichage du menu par TrackPopupMenu, tu dois avoir préalablement sousclassé la fenêtre parente (argument ByVal hwnd As Long). Ta procédure de sousclassement devrait avoir a peu près cette tête là: Dim ItemIndex As Integer Dim Flags As Integer
Select Case Msg Case WM_MENUSELECT ItemIndex = LOWORD(wParam) Flags = HIWORD(wParam)
If Flags = &HFFFF And lParam = 0 Then 'Le menu vient d'être fermé ElseIf lParam = mhMenu Then 'L'item du menu ayant l'index ItemIndex vient d'être sélectionné End If Case WM_COMMAND If lParam = 0 And HIWORD(wParam) = 0 Then 'On a clické sur le menu portant l'index LOWORD(wParam) End If
LOWORD et HIWORD sont définit comme ceci:
Public Function LOWORD(dwValue As Long) As Integer If dwValue And &H8000& Then LOWORD = dwValue Or &HFFFF0000 Else LOWORD = dwValue And &HFFFF& End If End Function
Public Function HIWORD(dwValue As Long) As Integer HIWORD = (dwValue And &HFFFF0000) &H10000 End Function
Pour différencier les messages de menus "normaux" de la form de ton menu personnalisé, tu peux créer une nouvelle classe de fenêtre de messages et employer celle ci au lieu de la form.
-- François Picalausa
"Raymond Fournier" <duracelle(Enlever-ceci)@sympatico.ca> a écrit dans le message de news:
Bonjour a tous, Je voudrais créer un popup menu sur un MSFlexgrid. J'ai trouvé une API qui est "CreatePopupMenu" avec un exemple sur le site allapi.net.
Dans l'exemple on montre comment créé le popup mais pas comment détecter sur quelle menu on a cliqué. Comme les API c'est assez nouveau pour moi, est ce que quelqu'un pourrait m'aider.
Hello,
Ne peux-tu pas créer ton popup menu avec les méthodes traditionnelles de VB?
1°/ Créer un nouvel élément de menu avec la propriété Visible = False. (Je
le nommerai pour cet exemple mnuPopup)
2°Lors du click, afficher le menu:
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As
Single, y As Single)
'On affiche le menu ssi il s'agit d'un click droit
If Button = vbRightButton Then
Me.PopupMenu mnuPopup
End If
End Sub
Sinon, par API, lors de l'affichage du menu par TrackPopupMenu, tu dois
avoir préalablement sousclassé la fenêtre parente (argument ByVal hwnd As
Long).
Ta procédure de sousclassement devrait avoir a peu près cette tête là:
Dim ItemIndex As Integer
Dim Flags As Integer
Select Case Msg
Case WM_MENUSELECT
ItemIndex = LOWORD(wParam)
Flags = HIWORD(wParam)
If Flags = &HFFFF And lParam = 0 Then
'Le menu vient d'être fermé
ElseIf lParam = mhMenu Then
'L'item du menu ayant l'index ItemIndex vient d'être
sélectionné
End If
Case WM_COMMAND
If lParam = 0 And HIWORD(wParam) = 0 Then
'On a clické sur le menu portant l'index LOWORD(wParam)
End If
LOWORD et HIWORD sont définit comme ceci:
Public Function LOWORD(dwValue As Long) As Integer
If dwValue And &H8000& Then
LOWORD = dwValue Or &HFFFF0000
Else
LOWORD = dwValue And &HFFFF&
End If
End Function
Public Function HIWORD(dwValue As Long) As Integer
HIWORD = (dwValue And &HFFFF0000) &H10000
End Function
Pour différencier les messages de menus "normaux" de la form de ton menu
personnalisé, tu peux créer une nouvelle classe de fenêtre de messages et
employer celle ci au lieu de la form.
--
François Picalausa
"Raymond Fournier" <duracelle(Enlever-ceci)@sympatico.ca> a écrit dans
le message de news: Xns95AED541EED8duracelleEnleverceci@207.35.177.135
Bonjour a tous,
Je voudrais créer un popup menu sur un MSFlexgrid. J'ai trouvé une
API qui est "CreatePopupMenu" avec un exemple sur le site allapi.net.
Dans l'exemple on montre comment créé le popup mais pas comment
détecter sur quelle menu on a cliqué. Comme les API c'est assez
nouveau pour moi, est ce que quelqu'un pourrait m'aider.
Ne peux-tu pas créer ton popup menu avec les méthodes traditionnelles de VB? 1°/ Créer un nouvel élément de menu avec la propriété Visible = False. (Je le nommerai pour cet exemple mnuPopup) 2°Lors du click, afficher le menu: Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 'On affiche le menu ssi il s'agit d'un click droit If Button = vbRightButton Then Me.PopupMenu mnuPopup End If End Sub
Sinon, par API, lors de l'affichage du menu par TrackPopupMenu, tu dois avoir préalablement sousclassé la fenêtre parente (argument ByVal hwnd As Long). Ta procédure de sousclassement devrait avoir a peu près cette tête là: Dim ItemIndex As Integer Dim Flags As Integer
Select Case Msg Case WM_MENUSELECT ItemIndex = LOWORD(wParam) Flags = HIWORD(wParam)
If Flags = &HFFFF And lParam = 0 Then 'Le menu vient d'être fermé ElseIf lParam = mhMenu Then 'L'item du menu ayant l'index ItemIndex vient d'être sélectionné End If Case WM_COMMAND If lParam = 0 And HIWORD(wParam) = 0 Then 'On a clické sur le menu portant l'index LOWORD(wParam) End If
LOWORD et HIWORD sont définit comme ceci:
Public Function LOWORD(dwValue As Long) As Integer If dwValue And &H8000& Then LOWORD = dwValue Or &HFFFF0000 Else LOWORD = dwValue And &HFFFF& End If End Function
Public Function HIWORD(dwValue As Long) As Integer HIWORD = (dwValue And &HFFFF0000) &H10000 End Function
Pour différencier les messages de menus "normaux" de la form de ton menu personnalisé, tu peux créer une nouvelle classe de fenêtre de messages et employer celle ci au lieu de la form.
-- François Picalausa
"Raymond Fournier" <duracelle(Enlever-ceci)@sympatico.ca> a écrit dans le message de news:
Bonjour a tous, Je voudrais créer un popup menu sur un MSFlexgrid. J'ai trouvé une API qui est "CreatePopupMenu" avec un exemple sur le site allapi.net.
Dans l'exemple on montre comment créé le popup mais pas comment détecter sur quelle menu on a cliqué. Comme les API c'est assez nouveau pour moi, est ce que quelqu'un pourrait m'aider.
Raymond Fournier
"François Picalausa" wrote in news:O#:
Hello,
Ne peux-tu pas créer ton popup menu avec les méthodes traditionnelles de VB? 1°/ Créer un nouvel élément de menu avec la propriété Visible > False. (Je le nommerai pour cet exemple mnuPopup) 2°Lors du click, afficher le menu: Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 'On affiche le menu ssi il s'agit d'un click droit If Button = vbRightButton Then Me.PopupMenu mnuPopup End If End Sub
Sinon, par API, lors de l'affichage du menu par TrackPopupMenu, tu dois avoir préalablement sousclassé la fenêtre parente (argument ByVal hwnd As Long). Ta procédure de sousclassement devrait avoir a peu près cette tête là: Dim ItemIndex As Integer Dim Flags As Integer
Select Case Msg Case WM_MENUSELECT ItemIndex = LOWORD(wParam) Flags = HIWORD(wParam)
If Flags = &HFFFF And lParam = 0 Then 'Le menu vient d'être fermé ElseIf lParam = mhMenu Then 'L'item du menu ayant l'index ItemIndex vient d'être sélectionné End If Case WM_COMMAND If lParam = 0 And HIWORD(wParam) = 0 Then 'On a clické sur le menu portant l'index LOWORD(wParam) End If
LOWORD et HIWORD sont définit comme ceci:
Public Function LOWORD(dwValue As Long) As Integer If dwValue And &H8000& Then LOWORD = dwValue Or &HFFFF0000 Else LOWORD = dwValue And &HFFFF& End If End Function
Public Function HIWORD(dwValue As Long) As Integer HIWORD = (dwValue And &HFFFF0000) &H10000 End Function
Pour différencier les messages de menus "normaux" de la form de ton menu personnalisé, tu peux créer une nouvelle classe de fenêtre de messages et employer celle ci au lieu de la form.
Merci beaucoup François
Je crois que je vais tenter de le faire avec le sous classement pour apprendre comment sa fonctionne.
Raymond Fournier
"François Picalausa" <fpicalausa@chez.com> wrote in
news:O#rv17S1EHA.2624@TK2MSFTNGP11.phx.gbl:
Hello,
Ne peux-tu pas créer ton popup menu avec les méthodes traditionnelles
de VB? 1°/ Créer un nouvel élément de menu avec la propriété Visible > False. (Je le nommerai pour cet exemple mnuPopup)
2°Lors du click, afficher le menu:
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer,
x As Single, y As Single)
'On affiche le menu ssi il s'agit d'un click droit
If Button = vbRightButton Then
Me.PopupMenu mnuPopup
End If
End Sub
Sinon, par API, lors de l'affichage du menu par TrackPopupMenu, tu
dois avoir préalablement sousclassé la fenêtre parente (argument ByVal
hwnd As Long).
Ta procédure de sousclassement devrait avoir a peu près cette tête là:
Dim ItemIndex As Integer
Dim Flags As Integer
Select Case Msg
Case WM_MENUSELECT
ItemIndex = LOWORD(wParam)
Flags = HIWORD(wParam)
If Flags = &HFFFF And lParam = 0 Then
'Le menu vient d'être fermé
ElseIf lParam = mhMenu Then
'L'item du menu ayant l'index ItemIndex vient
d'être
sélectionné
End If
Case WM_COMMAND
If lParam = 0 And HIWORD(wParam) = 0 Then
'On a clické sur le menu portant l'index
LOWORD(wParam)
End If
LOWORD et HIWORD sont définit comme ceci:
Public Function LOWORD(dwValue As Long) As Integer
If dwValue And &H8000& Then
LOWORD = dwValue Or &HFFFF0000
Else
LOWORD = dwValue And &HFFFF&
End If
End Function
Public Function HIWORD(dwValue As Long) As Integer
HIWORD = (dwValue And &HFFFF0000) &H10000
End Function
Pour différencier les messages de menus "normaux" de la form de ton
menu personnalisé, tu peux créer une nouvelle classe de fenêtre de
messages et employer celle ci au lieu de la form.
Merci beaucoup François
Je crois que je vais tenter de le faire avec le sous classement pour
apprendre comment sa fonctionne.
Ne peux-tu pas créer ton popup menu avec les méthodes traditionnelles de VB? 1°/ Créer un nouvel élément de menu avec la propriété Visible > False. (Je le nommerai pour cet exemple mnuPopup) 2°Lors du click, afficher le menu: Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 'On affiche le menu ssi il s'agit d'un click droit If Button = vbRightButton Then Me.PopupMenu mnuPopup End If End Sub
Sinon, par API, lors de l'affichage du menu par TrackPopupMenu, tu dois avoir préalablement sousclassé la fenêtre parente (argument ByVal hwnd As Long). Ta procédure de sousclassement devrait avoir a peu près cette tête là: Dim ItemIndex As Integer Dim Flags As Integer
Select Case Msg Case WM_MENUSELECT ItemIndex = LOWORD(wParam) Flags = HIWORD(wParam)
If Flags = &HFFFF And lParam = 0 Then 'Le menu vient d'être fermé ElseIf lParam = mhMenu Then 'L'item du menu ayant l'index ItemIndex vient d'être sélectionné End If Case WM_COMMAND If lParam = 0 And HIWORD(wParam) = 0 Then 'On a clické sur le menu portant l'index LOWORD(wParam) End If
LOWORD et HIWORD sont définit comme ceci:
Public Function LOWORD(dwValue As Long) As Integer If dwValue And &H8000& Then LOWORD = dwValue Or &HFFFF0000 Else LOWORD = dwValue And &HFFFF& End If End Function
Public Function HIWORD(dwValue As Long) As Integer HIWORD = (dwValue And &HFFFF0000) &H10000 End Function
Pour différencier les messages de menus "normaux" de la form de ton menu personnalisé, tu peux créer une nouvelle classe de fenêtre de messages et employer celle ci au lieu de la form.
Merci beaucoup François
Je crois que je vais tenter de le faire avec le sous classement pour apprendre comment sa fonctionne.