Page 1 sur 1
Lier un popupmenu à un editorgadget
Publié : lun. 18/sept./2023 11:20
par Philippe_GEORGES
Bonjour à tous,
Je souhaite lier un popupmenu à un editorgadget.
Pour celà, j'utilise simplement :
BindGadgetEvent(#Editor_analyse,@menu_analyse(),#PB_Event_RightClick);
Ma procedure appelée :
Procedure menu_analyse()
DisplayPopupMenu(#menu_editor,WindowID(#Win_main))
EndProcedure
On ne peut plus simple, mais ça ne marche pas !!
J'ai dû oublier un détail, sans le #PB_Event_RightClick, bien entendu, ça marche !!
Voilà, si quelqu'un peut m'aider !
Phil
Re: Lier un popupmenu à un editorgadget
Publié : lun. 18/sept./2023 13:44
par Mesa
Il faut utiliser les api.
Code : Tout sélectionner
OpenWindow(0, 100, 100, 300, 190, "Display context menu on right click")
EditorGadget(0, 10, 10, 280, 170)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
If CreatePopupMenu(0)
MenuItem(0, "Cut")
MenuItem(1, "Copy")
MenuItem(2, "Paste")
EndIf
CompilerEndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Case #PB_Event_Menu
Select EventMenu()
Case 0
SendMessage_(GadgetID(0), #WM_CUT, 0, 0)
Case 1
SendMessage_(GadgetID(0), #WM_COPY, 0, 0)
Case 2
SendMessage_(GadgetID(0), #WM_PASTE, 0, 0)
EndSelect
Case #WM_RBUTTONDOWN
If EventGadget() = 0
DisplayPopupMenu(0, WindowID(0))
EndIf
CompilerEndIf
EndSelect
ForEver
M.
Re: Lier un popupmenu à un editorgadget
Publié : lun. 18/sept./2023 19:17
par cage
Bonjour,
Un peu différent, toujours avec les API
Code : Tout sélectionner
Enumeration Windows
#WinMain
EndEnumeration
Enumeration Gadgets
#Editor
#WinPop
EndEnumeration
Enumeration Menus
#Menu0
#Menu1
#Menu2
EndEnumeration
Procedure onKeyboard(nCode,wParam,lParam)
Debug wParam
Select wParam
Case #VK_RETURN
Debug "onKeyboard=ENTER"
Case #VK_CONTROL
Debug "onKeyboard=CONTROL"
EndSelect
EndProcedure
Procedure onMouse(nCode,wParam,lParam)
Select wParam
Case #WM_RBUTTONDOWN
DisplayPopupMenu(#WinPop,WindowID(#WinMain))
EndSelect
EndProcedure
If OpenWindow(#WinMain, 100, 100, 300, 190, "Display context menu on right click")
EditorGadget(#Editor, 10, 10, 280, 170)
If CreatePopupMenu(#WinPop)
MenuItem(#Menu0, "Menu 0")
MenuItem(#Menu1, "Menu 1")
MenuItem(#Menu2, "Menu 2")
EndIf
Define hInstance=GetModuleHandle_(0)
Define lpdwProcessId=GetWindowThreadProcessId_(WindowID(#WinMain),0)
SetWindowsHookEx_(#WH_MOUSE ,@onMouse() , hInstance, lpdwProcessId)
SetWindowsHookEx_(#WH_KEYBOARD,@onKeyboard(), hInstance, lpdwProcessId)
Repeat
Event = WaitWindowEvent(20)
Select Event
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
indexMenu = EventMenu()
titre$ = GetMenuItemText(#WinPop, indexMenu)
Select indexMenu
Case #Menu0 : Debug Str(indexMenu)+" : Action "+titre$
Case #Menu1 : Debug Str(indexMenu)+" : Action "+titre$
Case #Menu2 : Debug Str(indexMenu)+" : Action "+titre$
EndSelect
Case #PB_Event_Gadget
indexGadget = EventGadget()
indexGadgetType = EventType()
Debug indexGadget
EndSelect
ForEver
EndIf
Permet d'intercepter les événements de la souris et du clavier.
cage
Re: Lier un popupmenu à un editorgadget
Publié : lun. 18/sept./2023 20:15
par falsam
Si mes souvenirs sont bons, je crois que Philippe GEORGES code sur mac os. Mais peut être qu'il est pas contre un pc sous windows

Re: Lier un popupmenu à un editorgadget
Publié : mar. 19/sept./2023 8:06
par Ollivier
On salue la mémoire incomblable de falsam...
Re: Lier un popupmenu à un editorgadget
Publié : mar. 19/sept./2023 8:36
par Mesa
Le mieux serait d'utiliser scintilla.
M.
Re: Lier un popupmenu à un editorgadget
Publié : mar. 19/sept./2023 10:41
par Philippe_GEORGES
Merci pour ces codes !!
Oui, Falsam, je travaille sur Mac, mais pas que !!
Je peux faire une compilation conditionnelle, reste à avoir les API pour Mac.... ou une solution universelle.
Là encore, si vous avez des idées !! (heureusement que vous êtes là !)
Un grand merci à vous tous,
Phil
Re: Lier un popupmenu à un editorgadget
Publié : mer. 20/sept./2023 16:55
par Mindphazer
Sur Mac (et sur Linux aussi je crois), le clic droit sur un EditorGadget affiche un popup natif (avec, entre autres, couper-copier-coller)
Par contre, je ne sais pas comment modifier ce menu.
J'ai rapidement regardé sur le forum anglais, mais pas vu de manière de faire encore...