Right click Editor Gadget
Posted: Sat Mar 19, 2016 6:39 am
How do I detect if right click event has happened on an editor gadget? I only want the popup menu to show if the mouse is over the editor.
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
#MainWin = 0
#EdGad = 1
#PopMenu = 2
#MenuItemQuit = 3
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
If WParam = #WM_RBUTTONDOWN
If GetActiveGadget() = #EdGad
PostEvent(#PB_Event_Gadget, #MainWin, #EdGad, #PB_EventType_RightClick)
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(#MainWin,0,0,800,600,"", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#MainWin,$F9F1CC)
SetWindowCallback(@WinCallback())
EditorGadget(#EdGad,10,10,600,400)
CreatePopupMenu(#PopMenu)
MenuItem(#MenuItemQuit,"Quit")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #EdGad
If EventType() = #PB_EventType_RightClick
DisplayPopupMenu(#PopMenu,WindowID(#MainWin))
EndIf
EndSelect
Case #PB_Event_Menu
If EventMenu() = #MenuItemQuit
Break
EndIf
EndSelect
ForEver
Code: Select all
SendMessage_(GadgetID(#EdGad), #WM_PASTE, 0, 0)Code: Select all
#MainWin = 0
#EdGad = 1
#PopMenu = 2
#MenuItemQuit = 3
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
If WParam = #WM_RBUTTONDOWN
If GetActiveGadget() = #EdGad
PostEvent(#PB_Event_Gadget, #MainWin, #EdGad, #PB_EventType_RightClick)
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(#MainWin,0,0,800,600,"", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#MainWin,$F9F1CC)
SetWindowCallback(@WinCallback())
PanelGadget(0, 10, 10, 600, 400) ; <= added
AddGadgetItem(0, 1, "new") ; <= added
EditorGadget(#EdGad,0,0,600,400)
CreatePopupMenu(#PopMenu)
MenuItem(#MenuItemQuit,"Quit")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #EdGad
If EventType() = #PB_EventType_RightClick
DisplayPopupMenu(#PopMenu,WindowID(#MainWin))
EndIf
EndSelect
Case #PB_Event_Menu
If EventMenu() = #MenuItemQuit
Break
EndIf
EndSelect
ForEverCode: Select all
#MainWin = 0
#EdGad = 1
#PopMenu = 2
#MenuItemQuit = 3
Procedure EditorCallback(hwnd, msg, wparam, lparam)
Shared oldproc
Protected result = CallWindowProc_(oldproc, hwnd, msg, wparam, lparam)
If msg = #WM_RBUTTONDOWN
PostEvent(#PB_Event_Gadget, #MainWin, #EdGad, #PB_EventType_RightClick)
EndIf
ProcedureReturn result
EndProcedure
OpenWindow(#MainWin,0,0,800,600,"", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#MainWin,$F9F1CC)
PanelGadget(220, 10, 10, 600, 400) ; <= added
AddGadgetItem(220, 1, "new") ; <= added
EditorGadget(#EdGad,0,0,600,400)
oldproc = SetWindowLongPtr_(GadgetID(#EdGad), #GWL_WNDPROC, @EditorCallback())
CreatePopupMenu(#PopMenu)
MenuItem(#MenuItemQuit,"Quit")
Repeat
e = WaitWindowEvent()
Select e
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #EdGad
If EventType() = #PB_EventType_RightClick
DisplayPopupMenu(#PopMenu,WindowID(#MainWin))
EndIf
EndSelect
Case #PB_Event_Menu
If EventMenu() = #MenuItemQuit
Break
EndIf
EndSelect
Forever
Code: Select all
#MainWin = 0
#EdGad = 1
#PopMenu = 2
#MenuItemQuit = 3
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_CONTEXTMENU
Select wParam
Case GadgetID(#EdGad)
DisplayPopupMenu(0, WindowID(0))
EndSelect
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(#MainWin,0,0,800,600,"", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#MainWin,$F9F1CC)
SetWindowCallback(@WinCallback())
PanelGadget(0, 10, 10, 600, 400) ; <= added
AddGadgetItem(0, 1, "new") ; <= added
EditorGadget(#EdGad,0,0,600,400)
If CreatePopupMenu(0)
MenuItem(1, "Cut")
MenuItem(2, "Copy")
MenuItem(3, "Paste")
MenuBar()
OpenSubMenu("Options")
MenuItem(4, "Window...")
MenuItem(5, "Gadget...")
CloseSubMenu()
MenuBar()
MenuItem( 6, "Quit")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 1 ; Cut
SendMessage_(GadgetID(#EdGad),#WM_CUT,0,0)
Case 2 ; Copy
SendMessage_(GadgetID(#EdGad),#WM_COPY,0,0)
Case 3 ; Paste
SendMessage_(GadgetID(#EdGad),#WM_PASTE,0,0)
Case 6 ; Quit
Q = 1
EndSelect
EndSelect
Until Q = 1