Update :Custom ScrollAreaGadget [Windows]
Posted: Mon May 31, 2010 6:36 pm
Code: Select all
Global xNewPos,xCurrentScroll,Bg_Brush
Procedure WndProc(hwnd, uMsg, wParam, lParam)
If IsGadget(0)
xCurrentScroll = GetGadgetAttribute(0,#PB_ScrollArea_X) ;GetGadgetState(5)
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(5,xNewPos)
Case #WM_CTLCOLORSCROLLBAR
Result = Bg_Brush
EndSelect
ProcedureReturn Result
EndProcedure
ScrollBarHeight = 30
If OpenWindow(0, 0, 0, 305, 130, "Custom ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 10, 10, 285,116, 600, 80, 30)
ShowScrollBar_(GadgetID(0), #SB_HORZ, 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, 10, 60, 60,"Button 1")
ButtonGadget (2, 80, 10, 60, 60,"Button 2")
ButtonGadget (3, 150, 10, 60, 60,"Button 3")
CloseGadgetList()
ScrollBarGadget(5, 12, WindowHeight(0) - ScrollBarHeight - 6, WindowWidth(0) - 22,ScrollBarHeight, 0,250,5)
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)
Bg_Brush = CreateSolidBrush_($93FFFE)
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_(Bg_Brush)
EndIf
Have fun
Updated :Bug fixed