Code: Select all
Global yNewPos,yCurrentScroll,Brush
Procedure WndProc(hwnd, uMsg, wParam, lParam)
If IsGadget(0)
yCurrentScroll = GetGadgetAttribute(0,#PB_ScrollArea_Y)
EndIf
Result = #PB_ProcessPureBasicEvents
Select uMsg
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
ScrollBarHeight = 10
ExamineDesktops()
If OpenWindow(0, 0, 0, 610, 400, "Custom ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 10, 10, 580,380, DesktopWidth(0),DesktopHeight(0), 25,#PB_ScrollArea_Single)
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, 10, 150, 90, 90,"Button 1")
ButtonGadget (2, 110, 150, 90, 90,"Button 2")
ButtonGadget (3, 210, 150, 90, 90,"Button 3")
CloseGadgetList()
ScrollBarGadget(5, 590,10, 10,GadgetHeight(0), 0,400,10, #PB_ScrollBar_Vertical)
SetWindowLongPtr_(GadgetID(5), #GWL_STYLE, GetWindowLongPtr_(GadgetID(5), #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(GadgetID(5), #HWND_TOP, -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
Brush = CreateSolidBrush_($BEBEBF)
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