Is your server running slowly? Check with SolarWinds ipMonitor
Get a free evaluation copy of ipMonitor
Contents for Ezine 88 - Progress Bar
I am torn between wanting to create a consistent format for the ezine, so that you know what to expect, and wanting to provide fresh material.
This week I have erred on the side of giving you something different. In response to readers' requests for a progress bar, I researched a script at JSWare. For once, I am truly putting myself in your shoes. I admit that at first I did not understand the
JSWare code. (Is that how you feel about my scripts?) Then as I examined the methods and traced the sub routines, it began to make sense. (Is
that what happens when you read my code?) If there was one thing that surprised me, it was that the Progress bar relies on Internet Explorer for its shell. Finally, I got bolder and started altering
values to slow down or speed up the progress bar. (It's my greatest wish that you amend my scripts.)
If you are looking for handy network utilities, try some of the free downloads at
Tools4Ever
We have all seen progress bars that lie. NT 4.0 had a classic bar that would whiz up to 99% then you had to wait half an hour for the last 1%. Having dissected a few of these progress bar scripts, I
can see that they all include a timing variable, which is just a best guess as to how long the event will take to complete.
From a scripting point of view, you would probably add this code at the beginning of a script that took a long time to execute. The good news is that you can adjust the timer variable in your progress bar
script. IEProgBar- Progress Bar Class VBScript samples from JSWare - www.jsware.net JSWare www.jsware.net jsware@jsware.net
PrerequisitesThis script should run on any Windows machine
Instructions for Creating JSWare Progress Bar Script
- Copy and paste the example script below
into notepad or use a VBScript editor.
-
One advantage of a good script editor such as OnScript is that you can see the line numbers. (Free download of OnScript Button Top Right)
- Save the file with a .vbs extension, for example:
ProgressBar.vbs
- Double click ProgressBar.vbs and check the message box.
' ProgressBar.vbs ' VBScript to display a progress bar ' JSWare ' ------------------------------------------------------------------' Dim bar, i Set bar = new IEProgBar
With bar .Move -1, -1, 500, -1 .Units = 30 .Show For i = 0 to 28 WScript.Sleep 500 .Advance Next End With Set bar = Nothing
'-------- Start Progress bar Class
---------------------------------- Class IEProgBar Private FSO, IE, BCol, TCol, ProgCol, ProgNum, ProgCaption, Pic, Q2, sTemp, iProg, ProgTitle
Private Sub Class_Initialize() On Error Resume
Next Set FSO = CreateObject("Scripting.FileSystemObject") sTemp = FSO.GetSpecialFolder(2) Set IE = CreateObject("InternetExplorer.Application") With IE .AddressBar = False .menubar = False
.ToolBar = False .StatusBar = False .width = 400 .height = 120 .resizable = True End With BCol = "E0E0E4" '--background color. TCol = "000000" '--caption text color. ProgCol = "0000A0"
'--progress color. ProgNum = 19 'number of progress units. ProgCaption = "Progress. . ." ProgTitle = "Progress" Q2 = chr(34) iProg = 0 '--to track progress. End Sub
Private Sub
Class_Terminate() On Error Resume Next IE.Quit Set IE = Nothing Set FSO = Nothing End Sub
Public Sub Show() Dim s, i, TS On Error Resume Next s = "<HTML><HEAD><TITLE>" &
ProgTitle & "</TITLE></HEAD>" s = s & "<BODY SCROLL=" & Q2 & "NO" & Q2 & " BGCOLOR=" & Q2 _ & "#" & BCol & Q2 & " TEXT=" & Q2 & "#" & TCol & Q2 & ">" If (Pic <> "") Then s = s & "<IMG SRC=" & Q2 &
Pic & Q2 & " ALIGN=" & Q2 & "Left" & Q2 & ">" End If If (ProgCaption <> "") Then s = s & "<FONT FACE=" & Q2 & "arial" & Q2 & " SIZE=2>" _ & ProgCaption & "</FONT><BR><BR>" Else s = s & "<BR>"
End If s = s & "<TABLE BORDER=1><TR><TD><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR>" For i = 1 to ProgNum s = s & "<TD WIDTH=16 HEIGHT=16 ID=" & Q2 & "P" & Q2 & ">" Next s = s & "</TR></TABLE></TD></TR></TABLE><BR><BR></BODY></HTML>"
Set TS = FSO.CreateTextFile(sTemp & "\iebar1.html", True) TS.Write s TS.Close Set TS = Nothing IE.Navigate "file:///" & sTemp & "\iebar1.html" IE.visible = True End Sub
'-- Advance
method colors one progress unit. ' iProg variable tracks how many '-- units have been colored. ' Each progress unit is a <TD> with ID="P". They can be '-- accessed in sequence through
Document.All.Item.
Public Sub Advance() On Error Resume Next If (iProg < ProgNum) and (IE.Visible = True) Then IE.Document.All.Item("P", (iProg)).bgcolor = Q2 & "#" _ & ProgCol & Q2 iProg
= iProg + 1 End If End Sub
'--resize and/or position window. Use -1 For any value Not being Set. Public Sub Move(PixLeft, PixTop, PixWidth, PixHeight) On Error Resume Next If (PixLeft >
-1) Then IE.Left = PixLeft If (PixTop > -1) Then IE.Top = PixTop If (PixWidth > 0) Then IE.Width = PixWidth If (PixHeight > 0) Then IE.Height = PixHeight End Sub
'--remove Registry settings
that display advertising in the IE title bar. '-- This change won't show up the first time it's used because the IE '-- instance has already been created when the method is called.
Public Sub
CleanIETitle() Dim sR1, sR2, SH On Error Resume Next sR1 = "HKLM\Software\Microsoft\Internet Explorer\Main\Window Title" sR2 = "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title" Set SH
= CreateObject("WScript.Shell") SH.RegWrite sR1, "", "REG_SZ" SH.RegWrite sR2, "", "REG_SZ" Set SH = Nothing End Sub
'------------- Set background color: ---------------------
Public
Property Let BackColor(sCol) If (TestColor(sCol) = True) Then BCol = sCol End Property
'------------- Set caption color: ---------------------
Public Property Let TextColor(sCol) If (TestColor(sCol)
= True) Then TCol = sCol End Property
'------------- Set progress color: ---------------------
Public Property Let ProgressColor(sCol) If (TestColor(sCol) = True) Then ProgCol = sCol End
Property
'------------- Set icon: ---------------------
Public Property Let Icon(sPath) If (FSO.FileExists(sPath) = True) Then Pic = sPath End Property
'------------- Set title text:
---------------------
Public Property Let Title(sCap) ProgTitle = sCap End Property
'------------- Set caption text: ---------------------
Public Property Let Caption(sCap)
ProgCaption = sCap End Property
'------------- Set number of progress units: ---------------------
Public Property Let Units(iNum) ProgNum = iNum End Property
'--confirm that color
variables are valid 6-character hex color codes: '-- If Not 6 characters Then TestColor = False '-- If any character is Not 0-9 or A-F Then TestColor = False
Private Function TestColor(Col6) Dim
iB, sB, iB2, Boo1 On Error Resume Next TestColor = False If (Len(Col6) <> 6) Then Exit Function For iB = 1 to 6 sB = Mid(Col6, iB, 1) iB2 = Asc(UCase(sB)) If ((iB2 > 47) and (iB2 < 58)) or
((iB2 > 64) and (iB2 < 71)) Then Boo1 = True Else Boo1 = False Exit For End If Next If (Boo1 = True) Then TestColor = True End Function
End Class
Guy Learning Points Note 1: Probably the easiest way to adjust the speed is to change line 13:
WScript.Sleep 500. For example to speed up try WScript.Sleep 80. (80/1000s of a second) Note 2: A different tactic is to change these two values on lines 10 and 12.: .Units = 30
.Show For i = 0 to 28 For example change them each to equal 100. Or you could do something silly and just change one of the pair to = 5. Note 3: Other challenges you could try are
resizing the progress bar, or even changing to read something other than Progress bar... See Line 41 ProgCaption. JSWare Notes - Well worth studying Usage:To create Progress Bar: Dim ob Set ob = New IEProgBar
To close the bar window just set the object to nothing. Methods and Properties: Methods - * Show - displays progress bar by writing file, causing IE to open it and setting
IE visible. * Advance - advances progress by 1 unit. * Move(Left, Top, Width, Height) - moves and/or resizes window. All parameters must be used. use -1 For any dimension Not being changed: ob.Move 10,
10, -1, -1 default size is 400 W x 120 H. default position is Windows default. * CleanIETitle - removes Registry settings that append advertising to the page title in the IE title bar so that only
the specified Title property will be displayed. (This is a general change to IE and is not reversible with this script as written. It does not work the first time the method is used because the IE instance has
already been created when the method is called. Properties - * BackColor - 6-character hex code to specify background color. default is "E0E0E4". * TextColor - 6-character hex
code to specify caption text color. default is "000000". * ProgressColor - 6-character hex code to specify progress color. default is "0000A0". * Title - window title text. default is "Progress" *
Caption - text caption in window. default is "Progress. . ." * Units - number of progress units to use. default is 20. * Icon - path of any image file that can be used as an icon. (JPG, GIF, BMP or ICO)
default is no icon. If an icon is specified it appears to left of caption. Note about Progress window title: The Title property works by using the Title property value within the <TITLE> tag
in the HTML page that creates the progress bar. The default title caption includes the words, "Microsoft Internet Explorer". The title caption may also include other advertising text, depending upon
where you got your copy of Internet Explorer. The CleanIETitle method will remove all advertising from the IE title bar but be aware that it's a change to IE rather than just a setting in the progress
bar.
If you are looking for a progress bar, then here is an elegant script to produce a moving bar. In reality, you may wish to to add this to regular scripts, particularly those that install software or
read or write intensively. Take the time to study the code and try and make adjustments, particularly with WScript.Sleep.
Their topics and material are ideal for getting you started with VBScript. The
videos are easy to follow and you can control the pace. Try their free demo material and then see if you want to buy the full package.
See more about VB Script Training CD.
|