Je viens de voir ça de "Toms" sur le forum Anglais... Peut-être utile pour toi ?
Code : Tout sélectionner
;-
;- BEGIN INCLUDE
;-
EnableExplicit
;-Flags
#TG_Fader_Horizontal = 1
Structure faderGadget
id.i
state.i
colorF.i
colorB.i
height.i
width.i
min.i
max.i
horizontal.i
image.i
EndStructure
Global NewList FaderGadgets.faderGadget()
Macro RePaint(_INIT_)
Select FaderGadgets()\horizontal
Case 0
MouseY = GetGadgetAttribute(eventGadget, #PB_Canvas_MouseY )
If _INIT_ = #True
MouseY = FaderGadgets()\height
EndIf
StartDrawing(CanvasOutput(eventGadget))
Box(0, 0, FaderGadgets()\width, FaderGadgets()\height, FaderGadgets()\colorB)
If FaderGadgets()\image >= 0
ImagePos = MouseY
If ImagePos <0 : ImagePos = 0 : EndIf
If ImagePos >FaderGadgets()\height : ImagePos = FaderGadgets()\height : EndIf
DrawImage(ImageID(FaderGadgets()\image), 0, ImagePos - ImageHeight(FaderGadgets()\image)/2)
Else
Box(0, MouseY, FaderGadgets()\width, FaderGadgets()\height-MouseY, FaderGadgets()\colorF)
EndIf
State=FaderGadgets()\height-MouseY
If State<0 : State=0:EndIf
If State>FaderGadgets()\height:State=FaderGadgets()\height:EndIf
FaderGadgets()\state = State
StopDrawing()
Case #True
MouseX = GetGadgetAttribute(eventGadget, #PB_Canvas_MouseX )
StartDrawing(CanvasOutput(eventGadget))
Box(0, 0, FaderGadgets()\width, FaderGadgets()\height, FaderGadgets()\colorB)
If FaderGadgets()\image >= 0
ImagePos = MouseX
If ImagePos <0 : ImagePos = 0 : EndIf
If ImagePos >FaderGadgets()\width : ImagePos = FaderGadgets()\width : EndIf
DrawImage(ImageID(FaderGadgets()\image), ImagePos - ImageWidth(FaderGadgets()\image)/2, 0)
Else
Box(0, 0, MouseX, FaderGadgets()\height , FaderGadgets()\colorF)
EndIf
State=FaderGadgets()\width-MouseX
If State<0 : State=0:EndIf
If State>FaderGadgets()\width:State=FaderGadgets()\width:EndIf
StopDrawing()
EndSelect
FaderGadgets()\state = State
EndMacro
Procedure FaderUpdate(eventGadget.i, eventType.i)
Static lDown.i ;leftMouseDown
Protected MouseX.i ;
Protected MouseY.i ;
Protected State.i ;GadgetState
Protected ImagePos.i
ForEach FaderGadgets()
If FaderGadgets()\id = eventGadget
Select eventType
Case #PB_Ignore
Repaint(1)
Case #PB_EventType_LeftButtonDown
lDown = 1
RePaint(0)
Case #PB_EventType_LeftButtonUp
lDown = 0
Case #PB_EventType_MouseLeave
lDown = 0
Case #PB_EventType_MouseMove
If lDown = 1
Repaint(0)
EndIf
EndSelect
EndIf
Next
EndProcedure
Procedure FaderGadget(id.i, x.i, y.i, width.i, height.i, min.i, max.i, FGColor.i, BGColor.i, CanvasFlags.i=0, flags=0, Image.i=-1)
AddElement(FaderGadgets())
With FaderGadgets()
If id = #PB_Any
\id = CanvasGadget(#PB_Any, x, y, width, height, CanvasFlags)
Else
CanvasGadget(id, x, y, width, height, CanvasFlags)
\id = id
EndIf
StartDrawing(CanvasOutput(\id))
Box(0, 0, width, height, BGColor)
StopDrawing()
\colorB = BGColor
\colorF = FGColor
\min = min
\max = max
\height = height
\width = width
If IsImage(image)
\image = image
Else
\image = -1
EndIf
If flags & #TG_Fader_Horizontal
\horizontal = #True
EndIf
FaderUpdate(\id,#PB_Ignore)
ProcedureReturn \id
EndWith
EndProcedure
Procedure GetFaderGadgetState(gadget.i, trueState=#False)
Protected min.i, max.i
Protected state.i
Protected height.i, width.i
Protected scala.i
Protected position.f
ForEach FaderGadgets()
If FaderGadgets()\id = gadget
If truestate = #True
ProcedureReturn FaderGadgets()\state
Else
min = FaderGadgets()\min
max = FaderGadgets()\max
state = FaderGadgets()\state
height = FaderGadgets()\height
width = FaderGadgets()\width
Select FaderGadgets()\horizontal
Case 1
If width>0
position = state / width
EndIf
scala = max-min
ProcedureReturn max - (position * scala )
Default
If height>0
position = state / height
EndIf
scala = max-min
ProcedureReturn position * scala + min
EndSelect
EndIf
EndIf
Next
EndProcedure
DisableExplicit
;-
;- END INCLUDE
;-
;- Example
Define event.i
Define Any_Fader
Define OldValue_1.i
Define OldValue_2.i
Define OldValue_3.i
Define OldValue_4.i
Define OldValue_5.i
Enumeration 4 ;{
#Text_Static_1
#Text_Value_1
#Text_Static_2
#Text_Value_2
#Text_Static_3
#Text_Value_3
#Text_Static_4
#Text_Value_4
#Text_Static_5
#Text_Value_5
EndEnumeration ;}
CreateImage(1, 90, 15)
StartDrawing(ImageOutput(1))
Box(0, 0, 90, 15, $0000FF)
LineXY(0, 0, 90, 8, $00CC00)
LineXY(0, 14, 90, 8, $00CC00)
FillArea(0, 8, $00CC00, $00CC00)
StopDrawing()
CreateImage(2, 15, 90)
StartDrawing(ImageOutput(2))
Box(0, 0, 15, 90, $0000FF)
LineXY(0, 0, 8, 90, 0)
LineXY(14, 0, 8, 90, 0)
FillArea(8, 9, 0, 0)
StopDrawing()
; -----------------------------------------------------------------------------------------------
OpenWindow(0, 0, 0, 705, 600, "FaderGadget", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
;
fadergadget(0 , 5, 5, 90, 500, 0, 500, $0000FF, $000000)
fadergadget(1 , 105, 5, 90, 500,1000,99999, $0000FF, $000022, 0, 1)
Any_Fader=fadergadget(#PB_Any,200, 5, 400, 90, 1, 2, $009900, $330000)
fadergadget(2 , 200, 100, 400, 90, 100, 0, $0066cc, $003300, 0, #TG_Fader_Horizontal)
fadergadget(3 , 200, 195, 400, 90, -10, 10, $0bb000, $033000, 0, #TG_Fader_Horizontal,5)
;
TextGadget(#Text_Static_1, 5, 510, 40, 20, "Fader 1:")
TextGadget(#Text_Value_1, 50, 510, 40, 20, Str(GetFaderGadgetState(0)))
TextGadget(#Text_Static_2,105, 510, 40, 20, "Fader 2:")
TextGadget(#Text_Value_2, 155, 510, 40, 20, Str(GetFaderGadgetState(1)))
TextGadget(#Text_Static_3,605, 5, 40, 20, "Fader 3:")
TextGadget(#Text_Value_3, 650, 5, 40, 20, Str(GetFaderGadgetState(Any_Fader)))
TextGadget(#Text_Static_4,605, 105, 40, 20, "Fader 4:")
TextGadget(#Text_Value_4, 650, 105, 40, 20, Str(GetFaderGadgetState(2)))
TextGadget(#Text_Static_5,605, 195, 40, 20, "Fader 5:")
TextGadget(#Text_Value_5, 650, 195, 40, 20, Str(GetFaderGadgetState(3)))
Repeat
event = WaitWindowEvent(20)
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 0, 1, 2, 3, Any_Fader
FaderUpdate(EventGadget(), EventType())
If OldValue_1 <> GetFaderGadgetState(0)
SetGadgetText(#Text_Value_1, Str(GetFaderGadgetState(0)))
OldValue_1 = GetFaderGadgetState(0)
EndIf
If OldValue_2 <> GetFaderGadgetState(1)
SetGadgetText(#Text_Value_2, Str(GetFaderGadgetState(1)))
OldValue_2 = GetFaderGadgetState(1)
EndIf
If OldValue_3 <> GetFaderGadgetState(Any_Fader)
SetGadgetText(#Text_Value_3, Str(GetFaderGadgetState(Any_Fader)))
OldValue_3 = GetFaderGadgetState(Any_Fader)
EndIf
If OldValue_4 <> GetFaderGadgetState(2)
SetGadgetText(#Text_Value_4, Str(GetFaderGadgetState(2)))
OldValue_4 = GetFaderGadgetState(2)
EndIf
If OldValue_5 <> GetFaderGadgetState(3)
SetGadgetText(#Text_Value_5, Str(GetFaderGadgetState(3)))
OldValue_5 = GetFaderGadgetState(3)
EndIf
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
End
Voilà, voilà...