I tried my best to make it cross platform(I hope)
Feel free to modify it for your needs
Have fun with PureBasic
Code: Select all
Global tbwidth,twin,timg,tframe,mytrack,tbmin,tbmax,thump_1,thump_2, thump_1_tt,thump_2_tt,tbtrim.f
Procedure _TrackBarGadget(x,y,width,height,min,max,Flags)
timg = CreateImage(#PB_Any,width,height+10,24,$CBFEFC)
StartDrawing(ImageOutput(timg))
Box(5,5,width-10,height-10,$EEEEEE)
DrawingMode(#PB_2DDrawing_Outlined )
Box(1,1,width-2,height+8,$CDCDCD)
Box(5,5,width-10,height-10,$C6C6C6)
For xp = 5 To width-5 Step 10
LineXY(xp,height-3,xp,height,$C0C0C0)
Next
StopDrawing()
UseGadgetList(WindowID(twin))
tframe = ImageGadget(#PB_Any,x,y,width,height,ImageID(timg))
DisableGadget(tframe,1)
thimg = CreateImage(#PB_Any,8,14,24,$FA9336)
thump_1 = CanvasGadget(#PB_Any,x+10,y+4,8,14)
thump_2 = CanvasGadget(#PB_Any,x+width-15,y+4,8,14)
thump_1_tt = TextGadget(#PB_Any,0,0,0,0,"",#PB_Text_Center)
;SetGadgetColor(thump_1_tt,#PB_Gadget_BackColor,$CBFEFC)
;SetGadgetColor(thump_1_tt,#PB_Gadget_FrontColor,$0000FF)
thump_2_tt = TextGadget(#PB_Any,0,0,0,0,"",#PB_Text_Center)
;SetGadgetColor(thump_2_tt,#PB_Gadget_BackColor,$CBFEFC)
;SetGadgetColor(thump_2_tt,#PB_Gadget_FrontColor,$0000FF)
SetGadgetAttribute(thump_1, #PB_Canvas_Image ,ImageID(thimg))
SetGadgetAttribute(thump_2, #PB_Canvas_Image ,ImageID(thimg))
tbwidth = width :tbmin = min :tbmax = max
tbtrim =tbwidth/(tbmax-tbmin)
EndProcedure
Procedure _GetGadgetState(Gadget)
Debug Str(tbmin+(GadgetX(gadget)-16)/tbtrim)
EndProcedure
Procedure _SetGadgetState(Gadget,value)
value = value * tbtrim -tbmin
ResizeGadget(Gadget,value,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndProcedure
twin = OpenWindow(#PB_Any,0,0,400,300,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered| #PB_Window_MaximizeGadget| #PB_Window_SizeGadget)
_TrackBarGadget(10,10,380,20,50,300,0)
_SetGadgetState(thump_2,200)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Menu
Select EventMenu()
Case 1
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case thump_1
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(thump_1, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If WindowMouseX(twin)-2 < tbwidth And WindowMouseX(twin)-2 > GadgetX(tframe)+5 And WindowMouseX(twin)-2 < GadgetX(thump_2)-8
ResizeGadget(thump_1,WindowMouseX(twin)-2,#PB_Ignore,#PB_Ignore,#PB_Ignore)
If GadgetX(thump_1) < tbwidth/2
ResizeGadget(thump_1_tt,GadgetX(thump_1)+14,GadgetY(thump_1)+20,30, 14)
Else
ResizeGadget(thump_1_tt,GadgetX(thump_1)-30,GadgetY(thump_1)+20,30,14)
EndIf
SetGadgetText(thump_1_tt,Str(tbmin+(WindowMouseX(twin)-16)/tbtrim))
EndIf
Else
ResizeGadget(thump_1_tt,0,0,0,0)
EndIf
_GetGadgetState(thump_1)
Case thump_2
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(thump_2, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If WindowMouseX(twin)-2 < tbwidth-2 And WindowMouseX(twin)-2 > GadgetX(tframe)+5 And WindowMouseX(twin)-2 > GadgetX(thump_1)+8
ResizeGadget(thump_2,WindowMouseX(twin)-2,#PB_Ignore,#PB_Ignore,#PB_Ignore)
If GadgetX(thump_2) < tbwidth/2
ResizeGadget(thump_2_tt,GadgetX(thump_2)+14,GadgetY(thump_2)+20,30, 14)
Else
ResizeGadget(thump_2_tt,GadgetX(thump_2)-30,GadgetY(thump_2)+20,30,14)
EndIf
SetGadgetText(thump_2_tt,Str(tbmin+WindowMouseX(twin)/tbtrim))
EndIf
Else
ResizeGadget(thump_2_tt,0,0,0,0)
EndIf
EndSelect
EndSelect
Until Quit = 1
End