Right click on HyperLinkGadget?
Posted: Thu Mar 02, 2017 12:05 pm
				
				I want open a pop menu after a right click on a HyperLinkGadget. But a HyperLinkGadget generates no events...
			http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
EnableExplicit
Global HyperLinkCB
Procedure HyperLinkCB(hWnd, Msg, wParam, lParam)
  
  Select Msg
    Case #WM_RBUTTONUP
      DisplayPopupMenu(1, WindowID(0))
  EndSelect
  
  ProcedureReturn CallWindowProc_(HyperLinkCB, hWnd, Msg, wParam, lParam)
EndProcedure
If CreatePopupImageMenu(1)
  MenuItem(1, "Hello Lebostein")
EndIf
If OpenWindow(0, 0, 0, 500, 250, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  HyperLinkGadget(1, 10, 10, WindowWidth(0)-20, 20, "http://www.google.de", RGB(0, 0, 255))
  
  HyperLinkCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @HyperLinkCB())
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIfCode: Select all
EnableExplicit
#Event_RightClick = #PB_Event_FirstCustomValue
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux
    ProcedureC HyperLinkCallback(*Widget.GtkWidget,
      *EventButton.GdkEventButton, UserData.I)
      If *EventButton\button = 3
        PostEvent(#Event_RightClick)
      EndIf
    EndProcedure
  CompilerCase #PB_OS_MacOS
    Define SubclassedHyperLink.I
    ProcedureC HyperLinkCallback()
      PostEvent(#Event_RightClick)
    EndProcedure
  CompilerCase #PB_OS_Windows
    Define DefaultHyperLinkCallback.I
    Procedure HyperLinkCallback(WindowHandle.I, Msg.I, WParam.I, LParam.I)
      Shared DefaultHyperLinkCallback.I
      If Msg = #WM_RBUTTONUP
        PostEvent(#Event_RightClick)
      EndIf
      ProcedureReturn CallWindowProc_(DefaultHyperLinkCallback.I,
        WindowHandle.I, Msg.I, WParam.I, LParam.I)
    EndProcedure
CompilerEndSelect
OpenWindow(0, 270, 100, 220, 65, "HyperLinkGadget")
HyperLinkGadget(0, 70, 20, 74, 30, "HyperLink", $FF, #PB_HyperLink_Underline)
SetGadgetColor(0, #PB_Gadget_FrontColor, $FF0000)
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux
    g_signal_connect_(gtk_widget_get_parent_(GadgetID(0)),
      "button-press-event", @HyperLinkCallback(), 0)
  CompilerCase #PB_OS_MacOS
    SubclassedHyperLink = objc_allocateClassPair_(CocoaMessage(0,
      GadgetID(0), "class"), "SubclassedHyperLink", 0)
    object_setClass_(GadgetID(0), SubclassedHyperLink)
    objc_registerClassPair_(SubclassedHyperLink)
    class_addMethod_(SubclassedHyperLink,
      sel_registerName_("rightMouseDown:"), @HyperLinkCallback(), "v@:@@")
  CompilerCase #PB_OS_Windows
    DefaultHyperLinkCallback.I = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC,
      @HyperLinkCallback())
CompilerEndSelect
If CreatePopupMenu(0)
  MenuItem(0, "Right click menu")
EndIf
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #Event_RightClick
      DisplayPopupMenu(0, WindowID(0))
  EndSelect
ForEverCode: Select all
Hand = LoadCursor_(0, #IDC_HAND)
If OpenWindow(0, 0, 0, 270, 160, "HyperlinkGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  HyperLinkGadget(0, 10, 10, 0,20,"Red HyperLink", RGB(255,0,0))
  gw = GadgetWidth(0,#PB_Gadget_RequiredSize)
  ResizeGadget(0,#PB_Ignore,#PB_Ignore,gw,20)
  HyperLinkGadget(1, 10, 40, 0,20,"Arial Underlined Green HyperLink", RGB(0,255,0), #PB_HyperLink_Underline)
  SetGadgetFont(1, LoadFont(0, "Arial", 12))
  gw = GadgetWidth(1,#PB_Gadget_RequiredSize)
  ResizeGadget(1,#PB_Ignore,#PB_Ignore,gw,20)
  If CreatePopupMenu(0)
    MenuItem(1, "Open")
    MenuItem(2, "Save")
    MenuItem(3, "Save as")
    MenuItem(4, "Quit")
    MenuBar()
    OpenSubMenu("Recent files")
    MenuItem(5, "PureBasic.exe")
    MenuItem(6, "Test.txt")
    CloseSubMenu()
  EndIf
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1            
            text$ = GetGadgetText(gad)
            Debug text$
            
          Case 4
            Quit = 1
        EndSelect
        
      Case #WM_RBUTTONDOWN
        If GetCursor_() = Hand
          GetCursorPos_ (@p.POINT)
          wwin= WindowFromPoint_(p\y << 32 + p\x)
          gad = GetDlgCtrlID_(wwin)
          DisplayPopupMenu(0, WindowID(0))
        EndIf
    EndSelect
  Until Quit = 1
EndIf