Contributed samples and applications by Dr. Claudio Soto
A simple way to modify the cursor …
Displays a box on the screen.
Syntax
DispBox( <nTop>, <nLeft>, <nBottom>, <nRight>, ; [<cnBoxString>] , [<cColor>] ) --> NIL
Arguments
<nTop> and <nLeft> : screen coordinates for the upper left corner of the DispBox()output
<nBottom> and <nRight> : screen coordinates for the lower right corner of the DispBox()output
<cnBoxString> : The appearance of the box to display can either be specified as numeric 1 (single line box), numeric 2 (double line box), or as a character string holding up to nine characters. The first eight characters define the border of the box while the ninth character is used to fill the box. #define constants to be used for <cnBoxString> are available in the BOX.CH #include file.
Pre-defined box strings for DispBox()
Constant Description --------------- ---------------------------------------- B_SINGLE Single-line box B_DOUBLE Double-line box B_SINGLE_DOUBLE Single-line top, double-line sides B_DOUBLE_SINGLE Double-line top, single-line sides
If no <cnBoxString> is specified, a single-line box is drawn. <cColor> : SetColor() compliant color string; default is the standard color of SetColor().
Return
DispBox() returns always NIL.
Description
The function DispBox() displays a box on the screen as specified with <cnBoxString>, using the standard color of SetColor() or <cColor>, if specified.
If a character string is used for <cnBoxString>, the first eight characters define the border of the box in clockwise direction, beginning with the upper left corner. An optional ninth character fills the area inside the box. Alternatively, a single character can be passed which is used to draw the entire box border. When the box is completely drawn, the cursor is positioned at the coordinates <nTop>+1 and <nLeft>+1, so that a subsequent DispOut() call starts displaying in the upper left corner of the box area.
Example
// The example demonstrates how characters are used to draw a box. // Alphabetic characters define <cnBoxString> instead of characters // holding graphic signs. #include "Box.ch" PROCEDURE Main CLS DispBox( 10,10,20,50, "AbCdEfGhi", "W+/R" ) Inkey(0) DispBox( 10,10,20,50, B_DOUBLE + Space(1) ) DispOut( "Using #define constant" ) @ MaxRow(),0 RETURN
Seealso
@…BOX, @…CLEAR, @…TO, Scroll(), SetColor()
Draw a single- or double-line box
Syntax
@ <nTop>, <nLeft> TO <nBottom>, <nRight> [DOUBLE] [COLOR <cColorString>]
Arguments
<nTop>, <nLeft>, <nBottom>, and <nRight> define the coordinates of the box. @…TO draws the box using row values from zero to MAXROW() and column values from zero to MAXCOL(). <nBottom> and <nRight> can be larger than the screen size, but output is clipped at MAXROW() and MAXCOL().
DOUBLE draws the box with a double line. If not specified, the box is drawn with a single line.
COLOR <cColorString> defines the display color of the drawn box. If not specified, the box is drawn using the standard color setting of the current system color as defined by SETCOLOR(). Note that <cColorString> is a character expression containing the standard color setting. If you specify a literal color setting, enclose it within quote marks.
Description
@…TO draws a single- or double-line box on the screen. If <nTop> and <nBottom> are the same, a horizontal line is drawn. If <nLeft> and <nRight> are the same, a vertical line is drawn.
After @…TO finishes drawing, the cursor is located in the upper-left corner of the boxed region at <nTop> + 1 and <nLeft> + 1. ROW() and COL() are also updated to reflect the new cursor position.
@…TO is like @…BOX except that @…BOX lets you define the characters of the box and supports a fill character. @…TO, however, is recommended for portability since it does not require the specification of hardware-dependent graphics characters.
Examples
. This example erases a region of the screen, then draws a box of the same size: @ 10, 10 CLEAR TO 20, 40 @ 10, 10 TO 20, 40 DOUBLE COLOR "BG+/B"
Seealso
@…BOX, @…CLEAR, DISPBOX()
Clear a rectangular region of the screen
Syntax
@ <nTop>, <nLeft> [CLEAR [TO <nBottom>, <nRight>]] [DOUBLE] [COLOR <cColor>]
Arguments
<nTop> and <nLeft> define the upper-left corner coordinate.
TO <nBottom>, <nRight> defines the lower-right corner coordinates of the screen region to CLEAR. If the TO clause is not specified, these coordinates default to MAXROW() and MAXCOL().
Description
@…CLEAR erases a rectangular region of the screen by filling the specified region with space characters using the current standard color setting. After @…CLEAR erases the designated region, the cursor is located in the upper corner of the region at <nTop> + 1 and <nLeft> + 1. ROW() and COL() are also updated to reflect the new cursor position.
Examples
. This example erases the screen from 10, 10 to 20, 40, painting the region blue and then displaying a bright cyan box on blue: SETCOLOR("BG+/B") @ 10, 10 CLEAR TO 20, 40 @ 10, 10 TO 20, 40
Sealso
@…BOX, CLEAR SCREEN, SCROLL(), SETCOLOR()
XBXX() Short: ------ XBXX() Draws an exploding box on the screen of a given color Returns: -------- Nothing Syntax: ------- XBxx(nTop,nLeft,nBottom,nRight,[nColor],[nShadow]; [nShadowColor],[cFrame]) Description: ------------ <nTop > - top row <nLeft> - left col <nBottom> - bottom row <nRight> - right column [nColor] - attribute to box default setcolor() [nShadow] - numeric shadow type (default 0) follow numeric keypad 7 = upper left 1 = lower left 3 = lower right 9 = upper right 0 = no shadow [nShadowColor] - shadow attribute (default 7 - grey on black) [cFrame ] - frame string - MUST be 9 characters - default single line Examples: --------- XBXX(10,10,20,20,47,9,8) Notes: ------- Previously a 'C' function, now Clipper 5.01. Source: ------- S_XBXX.PRG
UNBOX() Short: ------ UNBOX() Removes a box created by makebox() Returns: -------- Nothing Syntax: ------- Unbox([cMakeBox],[nTop,nLeft,nBottom,nRight],[expRestScreen] ) Description: ------------ UNBOX restores the screen <cMakeBox> saved by MAKEBOX(). MAKEBOX() stores the dimensions and color in the returned string, so it is not necessary to pass these to UNBOX(). If the dimensions are passed, UNBOX() assumes these are not part of the saved string, and assumes the string is a savescreen() string. If the string and any other single param are passed, UNBOX() assumes it is a full screen (0,0,24,79) restore and does so. [nTop,nLeft,nBottom,nRight] - the dimensions of the box. Use these to UNBOX() a screen saved with SAVESCREEN(). [bcRestScreen] This is a block which can override the default screen restore mechanism. If passed, this screen restore is used instead of the default. To set back to default, pass this parameter as an empty string "". If passing this parameter, pass all other parameters as NIL. What this does, basically, is set up a static variable which holds the screen restore block. Default is {|t,l,b,r,s|restscreen(t,l,b,r,s)} or if sls_xplode() is (.t.), {|t,l,b,r,s|bxx_imbox(t,l,b,r,s)} (an internal function within S_UNBOX.PRG) . Examples: --------- cMsgBox := MAKEBOX(10,40,12,60,'W/R,+GR/R') @11,42 SAY "What's up, Doc ?" inkey(0) UNBOX(cMsgBox) // to set up the alternate screen restore method: unbox(nil,nil,nil,nil,nil,{|t,l,b,r,s| ss_fade(t,l,b,r,s)}) unbox(nil,nil,nil,nil,nil,{|t,l,b,r,s| ss_fall(t,l,b,r,s,100)} ) // to set screen restore back to the default unbox(nil,nil,nil,nil,nil,"") Source: ------- S_UNBOX.PRG
SL_BOX() Short: ------ SL_BOX() Draws a box line from row,col to endrow,endcol Returns: -------- cCode => control string to send to the printer Syntax: ------- SL_BOX(nTop,nLeft,nBottom,nRight,[cShade],[nDPIThick],[nCpi],[nLpi]) Description: ------------ Draws a box from nTop,nLeft to nBottom,nRight. Based on rows and columns. [cShade] refers to the density of the line. The shading percentages are (default "100" - black) : "1 thru 2" = 2% shade "3 thru 10" = 10% shade "11 thru 20" = 20% shade "21 thru 35" = 30% shade "36 thru 55" = 45% shade "56 thru 80" = 70% shade "81 thru 99" = 90% shade "100" = 100% shade [nDPIThick] is the thickness in DotsPerInch of the line. Default is 2. [nCpi] is the characters per inch, and defaults to 10. [nLpi] is the lines per inch, and defaults to 6. Examples: --------- SL_BOX(10,10,20,20,"50",10) // draws a box 10,10 to 20 20 with 50% //shading and 10 DPI thick Notes: ------- Does not send anything to the printer - instead returns a control string that you send to the printer. String can be sent with ? or ?? or QOUT() or QQOUT(). QOUT() or QQOUT(). For HP and compatible(PCL) Laserjet printers. Source: ------- S_HPLAS.PRG
SBUNSHADOW() Short: ------ SBUNSHADOW() Removes shadow drawn with SBSHADOW() Returns: -------- Nil Syntax: ------- SBUNSHADOW(aSaved) Description: ------------ Removes a shadow around a box created with SBSHADOW(). SBSHADOW() returns an array containing the coordinates and saved screens for each side of the shadow. SBUNSHADOW uses this array to restore the previous screens. Examples: --------- Dispbox(10,10,20,20) aSaved := sbshadow(10,10,20,20,3,8) // draws a shadow in the lower right // of color gray on black sbunshadow(aSaved) // restore old screen Source: ------- S_BOXES.PRG
SBSHADOW() Short: ------ SBSHADOW() Draw a shadow around a box Returns: -------- <aSaved> => an array containing the two saved screen sections Syntax: ------- SBSHADOW(nTop,nLeft,nBottom,nRight,nShadowPos,nShadowAtt) Description: ------------ Draws a shadow for box described in coordinates <nTop,nLeft,nBotton,nRight> The shadow is of color <nShadowAtt> and is at position <nShadowPos>, which is one of the following: LOWER LEFT 1 LOWER RIGHT 3 UPPER LEFT 7 UPPER RIGHT 9 Returns an array with the saved screens for each side of the shadow. This array can be passed to SBUNSHADOW() for restoring the previous screen. Examples: --------- Dispbox(10,10,20,20) aSaved := sbshadow(10,10,20,20,3,8) // draws a shadow in the lower right // of color gray on black sbunshadow(aSaved) // restore old screen otes Source: ------- S_BOXES.PRG
SBROWS() Short: ------ SBROWS() Determine number of rows in a box Returns: -------- <nRows> => rows in the box Syntax: ------- SBROWS(nTop,nBottom,[lIncludeFrame]) Description: ------------ The number of rows of a box with top of <nTop> and bottom of <nBottom> is returned. By default, the frame is included (the top and the bottom) [lIncludeFrame] by default is True - and all rows are counted. If passed as False, only the inside rows are counted. Examples: --------- nRows := SBROWS(nTop,nBottom,.f.) for i = nTop to nRows @nTop+i,nLeft say i next Source: ------- S_BOXES.PRG