Code: Alles auswählen
EnableExplicit
; ##################################################################################################
; ########################### ProgressbarGadget by Alexander N ###########################
; ########################### -> http://www.alexander-n.de/ <- ###########################
; ########################### for PB 4.xx [03.06.2007 14:14] ###########################
; ##################################################################################################
Structure ProgressbarGadgetOwn
created.l
image.l
ImageGadget.l
x.l
y.l
width.d
height.d
Minimum.d
Maximum.d
backgroundcolor.l
frontcolor.l
ShowPercent.l
textcolor.l
state.d
EndStructure
#ProgressbarGadgetOwnMax = 99
Global Dim ProgressBarGadgetOwnData.ProgressbarGadgetOwn(#ProgressbarGadgetOwnMax)
Procedure RedrawProgressbarGadgetOwn(ProgressbarGadgetOwn.l)
Protected tmp$
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
With ProgressBarGadgetOwnData(ProgressbarGadgetOwn)
If \created
If StartDrawing(ImageOutput(\image))
Protected tmp.l = Abs((\width/(\Maximum-\Minimum)*\state))
Box(0,0,\width,\height,\backgroundcolor)
Box(0,0,tmp,\height,\frontcolor)
DrawingMode(#PB_2DDrawing_Transparent)
tmp$ = Str(tmp/\width*100)+"%"
DrawText(\width/2-TextWidth(tmp$)/2,\height/2-TextHeight(tmp$)/2,tmp$,\textcolor)
DrawingMode(#PB_2DDrawing_Outlined)
Box(0,0,\width,\height,0)
StopDrawing()
SetGadgetState(\ImageGadget,ImageID(\image))
ProcedureReturn #True
EndIf
EndIf
EndWith
EndIf
EndProcedure
Procedure SetProgressbarGadgetOwnState(ProgressbarGadgetOwn.l, state.l)
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
If ProgressBarGadgetOwnData(ProgressbarGadgetOwn)\created
ProgressBarGadgetOwnData(ProgressbarGadgetOwn)\state = state
RedrawProgressbarGadgetOwn(ProgressbarGadgetOwn)
ProcedureReturn #True
EndIf
EndIf
EndProcedure
Procedure GetProgressbarGadgetOwnState(ProgressbarGadgetOwn.l)
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
If ProgressBarGadgetOwnData(ProgressbarGadgetOwn)\created
ProcedureReturn ProgressBarGadgetOwnData(ProgressbarGadgetOwn)\state
EndIf
EndIf
EndProcedure
Procedure SetProgressbarGadgetOwnAttribute(ProgressbarGadgetOwn.l,Attribute.l,Value.l)
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
With ProgressBarGadgetOwnData(ProgressbarGadgetOwn)
If \created
If Attribute = #PB_ProgressBar_Maximum
\Maximum = Value
ProcedureReturn #True
ElseIf Attribute = #PB_ProgressBar_Minimum
\Minimum = Value
ProcedureReturn #True
EndIf
EndIf
EndWith
EndIf
EndProcedure
Procedure GetProgressbarGadgetOwnAttribute(ProgressbarGadgetOwn.l,Attribute.l)
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
With ProgressBarGadgetOwnData(ProgressbarGadgetOwn)
If \created
If Attribute = #PB_ProgressBar_Maximum
ProcedureReturn \Maximum
ElseIf Attribute = #PB_ProgressBar_Minimum
ProcedureReturn \Minimum
EndIf
EndIf
EndWith
EndIf
EndProcedure
Procedure ResizeProgressbarGadgetOwn(ProgressbarGadgetOwn.l,x.l,y.l,width.l,height.l)
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
With ProgressBarGadgetOwnData(ProgressbarGadgetOwn)
If \created
If x <> #PB_Ignore
\x = x
EndIf
If y <> #PB_Ignore
\y = y
EndIf
If width <> #PB_Ignore
\width = width
EndIf
If height <> #PB_Ignore
\height = height
EndIf
ResizeImage(\image,\width,\height,#PB_Image_Smooth)
ResizeGadget(\ImageGadget,\x,\y,\width,\height)
RedrawProgressbarGadgetOwn(ProgressbarGadgetOwn)
ProcedureReturn #True
EndIf
EndWith
EndIf
EndProcedure
Procedure ProgressBarGadgetOwn(ProgressbarGadgetOwn.l, x.l, y.l, width.l, height.l, Minimum.l, Maximum.l, backgroundcolor.l=$FFFFFF, frontcolor.l=16711680, ShowPercent.l= 0, textcolor.l=0)
Protected image.l, Gadget.l, i.l
If ProgressbarGadgetOwn = #PB_Any
For i = 0 To #ProgressbarGadgetOwnMax
If ProgressBarGadgetOwnData(i)\created = 0
ProgressbarGadgetOwn = i
Break
EndIf
Next
EndIf
image = CreateImage(-1, width, height, 32)
If image
Gadget.l = ImageGadget(-1, x, y, width, height, ImageID(image))
If Gadget
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
With ProgressBarGadgetOwnData(ProgressbarGadgetOwn)
\created = 1
\ImageGadget = Gadget
\image = image
\x = x
\y = y
\width = width
\height = height
\Minimum = Maximum
\Maximum = Minimum
\backgroundcolor = backgroundcolor
\frontcolor = frontcolor
\ShowPercent = ShowPercent
\textcolor = textcolor
\state = 0
EndWith
RedrawProgressbarGadgetOwn(ProgressbarGadgetOwn)
ProcedureReturn ProgressbarGadgetOwn
EndIf
EndIf
EndIf
EndProcedure
Procedure FreeProgressbarGadgetOwn(ProgressbarGadgetOwn.l)
If ProgressbarGadgetOwn <= #ProgressbarGadgetOwnMax
With ProgressBarGadgetOwnData(ProgressbarGadgetOwn)
If \created
FreeImage(\image)
FreeGadget(\ImageGadget)
\created = 0
\ImageGadget = 0
\image = 0
\x = 0
\y = 0
\width = 0
\height = 0
\Minimum = 0
\Maximum = 0
\backgroundcolor = 0
\frontcolor = 0
\state = 0
ProcedureReturn #True
EndIf
EndWith
EndIf
EndProcedure
Procedure test(i)
For i = 0 To 100
SetProgressbarGadgetOwnState(0,i)
If i = 20
ResizeProgressbarGadgetOwn(0,50,50,200,#PB_Ignore)
EndIf
If i = 70
ResizeProgressbarGadgetOwn(0,80,#PB_Ignore,500,20)
EndIf
Delay(100)
Next
EndProcedure
OpenWindow(0,0,0,800,600,"")
CreateGadgetList(WindowID(0))
ProgressBarGadgetOwn(0,5,5,500,20,0,100,$FFFFFF,$FF0000,1)
CreateThread(@test(),0)
While WaitWindowEvent() <> 16 : Wend