clic droit dans un menu
clic droit dans un menu
Peut on faire reagir un clique droit quand on est dans un menu ?
Le clic gauche lance le menu, mais est-ce que l'on peut savoir si l'on appuie sur le clic droit ?
Le clic gauche lance le menu, mais est-ce que l'on peut savoir si l'on appuie sur le clic droit ?
faudrai faire un truc du genre
mais avec le menu c'est chaud !! 
Code : Tout sélectionner
Event_mouse = WindowEvent()
If Event_mouse = #WM_RBUTTONDOWN

-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Il va falloir fouiller, voici l'idée en gros :
Retrouver un code qui permet de savoir l'élément du menu sous la souris.
Donc chercher un code qui fait "Menu avec aide contextuel dans la barre d'état"
il me semble qu'il y a ca sur CodeArchiv
Ensuite une fois qu'on sait l'élément actif dans le menu, il faut faire un thread dans le programme
CreateThread( ...
Qui espionne la souris (pas avec un #WM_... mais une api qui renvoie directement l'état des boutons de la souris)
c'est :
GetAsyncKeyState_(#VK_LBUTTON)
voir ce post
http://www.purebasic.fr/french/viewtopi ... highlight=
et ensuite a toi de jouer je dirais.
il ne s'agit que d'une voie à explorer, c'est comme ca que je ferais. J'espère qu'elle va marcher
Retrouver un code qui permet de savoir l'élément du menu sous la souris.
Donc chercher un code qui fait "Menu avec aide contextuel dans la barre d'état"
il me semble qu'il y a ca sur CodeArchiv
Ensuite une fois qu'on sait l'élément actif dans le menu, il faut faire un thread dans le programme
CreateThread( ...
Qui espionne la souris (pas avec un #WM_... mais une api qui renvoie directement l'état des boutons de la souris)
c'est :
GetAsyncKeyState_(#VK_LBUTTON)
voir ce post
http://www.purebasic.fr/french/viewtopi ... highlight=
et ensuite a toi de jouer je dirais.
il ne s'agit que d'une voie à explorer, c'est comme ca que je ferais. J'espère qu'elle va marcher
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Voilà un petit code à l'arache.
Je n'ai pas fait de tests si on a un sous-menu, je pense que ça ne marchera pas , il faudra améliorer le code.
La boite de message affiche l'identifiant de l'élément du menu sélectionné avec le bouton droit.
Je n'ai pas récupéré l'état de l'élément sélectionné, celui qui est désactivé retourne aussi la valeur.
A toi d'améliorer; pour de l'aide, peut-être demain, ce soir je sors.
Je n'ai pas fait de tests si on a un sous-menu, je pense que ça ne marchera pas , il faudra améliorer le code.
La boite de message affiche l'identifiant de l'élément du menu sélectionné avec le bouton droit.
Je n'ai pas récupéré l'état de l'élément sélectionné, celui qui est désactivé retourne aussi la valeur.
A toi d'améliorer; pour de l'aide, peut-être demain, ce soir je sors.
Code : Tout sélectionner
Procedure WinCallback(Window, message, wparam, lparam)
result = #PB_ProcessPureBasicEvents
Select message
Case #WM_MENURBUTTONUP
lpmii.MENUITEMINFO\cbSize = SizeOf(MENUITEMINFO)
lpmii\fMask = #MIIM_ID
If GetMenuItemInfo_(lparam, wParam, #MF_BYPOSITION, @lpmii)
MessageRequester("Menu ", "Element cliqué : " + Str(lpmii\wID), 16)
EndIf
EndMenu_()
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 200, 200, 400, 100, "Bouton droit sur menu Checkmarks", #PB_Window_SystemMenu)
SetWindowCallback(@WinCallback())
CreateMenu(0, WindowID(0))
MenuTitle("Menu 1")
MenuItem(1, "Elément 1")
MenuItem(2, "Elément 2")
MenuItem(3, "Elément 3")
DisableMenuItem(0, 3, 1)
MenuItem(4, "Elément 4")
MenuTitle("Menu 2")
MenuItem(5, "Elément 1")
MenuItem(6, "Elément 2")
MenuItem(7, "Elément 3")
MenuItem(8, "Elément 4")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
J'ai travaille dessus tout le matin mais ça ne marche toujours pas.supercdfr a écrit :ton code fonctionne impec, mais peut on le faire dans un menu systray ?
Pas possible d'intercepter les évènements. J'ai utilisé une procedure Hook, tout fonctionne sauf que je n'arrive pas à obtenir l'identifiant de l'élément du menu.
Je chercherais encore mais j'ai pas trop le temps en ce moment.
Tiens essai ça. Utilise la constante pb pour savoir si l'évènement provient du systray. J'ai peut etre pas tout suivi mais le click droit fonctionne chez moi.
Code : Tout sélectionner
Procedure WinCallback(Window, message, wparam, lparam)
result = #PB_ProcessPureBasicEvents
Select message
Case #WM_MENURBUTTONUP
lpmii.MENUITEMINFO\cbSize = SizeOf(MENUITEMINFO)
lpmii\fMask = #MIIM_ID
If GetMenuItemInfo_(lparam, wParam, #MF_BYPOSITION, @lpmii)
MessageRequester("Menu ", "Element cliqué : " + Str(lpmii\wID), 16)
EndIf
EndMenu_()
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 200, 200, 400, 100, "Bouton droit sur menu Checkmarks", #PB_Window_SystemMenu)
SetWindowCallback(@WinCallback())
CreateMenu(0, WindowID(0))
MenuTitle("Menu 1")
MenuItem(1, "Elément 1")
MenuItem(2, "Elément 2")
MenuItem(3, "Elément 3")
DisableMenuItem(0, 3, 1)
MenuItem(4, "Elément 4")
MenuTitle("Menu 2")
MenuItem(5, "Elément 1")
MenuItem(6, "Elément 2")
MenuItem(7, "Elément 3")
MenuItem(8, "Elément 4")
If CreatePopupMenu(0) ; La création du menu contextuel commence...
MenuTitle("Projet") ; Vous pouvez utiliser toutes les commandes relatives au menu,
MenuItem(1, "Ouvrir") ; comme si c'était un menu normal...
MenuItem(2, "Enregistrer")
MenuItem(3, "Enregistrer sous")
MenuItem(4, "Quitter")
MenuBar()
OpenSubMenu("Fic&hiers récents")
MenuItem(5, "PureBasic.exe")
MenuItem(6, "Test.txt")
CloseSubMenu()
MenuTitle("Editer")
MenuTitle("Options")
EndIf
AddSysTrayIcon(1, WindowID(0), LoadImage(0, "C:\Program Files\PureBasic\Examples\Sources\Data\CdPlayer.ico"))
SysTrayIconToolTip(1, "Icon 1")
Repeat
Select WaitWindowEvent() ; Examine quel type d'évènement est survenu sur la fenêtre
Case #PB_Event_SysTray
DisplayPopupMenu(0,WindowID(0)) ; On affiche le menu contextuel
Case #PB_Event_Menu ; Un élément du menu a été sélectionné
Select EventMenu() ; On recupère le numéro de cet élement...
Case 1 : Debug "Menu : Ouvrir"
Case 2 : Debug "Menu : Enregistrer"
Case 3 : Debug "Menu : Enregistrer sous"
Case 4 : Quitter = 1
Case 5 : Debug "Menu : PureBasic.exe"
Case 6 : Debug "Menu : Text.txt"
EndSelect
Case #PB_Event_CloseWindow
Quitter = 1
EndSelect
Until Quitter = 1
EndIf