Lier un popupmenu à un editorgadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 140
Inscription : mer. 28/janv./2009 13:28

Lier un popupmenu à un editorgadget

Message 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
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Lier un popupmenu à un editorgadget

Message 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.
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Lier un popupmenu à un editorgadget

Message 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
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Lier un popupmenu à un editorgadget

Message 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 😁
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Lier un popupmenu à un editorgadget

Message par Ollivier »

On salue la mémoire incomblable de falsam...
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Lier un popupmenu à un editorgadget

Message par Mesa »

Le mieux serait d'utiliser scintilla.

M.
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 140
Inscription : mer. 28/janv./2009 13:28

Re: Lier un popupmenu à un editorgadget

Message 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
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

Re: Lier un popupmenu à un editorgadget

Message 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...
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Répondre