cProgressBar class
Draws a progress bar, horizontal or vertical, into the screen buffer of the full-screen mode.
A cProgressBar keeps the Buffer of the console it was made with. Its Render members write a bar made of a filled part and an empty part into that buffer; they do not clear the cells around the bar and do not write to the console. Refresh of the console shows the result. The filled part is drawn with the character U+2588 (a full block), in green, and the empty part with U+2591 (a light shade), in dark grey, unless the call says otherwise.
Dim con As New cConsole
Dim bar As cProgressBar
Dim ci As ConsoleCharInfo
con.EnterFullScreenMode ' before the bar is made: it keeps the buffer
Set bar = New cProgressBar(con)
bar.Render 0, 0, 10, 50
ci = con.Buffer.GetChar(4, 0)
Debug.Print Hex$(AscW(ci.Char)) & " " & ci.ForeColor
ci = con.Buffer.GetChar(5, 0)
Debug.Print Hex$(AscW(ci.Char)) & " " & ci.ForeColor
con.ExitFullScreenMode
' Output:
' 2588 10
' 2591 8
In the syntax lines of this page, object is a cProgressBar. Columns and rows are counted from 0 in the buffer, and a position is a column and a row, in that order.
Common behaviour
In every Render member, percent is a Double from 0 to 100; a value outside the range is taken as the nearest end. The number of filled cells is CLng(percent / 100 * size), which rounds half to even, so 25 percent of 10 cells is 2 cells. The filled and empty parts together are exactly size cells.
filledChar and emptyChar are strings of which only the first character is used; an empty string raises error 5, Invalid procedure call or argument. The colours filledColor and emptyColor are ConsoleColor values, and the cells have a black background. A cell outside the buffer is dropped.
A bar that is made before the console enters full-screen mode holds no buffer, and its first Render raises error 91, Object variable or With block variable not set; see How a component works.
Constructor
New
Creates a progress bar for a console.
Syntax: New cProgressBar ( console )
- console
- required A cConsole that is in full-screen mode.
Keeps the console and its current Buffer. When the console is not in full-screen mode, the buffer is Nothing and every Render member raises error 91. The bar keeps that buffer object: after the console leaves full-screen mode and enters it again, the console has a new buffer and the bar still draws into the old one.
Methods
GetProgressColor
Returns a colour for a percentage: one colour for low values, one for medium values and one for high values.
Syntax: object.GetProgressColor ( percent [ , lowColor [ , midColor [ , highColor ] ] ] ) As ConsoleColor
- percent
- required A Double. This method does not limit the value to 0 to 100.
- lowColor
- optional A ConsoleColor, for values below 50. The default is Green.
- midColor
- optional A ConsoleColor, for values from 50 up to, but not including, 80. The default is Yellow.
- highColor
- optional A ConsoleColor, for values of 80 and above. The default is Red.
The method does not draw, so it needs no buffer.
Dim con As New cConsole
Dim bar As cProgressBar = New cProgressBar(con)
Debug.Print bar.GetProgressColor(10) & " " & bar.GetProgressColor(50) & " " & bar.GetProgressColor(80)
' Output:
' 10 14 12
Render
Draws a horizontal bar.
Syntax: object.Render ( col , row , width , percent [ , filledChar [ , emptyChar [ , filledColor [ , emptyColor ] ] ] ] )
- col, row
- required Long values, the position of the left end of the bar.
- width
- required A Long, the number of cells.
- percent
- required A Double, 0 to 100.
- filledChar
- optional A String, the character of the filled part. The default is U+2588.
- emptyChar
- optional A String, the character of the empty part. The default is U+2591.
- filledColor
- optional A ConsoleColor. The default is Green.
- emptyColor
- optional A ConsoleColor. The default is DarkGray.
The filled part starts at col and the empty part follows it, to col + width - 1. A width of 0 or less draws nothing.
RenderVertical
Draws a vertical bar.
Syntax: object.RenderVertical ( col , row , height , percent [ , filledChar [ , emptyChar [ , filledColor [ , emptyColor ] ] ] ] )
- col, row
- required Long values, the position of the top of the bar.
- height
- required A Long, the number of cells.
- percent, filledChar, emptyChar, filledColor, emptyColor
- As for Render.
The filled part grows from the bottom, in the cells from row + height - 1 upwards, and the empty part is drawn from row downwards.
RenderWithAutoColor
Draws a horizontal bar whose filled colour depends on the percentage.
Syntax: object.RenderWithAutoColor ( col , row , width , percent [ , filledChar [ , emptyChar [ , emptyColor [ , lowColor [ , midColor [ , highColor ] ] ] ] ] ] )
- col, row, width, percent, filledChar, emptyChar
- As for Render.
- emptyColor
- optional A ConsoleColor. The default is DarkGray.
- lowColor, midColor, highColor
- optional ConsoleColor values for GetProgressColor. The defaults are Green, Yellow and Red.
Chooses the filled colour with GetProgressColor and calls Render. Note the order of the parameters: the empty colour comes before the three colours, and there is no filledColor.
RenderWithBrackets
Draws a horizontal bar between square brackets.
Syntax: object.RenderWithBrackets ( col , row , width , percent [ , filledChar [ , emptyChar [ , filledColor [ , emptyColor [ , bracketColor ] ] ] ] ] )
- col, row, width, percent, filledChar, emptyChar, filledColor, emptyColor
- As for Render, except that width includes the two brackets.
- bracketColor
- optional A ConsoleColor, the colour of the brackets. The default is Gray.
Draws [ at col, the bar in the width - 2 cells after it, and ] at col + width - 1. Despite its source comment, the method draws no percentage; RenderWithLabel does.
RenderWithLabel
Draws a label, a horizontal bar and the percentage in a row.
Syntax: object.RenderWithLabel ( col , row , width , percent , label [ , filledChar [ , emptyChar [ , filledColor [ , emptyColor [ , labelColor ] ] ] ] ] )
- col, row, width, percent, filledChar, emptyChar, filledColor, emptyColor
- As for Render, except that width is the width of the whole row: label, bar and percentage.
- label
- required A String, written first.
- labelColor
- optional A ConsoleColor, the colour of the label and the percentage. The default is Gray.
The row is the label, a space, the bar, a space, and the percentage rounded to a whole number with a percent sign. The bar gets what is left of width after the label and the percentage text. The text has one character more for each digit of the rounded percentage, so the bar is one cell narrower at 10 percent and at 100 percent than just below them. When the bar would be less than 3 cells wide, the method draws only the label, a space and the percentage, in labelColor, and no bar.
See Also
- cVBar class – vertical bar charts
- cSparkline class – line charts of a series of values
- DrawProgressBar of cConsole – a bar that is written to the console directly, without a buffer
- cConsoleBuffer class – the buffer that the bar draws into