Code : Tout sélectionner
Declare MyProgressBarCallback(hWnd,msg,wParam,lParam)
Declare MyProgressBarGadget(gadget, x, y, Width, Height, Minimum, Maximum, Flags=0)
Declare StyleMyProgressBar(gadget,imageID,backColor=-1)
Structure MyProgressBarData
oldCallback.i
imageID.i
backColor.l
vertical.l
EndStructure
Define EventID, state, bar3
Define i
CreateImage(1,1,20)
If StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(RGB($FF,$FF,$FF))
FrontColor(RGB($00,$FF,$00))
GradientColor(0.2,RGB($A0,$FF,$A0))
LinearGradient(0, 0, 0, 20)
Box(0,0,1,20)
StopDrawing()
EndIf
CreateImage(2,1,20)
If StartDrawing(ImageOutput(2))
Box(0,0,1,20,RGB($00,$00,$FF))
For i = 2 To 20 Step 5
Plot(0,i,RGB($FF,$FF,$00))
Next
StopDrawing()
EndIf
CreateImage(3,10,20)
If StartDrawing(ImageOutput(3))
Box(0,0,10,20,RGB($FF,$00,$00))
LineXY(0,0,10,20,RGB($FF,$FF,$FF))
StopDrawing()
EndIf
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
MyProgressBarGadget(1,10,10,WindowWidth(0)-20,20,0,100)
StyleMyProgressBar(1,ImageID(1))
MyProgressBarGadget(2,10,50,WindowWidth(0)-20,20,0,150)
StyleMyProgressBar(2,ImageID(2),RGB($00,$00,$00))
bar3 = MyProgressBarGadget(#PB_Any,10,90,WindowWidth(0)-20,20,0,200)
StyleMyProgressBar(bar3,ImageID(3),RGB($FF,$FF,$80))
AddWindowTimer(0,0,33)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
ElseIf EventID = #PB_Event_Timer
state + 1
SetGadgetState(1,state)
SetGadgetState(2,state)
SetGadgetState(bar3,state)
If state = 100
RemoveWindowTimer(0,0)
EndIf
EndIf
ForEver
EndIf
Procedure MyProgressBarCallback(hWnd,msg,wParam,lParam)
Protected *mem.MyProgressBarData
Protected w, h, state, range, minValue, p.f
Protected hDC, brush, ps.PAINTSTRUCT
Protected gadget = GetWindowLongPtr_(hWnd,#GWLP_ID)
*mem = GetGadgetData(gadget)
If Not *mem : ProcedureReturn DefWindowProc_(hWnd,msg,wParam,lParam) : EndIf
w = GadgetWidth(gadget)
h = GadgetHeight(gadget)
If msg = #WM_ERASEBKGND
hDC = wParam
If *mem\backColor <> -1
SelectObject_(hDC, GetStockObject_(#NULL_PEN))
brush = CreateSolidBrush_(*mem\backColor)
SelectObject_(hDC, brush)
Rectangle_(hDC,0,0,w,h+1)
DeleteObject_(brush)
ProcedureReturn #True
EndIf
ElseIf msg = #WM_PAINT
hDC = BeginPaint_(hWnd,@ps)
state = GetGadgetState(gadget) - minValue
range = GetGadgetAttribute(gadget,#PB_ProgressBar_Maximum) - minValue
If range < 0 : range = -range : EndIf
p = (state / range)
w = Int(w * p)
If *mem\imageID
brush = CreatePatternBrush_(*mem\imageID)
SelectObject_(hDC, brush)
PatBlt_(hDC,0,0,w,h+1,#PATCOPY)
;Rectangle_(hDC,0,0,w,h)
DeleteObject_(brush)
EndIf
EndPaint_(hWnd,@ps)
ProcedureReturn 0
EndIf
If *mem\oldCallback
ProcedureReturn CallWindowProc_(*mem\oldCallback,hWnd,msg,wParam,lParam)
EndIf
EndProcedure
Procedure MyProgressBarGadget(gadget, x, y, Width, Height, Minimum, Maximum, Flags=0)
Protected *mem.MyProgressBarData
Protected g
g = ProgressBarGadget(gadget,x,y,Width,Height,Minimum,Maximum,Flags)
If gadget = #PB_Any
gadget = g
EndIf
*mem = AllocateMemory(SizeOf(MyProgressBarData))
If *mem
*mem\oldCallback = SetWindowLongPtr_(GadgetID(gadget),#GWLP_WNDPROC,@MyProgressBarCallback())
*mem\backColor = -1
*mem\vertical = Flags & #PB_ProgressBar_Vertical
SetGadgetData(gadget,*mem)
EndIf
ProcedureReturn g
EndProcedure
Procedure StyleMyProgressBar(gadget,imageID,backColor=-1)
Protected *mem.MyProgressBarData
If IsGadget(gadget) And GadgetType(gadget)=#PB_GadgetType_ProgressBar
*mem = GetGadgetData(gadget)
If *mem
*mem\backColor = backColor
*mem\imageID = imageID
InvalidateRect_(GadgetID(gadget),0,1)
EndIf
EndIf
EndProcedure
;
; EPB