#1 :
- Keyboard arrow keys support
- Mouse Wheel Support
Code: Select all
Procedure vScroll()
SetGadgetAttribute(0, #PB_ScrollArea_Y, GetGadgetState(5))
EndProcedure
Procedure hScroll()
SetGadgetAttribute(0, #PB_ScrollArea_X ,GetGadgetState(10))
EndProcedure
ExamineDesktops()
If OpenWindow(0, 0, 0, 610, 410, "Custom ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 10, 10, 580,380, DesktopWidth(0),DesktopHeight(0), 25,#PB_ScrollArea_Single)
SetGadgetColor(0,#PB_Gadget_BackColor ,$D5F5C0)
ShowScrollBar_(GadgetID(0), #SB_BOTH, 0)
ButtonGadget (1, 110, 150, 90, 90,"Button 1")
ButtonGadget (2, 210, 150, 90, 90,"Button 2")
ButtonGadget (3, 310, 150, 90, 90,"Button 3")
CloseGadgetList()
ScrollBarGadget(5, 590,10, 10,GadgetHeight(0), 0,400,10, #PB_ScrollBar_Vertical)
ScrollBarGadget(10, 10,390, GadgetWidth(0),10, 0,600,10)
BindGadgetEvent(5,@vScroll())
BindGadgetEvent(10,@hScroll())
GetCursorPos_(p.POINT)
SetCursorPos_(GadgetX(0,#PB_Gadget_ScreenCoordinate )+10,GadgetY(0,#PB_Gadget_ScreenCoordinate )+10)
mouse_event_(#MOUSEEVENTF_LEFTDOWN,0,0,0,0)
mouse_event_(#MOUSEEVENTF_LEFTUP,0,0,0,0)
SetCursorPos_(p\x,p\y)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #WM_MOUSEWHEEL
SetGadgetState(5,GetGadgetAttribute(0, #PB_ScrollArea_Y))
Case #PB_Event_Gadget
Select EventGadget()
Case 0
SetGadgetState(5,GetGadgetAttribute(0, #PB_ScrollArea_Y))
SetGadgetState(10,GetGadgetAttribute(0, #PB_ScrollArea_X))
Case 1
MessageRequester("Info","Button 1 was pressed!",#PB_MessageRequester_Ok)
Case 2
MessageRequester("Info","Button 2 was pressed!",#PB_MessageRequester_Ok)
Case 3
MessageRequester("Info","Button 3 was pressed!",#PB_MessageRequester_Ok)
EndSelect
EndSelect
ForEver
EndIf
Code: Select all
Global xNewPos,xCurrentScroll,yNewPos,yCurrentScroll,Brush
Procedure WndProc(hwnd, uMsg, wParam, lParam)
If IsGadget(0)
xCurrentScroll = GetGadgetAttribute(0,#PB_ScrollArea_X)
yCurrentScroll = GetGadgetAttribute(0,#PB_ScrollArea_Y)
EndIf
Result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_HSCROLL
Select wParam & $FFFF
Case #SB_PAGEUP
xNewPos = xCurrentScroll - 1
Case #SB_PAGEDOWN
xNewPos = xCurrentScroll + 1
Case #SB_LINEUP
xNewPos = xCurrentScroll - 1
Case #SB_LINEDOWN
xNewPos = xCurrentScroll + 1
Case #SB_THUMBPOSITION
xNewPos = wParam >> 16 & $FFFF
EndSelect
SetGadgetAttribute(0,#PB_ScrollArea_X,xNewPos)
SetGadgetState(10,xNewPos)
Case #WM_VSCROLL
Select wParam & $FFFF
Case #SB_PAGEUP
yNewPos = yCurrentScroll - 1
Case #SB_PAGEDOWN
yNewPos = yCurrentScroll + 1
Case #SB_LINEUP
yNewPos = yCurrentScroll - 1
Case #SB_LINEDOWN
yNewPos = yCurrentScroll + 1
Case #SB_THUMBPOSITION
yNewPos = wParam >> 16 & $FFFF
EndSelect
SetGadgetAttribute(0,#PB_ScrollArea_Y,yNewPos)
SetGadgetState(5,yNewPos)
Case #WM_CTLCOLORSCROLLBAR
Result = Brush
EndSelect
ProcedureReturn Result
EndProcedure
ExamineDesktops()
If OpenWindow(0, 0, 0, 610, 410, "Custom ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 10, 10, 580,380, DesktopWidth(0),DesktopHeight(0), 25,#PB_ScrollArea_Single)
SetGadgetColor(0,#PB_Gadget_BackColor ,$D5F5C0)
ShowScrollBar_(GadgetID(0), #SB_BOTH, 0)
SetWindowLongPtr_(GadgetID(0), #GWL_STYLE, GetWindowLongPtr_(GadgetID(0), #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(GadgetID(0), #HWND_BOTTOM , -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
ButtonGadget (1, 110, 150, 90, 90,"Button 1")
ButtonGadget (2, 210, 150, 90, 90,"Button 2")
ButtonGadget (3, 310, 150, 90, 90,"Button 3")
CloseGadgetList()
ScrollBarGadget(5, 590,10, 10,GadgetHeight(0), 0,400,10, #PB_ScrollBar_Vertical)
ScrollBarGadget(10, 10,390, GadgetWidth(0),10, 0,600,10)
Brush = CreateSolidBrush_($000000)
SetWindowCallback(@WndProc())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case 1
MessageRequester("Info","Button 1 was pressed!",#PB_MessageRequester_Ok)
Case 2
MessageRequester("Info","Button 2 was pressed!",#PB_MessageRequester_Ok)
Case 3
MessageRequester("Info","Button 3 was pressed!",#PB_MessageRequester_Ok)
EndSelect
EndSelect
ForEver
DeleteObject_(Brush)
EndIf