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
EndIf
Code: 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
ForEver
Code: 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