MouseButtonState
Posted: Sat Dec 13, 2014 10:05 am
please add
appeal to colleagues if it is useful, and you ask to add



appeal to colleagues if it is useful, and you ask to add

Code: Select all
EnableExplicit
Enumeration #PB_Event_FirstCustomValue
#PB_Event_LeftButtonDown
#PB_Event_LeftButtonUp
#PB_Event_RightButtonDown
#PB_Event_RightButtonUp
#PB_Event_MidleButtonDown
#PB_Event_MidleButtonUp
EndEnumeration
Procedure MouseButtonState( EnterWindow, EnterGadget=-1 )
Static State, Gadget =-1
Protected Click
If IsWindow(EnterWindow)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
If (GetAsyncKeyState_(#VK_LBUTTON) >> 15 & 1) :Click = #PB_Event_LeftButtonDown
ElseIf (GetAsyncKeyState_(#VK_RBUTTON) >> 15 & 1) :Click = #PB_Event_RightButtonDown
ElseIf (GetAsyncKeyState_(#VK_MBUTTON) >> 15 & 1) :Click = #PB_Event_MidleButtonDown
EndIf
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
Protected.l x,y,mask,*Window.GTKWindow = WindowID(EnterWindow)
gdk_window_get_pointer_(*Window\bin\child\window, @x, @y, @mask)
If (mask & #GDK_BUTTON1_MASK) :Click = #PB_Event_LeftButtonDown
ElseIf (mask & #GDK_BUTTON3_MASK) :Click = #PB_Event_RightButtonDown
ElseIf (mask & #GDK_BUTTON2_MASK) :Click = #PB_Event_MidleButtonDown
EndIf
CompilerEndIf
If Click
If Click = #PB_Event_LeftButtonDown
If State <> Click :State = Click :Gadget = EnterGadget
PostEvent(#PB_Event_LeftButtonDown, EnterWindow,Gadget)
EndIf
EndIf
If Click = #PB_Event_RightButtonDown
If State <> Click :State = Click :Gadget = EnterGadget
PostEvent(#PB_Event_RightButtonDown, EnterWindow,Gadget)
EndIf
EndIf
If Click = #PB_Event_MidleButtonDown
If State <> Click :State = Click :Gadget = EnterGadget
PostEvent(#PB_Event_MidleButtonDown, EnterWindow,Gadget)
EndIf
EndIf
Else
If State = #PB_Event_LeftButtonDown :State = #PB_Event_LeftButtonUp
PostEvent(#PB_Event_LeftButtonUp, EnterWindow,Gadget)
EndIf
If State = #PB_Event_RightButtonDown :State = #PB_Event_RightButtonUp
PostEvent(#PB_Event_RightButtonUp, EnterWindow,Gadget)
EndIf
If State = #PB_Event_MidleButtonDown :State = #PB_Event_MidleButtonUp
PostEvent(#PB_Event_MidleButtonUp, EnterWindow,Gadget)
EndIf
EndIf
EndIf
ProcedureReturn Click
EndProcedure
Procedure IsMouseEnterGadget(Gadget) ;Returns TRUE if cursor on the Gadget
Protected MouseX,MouseY, GadgetX,GadgetY,GadgetWidth,GadgetHeight
MouseX = DesktopMouseX()
MouseY = DesktopMouseY()
If (MouseX <>-1 And MouseY <>-1)
If IsGadget(Gadget); IsGadgetVisible(Gadget)
GadgetX = GadgetX(Gadget ,#PB_Gadget_ScreenCoordinate)
GadgetY = GadgetY(Gadget ,#PB_Gadget_ScreenCoordinate)
GadgetWidth = GadgetX + GadgetWidth(Gadget)
GadgetHeight = GadgetY + GadgetHeight(Gadget)
EndIf
If (MouseX >= GadgetX And MouseY >= GadgetY And
MouseX <= GadgetWidth And MouseY <= GadgetHeight)
ProcedureReturn #True
EndIf
EndIf
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define wFlags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
If OpenWindow(1, #PB_Any, #PB_Any, 300, 200, "Mouse Button State demo", wFlags)
ResizeWindow(1, WindowX(1) - 160, #PB_Ignore, #PB_Ignore, #PB_Ignore)
Define Flag
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Flag = #WS_CLIPSIBLINGS
CompilerEndIf
ButtonGadget(2,10,10,105,35,"ButtonGadget2",Flag )
OpenWindow(2, #PB_Any, #PB_Any, 300, 200, "Mouse Button State demo", wFlags)
ResizeWindow(2, WindowX(2) + 160, #PB_Ignore, #PB_Ignore, #PB_Ignore)
ButtonGadget(1,10,10,105,35,"ButtonGadget1",Flag )
HideWindow(1,0)
Define EnterGadget
Repeat
If IsMouseEnterGadget(1)
EnterGadget = 1
ElseIf IsMouseEnterGadget(2)
EnterGadget = 2
Else
EnterGadget = -1
EndIf
MouseButtonState(GetActiveWindow(),EnterGadget)
Select WaitWindowEvent()
Case #PB_Event_LeftButtonDown :Debug "#PB_Event_LeftButtonDown Window " +EventWindow()+ " Gadget " +EventGadget()
Case #PB_Event_LeftButtonUp :Debug "#PB_Event_LeftButtonUp Window " +EventWindow()+ " Gadget " +EventGadget()
Case #PB_Event_RightButtonDown :Debug "#PB_Event_RightButtonDown Window " +EventWindow()+ " Gadget " +EventGadget()
Case #PB_Event_RightButtonUp :Debug "#PB_Event_RightButtonUp Window " +EventWindow()+ " Gadget " +EventGadget()
Case #PB_Event_MidleButtonDown :Debug "#PB_Event_MidleButtonDown Window " +EventWindow()+ " Gadget " +EventGadget()
Case #PB_Event_MidleButtonUp :Debug "#PB_Event_MidleButtonUp Window " +EventWindow()+ " Gadget " +EventGadget()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
CompilerEndIf