A simple themed progressbar
In this recent article "Generate gradients images with APIs"
http://yousfi.over-blog.com/2015/01/generate-gradients-images-with-apis.html
we made code to build images with gradients colors.Can be small dimensions.
Now we can use these images to build a simple progressbar .I chose 5 images to do the job and embed them in the yprogressbar class as encoded.The code decodes them and use the image.pictureVAL property to rebuild them as a normal picture.
the image is stretched to 2 and a timer make the progression.
All these are in the prg below.can rebuild visual objects with this easily.
see some screenshots below.
*Please correct the end line marked &&& below with '999%'] (pb rendered text editor)
*Begin code
publi yform
yform=newObject("yprog")
yform.show
read events
retu
*
DEFINE CLASS yprog AS form
BorderStyle = 2
Height = 250
Width = 407
ShowWindow = 2
ShowTips = .T.
AutoCenter = .T.
Backcolor=rgb(196,217,111)
Caption = "A simple themed progressbar"
MaxButton = .F.
Name = "Form1"
ADD OBJECT yprogressbar1 AS yprogressbar WITH ;
Top = 15, ;
Left = 26, ;
Name = "Yprogressbar1", ;
Image1.Name = "Image1", ;
Timer1.Name = "Timer1", ;
Label1.Name = "Label1"
ADD OBJECT command2 AS commandbutton WITH ;
Top = 135, ;
Left = 122, ;
Height = 37, ;
Width = 109, ;
FontSize = 12, ;
Caption = "GO !", ;
Mousepointer=15, ;
ForeColor = RGB(255,0,0), ;
BackColor = RGB(0,255,0), ;
Name = "Command2"
ADD OBJECT spinner1 AS spinner WITH ;
Height = 37, ;
KeyboardHighValue = 6, ;
KeyboardLowValue = 1, ;
Left = 242, ;
SpinnerHighValue = 6.00, ;
SpinnerLowValue = 1.00, ;
ToolTipText = "themes (1-5)", ;
Top = 135, ;
Width = 37, ;
Value = 1, ;
Name = "Spinner1"
PROCEDURE command2.Click
thisform.yprogressbar1.ycall(thisform.spinner1.value)
ENDPROC
PROCEDURE DESTROY
CLEA EVENTS
ENDPROC
ENDDEFINE
*yProgressbar here
DEFINE CLASS yprogressbar AS container
Width = 349
Height = 61
BackStyle = 1
SpecialEffect = 1
Borderwidth=0
Visible = .F.
BackColor = RGB(0,0,0)
Name = "yprogressbar"
ADD OBJECT image1 AS image WITH ;
Stretch = 2, ;
Height = 60, ;
Left = 0, ;
Top = 0, ;
Width = 48, ;
Name = "Image1"
ADD OBJECT timer1 AS timer WITH ;
Top = 12, ;
Left = 312, ;
Height = 23, ;
Width = 23, ;
Enabled = .F., ;
Interval = 100, ;
Name = "Timer1"
ADD OBJECT label1 AS label WITH ;
FontBold = .T., ;
FONTNAME="ARIAL BLACK",;
FontSize = 14, ;
BackStyle = 0, ;
Caption = "", ;
Height = 37, ;
Left = 137, ;
Top = 19, ;
Width = 85, ;
ForeColor = RGB(255,0,0), ;
Name = "Label1"
PROCEDURE ycall
lparameters num
if pcount()=0 or empty(num)
return .f.
endi
if !inlist(num,1,2,3,4,5,6)
num=1
endi
declare integer Sleep in kernel32 integer
local m.myvar
do case
case num=1
text to m.myvar noshow
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
endtext
case num=2
text to m.myvar noshow
iVBORw0KGgoAAAANSUhEUgAAAIAAAAAjCAYAAABctgKLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAADGSURBVHhe7dyhEkFRFEbh/cebiVSi0cxoZiRBEiRBEhRBURRFkATJjOZxzhvxIGt9z7Dmzr3n7H3TWvuVsPKpMgCwvDoDIMujbwBkuQ0NgCyXsQGQ5TQ1ALIc5gZAlt3SAMiyWRsAWVZbAyDLYm8AZJkdDYAsk7MBkGV0NQCyDO4GQJbe0wDI0r0NgCz1NQAynwBwvgPA+RUA5zkAnCeBcN4FwHkbCOc8AJwTQXDOBMI5FQznXgCcm0Fw7gbCuR0M5/8B0Kr+3ls7QHE8Y0kAAAAASUVORK5CYII=
endtext
case num=3
text to m.myvar noshow
iVBORw0KGgoAAAANSUhEUgAAAIEAAAAiCAIAAAD3Si1HAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACpSURBVGhD7dorDkJBFIPh2uuxaDQajUaj0Vg0Go0muXBfy8R3Aa35k28Hk8yZOa2kEW3DiDLtvijT/osyHX4o0/GHMp0mlOk8oUyXCWW6TijTbUaZ7jPK9FhQpueCMr1WlOm9okyfDWXaNpT5mSDP7ybk+YxGnr9Vked/NuT57gJ5vsNDnu+ykeeZDvI820SeZ/zI864L8rzzhTzvPiLPO8DI8y48wobxDzLSnWgHgZKZAAAAAElFTkSuQmCC
endtext
case num=4
text to m.myvar noshow
iVBORw0KGgoAAAANSUhEUgAAAIAAAAAiCAIAAAAYiEZ5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACqSURBVGhD7dshbgJAFEXRa6ux1bVYdG0VAgwCFEmDISQYEBgQGEwNGBKCYZllF9fc5GxhMvP+f8OYR0RMuUbEjEtELDhFxJJ9RKzYRMSa34jYMo+IHZOIOPATEUe+I+LMKKJ3FBtGxB9fEXHjMyLuDCLiyUdEvIipEyDrDpD1CpKVA2QlYVmzIFnTUFn7AFkbMVk7YVmtCFm9IFnNOFndUFntaFn/A1Rc/wG3YJzESv808QAAAABJRU5ErkJggg==
endtext
case num=5
text to m.myvar noshow
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
endtext
case num=6
text to m.myvar noshow
iVBORw0KGgoAAAANSUhEUgAAAGsAAAAbCAIAAAD0/+aaAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJESURBVGhD7dSxahRBAIfxe4k7dy+5JWCVmFII+ABa2ElQ7AJJc6JgY2NaCz2xMAdJEVRQ04RAEkgbECvBwi7PkzluWYcve9/Mpb7lV2XmY+DPkU632+31encW322/TpivqpZH4+Hln4O/V0c5fv/bz4fWoXVoHVqH9qaw1Wj8YmWlKsuyUxTFh73h6a83X86f7p88Tnr3dT0fWofWoXVoHdpWYauw2Pu9Yb3gz4tXuDELHnNoHVqH1qF1aN3B8fN+vz9Z8PBsE2et8JhD69A6tA6tQ+vC/dGPjcmC4XeIs1bxS0loHVqH1qF1aF1T5S7YBDnQOrQOrUPr0Lo4zFowDpLQOrQOrUPr0Dq06QUROLQOrUPr0Dq0Dm2QWBC3HVqH1qF1aB1ah3bKFsRVh9ahdWgdWofWoW3MXBD3HFqH1qF1aB1ahzbWviAuObQOrUPr0Dq0Di20LIgbLg6T0Dq0Dq1D69DexAVx7JoqB1qH1qF1aB3aVv8XxIGLn0lC69A6tA5tEvJZFgu2QyvqBfFXh8ccWofWoXVoHVo394J4zKF1aB1ah9ahdeH+fAvGLyWhdWgdWofWoXXTZI4Fm2dyoHVoHVqH1qF1TZW7YBPkQOvQOrQOrUPr4jBrwThIQuvQOrQOrUPr0E4WLIri7ed7uNdA4NA6tA6tQ+vQOrQfvz2sF3y2s4qrUwgcWofWoXVoHVqHNth+/aBecDBYerJ1d3e85oGIwyS0Dq1D69A6tJ++P9p6eb+qlusFw7/CxXfLryyvAYuRNGHb/CU1AAAAAElFTkSuQmCC
endtext
endcase
with this.image1
.pictureVAl=strconv(m.myvar,14)
.width=0
endwith
with this
.visible=.t.
.timer1.enabled=.t.
endwith
ENDPROC
PROCEDURE image1.Init
this.width=0
this.left=0
ENDPROC
PROCEDURE timer1.Timer
local m.x,m.val
m.delta=3
with this.parent.image1
.parent.label1.zorder(0)
.width=.width+m.delta
m.val=100*.width/.parent.width
if m.val<=100
.parent.label1.caption=;
trans[100*.width/.parent.width,'999 %' ] &&&correct end here (pb editor)
else
.parent.label1.caption=;
trans[100,'999 %']
endi
if .width>=.parent.width
this.enabled=.f.
sleep(1000)
.width=0
this.parent.visible=.f.
endi
endwith
ENDPROC
ENDDEFINE
*
*End code