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...