Another Vista progress bar
Posted: Sat Mar 01, 2008 3:37 pm
Hi,
just did a small green bar which looks not that bad...
Download: http://sudokuprogram.googlepages.com/ProgressBar.zip
Michael
[/url]
just did a small green bar which looks not that bad...
Download: http://sudokuprogram.googlepages.com/ProgressBar.zip
Michael
Code: Select all
; Define
DataSection
GreenLeft: IncludeBinary "Data\GL.bmp"
GreenMid: IncludeBinary "Data\GM.bmp"
GreenRight: IncludeBinary "Data\GR.bmp"
GrayLeft: IncludeBinary "Data\XL.bmp"
GrayMid: IncludeBinary "Data\XM.bmp"
GrayRight: IncludeBinary "Data\XR.bmp"
GreenLefto: IncludeBinary "Data\HL.bmp"
GreenMido: IncludeBinary "Data\HM.bmp"
GreenRighto: IncludeBinary "Data\HR.bmp"
GrayLefto: IncludeBinary "Data\YL.bmp"
GrayMido: IncludeBinary "Data\YM.bmp"
GrayRighto: IncludeBinary "Data\YR.bmp"
EndDataSection
Enumeration 10000
#Progress_Dummy
#Progress_GreenLeft
#Progress_GreenMid
#Progress_GreenRight
#Progress_GrayLeft
#Progress_GrayMid
#Progress_GrayRight
#Progress_GreenLefto
#Progress_GreenMido
#Progress_GreenRighto
#Progress_GrayLefto
#Progress_GrayMido
#Progress_GrayRighto
EndEnumeration
CatchImage(#Progress_GreenLeft,?GreenLeft)
CatchImage(#Progress_GreenMid,?GreenMid)
CatchImage(#Progress_GreenRight,?GreenRight)
CatchImage(#Progress_GrayLeft,?GrayLeft)
CatchImage(#Progress_GrayMid,?GrayMid)
CatchImage(#Progress_GrayRight,?GrayRight)
CatchImage(#Progress_GreenLefto,?GreenLefto)
CatchImage(#Progress_GreenMido,?GreenMido)
CatchImage(#Progress_GreenRighto,?GreenRighto)
CatchImage(#Progress_GrayLefto,?GrayLefto)
CatchImage(#Progress_GrayMido,?GrayMido)
CatchImage(#Progress_GrayRighto,?GrayRighto)
#Progress_SmallHeight=11; 11 Pixel Höhe (klein)
#Progress_BigHeight=15; 15 Pixel Höhe (groß)
#Progress_Width=32; 32 Pixel Breite
#Progress_Double=64; doppelte Breite
#Progress_BigOffset=6; 6 Bilder pro Größe
Enumeration
#ProgressBar
EndEnumeration
Structure ProgressBarType
Image.l
ImageID.l
Gadget.l
Length.l
Height.l
Size.l
EndStructure
Global Progress_MaxCount=5
Global Dim Progress_Database.ProgressBarType(Progress_MaxCount)
; EndDefine
Procedure ProgressBarValue(ID,Value)
Protected x
With Progress_Database(ID)
; Value 0..1023
If Value<1024
Value*\Length
Value>>10
Else
Value=\Length-1
EndIf
StartDrawing(ImageOutput(\Image))
; Grauer Balken
DrawImage(ImageID(#Progress_GrayLeft+\Size),0,0)
DrawImage(ImageID(#Progress_GrayRight+\Size),\Length-#Progress_Width,0)
If \Length>#Progress_Double
DrawImage(ImageID(#Progress_GrayMid+\Size),#Progress_Width,0,\Length-#Progress_Double,\Height)
EndIf
; Grüner Balken
If Value>1
If Value<#Progress_Double
x=(Value+1)>>1
GrabImage(#Progress_GreenLeft+\Size,#Progress_Dummy,0,0,x,\Height)
DrawImage(ImageID(#Progress_Dummy),0,0)
GrabImage(#Progress_GreenRight+\Size,#Progress_Dummy,#Progress_Width-x,0,x,\Height)
DrawImage(ImageID(#Progress_Dummy),Value-x,0)
Else
DrawImage(ImageID(#Progress_GreenLeft+\Size),0,0)
DrawImage(ImageID(#Progress_GreenMid+\Size),#Progress_Width,0,Value-#Progress_Double,\Height)
DrawImage(ImageID(#Progress_GreenRight+\Size),Value-#Progress_Width,0)
EndIf
EndIf
StopDrawing()
SetGadgetState(\Gadget,\ImageID)
EndWith
EndProcedure
Procedure CreateProgressBar(ID,x,y,Length,Size)
; Length muss mindestens 40 Pixel betragen
With Progress_Database(ID)
If Size
\Size=6
Size=#Progress_BigHeight
Else
\Size=0
Size=#Progress_SmallHeight
EndIf
\Length=Length
\Height=Size
\Gadget=ImageGadget(#PB_Any,x,y,Length,Height,Size)
\Image=CreateImage(#PB_Any,Length,Size)
\ImageID=ImageID(\Image)
ProgressBarValue(ID,0)
EndWith
EndProcedure
Procedure Main()
OpenWindow(0,0,0,300,100,"Vistabar by Michael Vogel",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
CreateProgressBar(0,40,10,220,0)
CreateProgressBar(1,40,30,220,0)
CreateProgressBar(2,40,52,110,0)
CreateProgressBar(3,160,50,100,1)
CreateProgressBar(4,40,74,220,1)
While WaitWindowEvent(10)<>#PB_Event_CloseWindow
ProgressBarValue(0,n>>4)
ProgressBarValue(1,z)
ProgressBarValue(2,z<<1)
ProgressBarValue(3,n>>5)
n0=n%2048 : If n0>>10 : n0=2048-n0 : EndIf
ProgressBarValue(4,n0%1024)
z+1
n+Random(19)
Wend
EndProcedure
Main()