Commands

DCTABLE..............A command for creating a TABLE in HTML
OVERVIEW_DUAL_COMM...Dual-Mode Commands
OVERVIEW_GUI_COMM....GUI commands
=> (ECHO)............Display the pre-processed output of a DOT PROMPT command
@ DC3STATE...........Create a 3-STATE object for displaying with the GUI reader
@ DCAPPCRT...........Create an APPLICATION CRT object for displaying with GUI reader
@ DCBROWSE...........Create a BROWSE object for displaying with GUI reader
@ DCCHECKBOX.........Create a CHECKBOX object for displaying with GUI reader
@ DCCOMBOBOX.........Create a COMBOBOX object for displaying with GUI reader
@ DCCUSTOM...........Create a CUSTOM object for displaying with GUI reader
@ DCDIALOG...........Create a DIALOG object for displaying with GUI reader
@ DCDIRTREE..........Create a DIRECTORY TREE object for displaying with GUI reader
@ DCFINDBROWSE.......A browse-window find utility that uses AutoSeek
@ DCGET..............Create a GET object for displaying with the text/GUI reader
@ DCGRABOX...........Draw a Box
@ DCGRALINE..........Draw a line
@ DCGRAPROC..........Draw a screen object with a custom procedure
@ DCGRASTRING........Write a text string
@ DCGROUP............Create a GROUP object for displaying with GUI reader
@ DCKLMLE............Create a MULTILINE edit for displaying with GUI reader
@ DCLISTBOX..........Create a LISTBOX object for displaying with GUI reader
@ DCMESSAGEBOX.......Create a MESSAGE BOX area for displaying with GUI reader
@ DCMULTILINE........Create a MULTILINE edit for displaying with GUI reader
@ DCOBJECT...........Define an existing object for displaying with GUI reader
@ DCPICKLIST.........Create a PICKLIST dialog object for displaying with GUI reader
@ DCPRINT BITMAP.....Send BitMap to printer using @..SAY style printing
@ DCPRINT BOX........Send Box to printer using @..SAY style printing
@ DCPRINT LINE.......Send Line to printer using @..SAY style printing
@ DCPRINT MARKER.....Send Marker to printer using @..SAY style printing
@ DCPRINT SAY........Send text to printer using @..SAY style printing
@ DCPROGRESS.........Create a PROGRESS BAR object for displaying with GUI reader
@ DCPUSHBUTTON.......Create a PUSHBUTTON for displaying with GUI reader
@ DCQUICKBROWSE......Create a QUICKBROWSE object for displaying with GUI reader
@ DCRADIOBUTTON......Create a RADIO BUTTON object for displaying with GUI reader
@ DCRIGHTPRINT SAY...Send right-justified text to printer
@ DCSAY GET..........Create a SAY..GET object for displaying with the text/GUI reader
@ DCSCROLLBAR........Create a SCROLL BAR object for displaying with GUI reader
@ DCSPINBUTTON.......Create a SPIN BUTTON get for displaying with GUI reader
@ DCSTATIC...........Create a STATIC object for displaying with GUI reader
@ DCTABPAGE..........Create a TAB PAGE object for displaying with GUI reader
@ DCTOOLBAR..........Create a TOOLBAR object for displaying with GUI reader
@ DCTREEARRAY........Browse a multi-dimensional array using Tree-View
@ DCTREEROOT.........Create a Root object for a Tree View
@ SAYWIN.............Write a SAY text string in a Text or GUI dialog
ABROWSE..............Browse an array
AEDIT................Edit an Array
AEVAL................Evaluate an Array
APPEND...............Append and Edit a new record
APPEND BLANK.........Append a Blank record
APPEND FROM..........Append records from another file
APPEND VIRTUAL.......Append Virtual Record to selected database
AVERAGE..............Average numeric fields in selected database
AVIEW................A Tree style array/object browser
BATCH................Process a Batch file with Dot-Prompt commands
BLANK................Blank record(s) in currently selecte database
BROWSE...............A text-base Database browsing system
CALC.................A popup, full-function calculator
CD | CHDIR...........Change system directory
CHR..................Display an ASCII Character Chart
CLEAR SCOPE..........Clear scoping values for the current work area
CODE DELETE..........Delete a code table
CODE EDIT............Edit a Code Table
CODE IMPORT..........Import a code table
CODE RENAME..........Rename a Code Table
COMPILE..............Compile a source .PRG or all changed .PRGs
CONTINUE.............Continue Locating a record
COPY TO..............Copy records from selected database to a new database
COPYNEW..............Copy only new files to another directory
COUNT................Count records in selected database
CREATE...............Create a new database
CRT..................Run a text-based procedure in a new CRT Window
DATACONVERT..........Convert a database to a different DBE driver
DATE.................A pop-up calendar for selecting a date
DCADDBUTTON..........Add BUTTON to TOOLBAR object for displaying with GUI reader
DCAPPBROWSE..........Create an APPLICATION BROWSE object for displaying with GUI reade
DCAPPEDIT............Create an APPLICATION EDIT object for displaying with GUI reader
DCAPPFIELD...........Create an APPLICATION FIELD object for displaying with GUI reader
DCBITMAP.............Create a BITMAP object for displaying with the GUI reader
DCBROWSECOL..........Create a BROWSE column object for displaying with GUI reader
DCDOT................Invoke a Dot-prompt window
DCFINDADDCOL.........Add column to an array to be used by DCFINDBROWSE
DCFORM...............A command for creating FORM tags in HTML
DCFRAME..............A command for creating FRAME tags in HTML
DCFRAMESET...........A command for creating FRAMESET tags in HTML
DCGETOPTIONS.........Set the options for the Dialog Reader
DCGRUMPBROW..........An emulation of Greg Lief's GRUMPBROW
DCHOTKEY.............Set a Hot-Key for action by the GUI Reader
DCHTML...............A command for creating any HTML output
DCHTMLBODY...........A ccommand for creating the body tag of an HTML document
DCHTMLMAIN...........A ccommand for creating the main HTML document
DCHYPERLINK..........A command for creating HYPERLINK tags in HTML
DCIMAGE..............A command for creating IMAGE tags in HTML
DCINPUT..............A command for creating input elements for HTML forms
DCLDEBUG.............Send debug information to a debugging Log File
DCLDEBUGOFF..........Send debug information to a debugging Log File
DCLDEBUGOFFQUIET.....Send debug information to a debugging Log File
DCLDEBUGQUIET........Send debug information to a debugging Log File
DCLIST...............A command for creating lists in HTML
DCLISTITEM...........A command for creating list items in HTML
DCMENUBAR............Create a MENUBAR object for displaying with Text/GUI reader
DCMENUITEM...........Add Item to SUBMENU object for displaying with Text/GUI reader
DCMSGBOX.............Display an array of messages in a window
DCPRINT ?/??.........Send text to printer using ?/?? style printing
DCPRINT ABORT........Abort the print job
DCPRINT ATTRIBUTE....Set the Attributes for printing with DCPRINT commands
DCPRINT EJECT........Eject the printer page
DCPRINT EVAL.........Evaluate a code block to imbed custom graphs in printed page
DCPRINT FONT.........Set the Font for printing with @..SAY style coordinates
DCPRINT OFF..........Destroy a printer object
DCPRINT ON...........Create a printer class object for @..SAY style printing
DCPRINT OPTIONS......Create an option array for setting printing defaults
DCPRINT SIZE.........Set the size of the print page in rows and columns
DCQDEBUG.............Send debug information to a debugging CRT window
DCQDEBUGOFF..........Send debug information to a debugging CRT window
DCQDEBUGOFFQUIET.....Send debug information to a debugging CRT window
DCQDEBUGQUIET........Send debug information to a debugging CRT window
DCQOUT...............Send data to the default CRT window
DCQOUT WINDOW........Establish or Create a CRT window for debugging GUI apps
DCREAD GUI...........Read the DIALOG GetList with the GUI reader
DCREAD HTML..........Read the DIALOG GetList with the HTML reader
DCREAD TEXT..........Read the DIALOG GetList
DCSETGROUP...........Set the GROUP name for successive DC* commands
DCSETPARENT..........Set the Parent object for successive DC* commands
DCSTATUSBAR..........Create a Status Bar area on the perimiter of a dialog
DCSUBMENU............Add Submenu to MENUBAR object for displaying with Text/GUI reader
DCTABGROUP...........A command for creating TABPAGES in HTML
DCTREEITEM...........Create a new item for a Tree View
DCVARS...............A command for managing HIDDEN variables in HTML
DELETE...............Mark record(s) for deletion
DELETE FILE..........Delete a file
DELETE TAG...........Delete a tag from a combined index
DIR..................Display a directory of files or databases
DISPLAY MEMORY.......Display the contents of a memory file or current memory
DISPLAY STATUS.......Display System status window
DISPLAY STRUCTURE....Display the structure of the selected database
DLL LIST.............List all loaded dynamic .DLLs
DLL LOAD.............Load a dynamic .DLL
DLL UNLOAD...........UnLoad a dynamic .DLL
EDIT FILE............Edit a source file
EDIT VIRTUAL.........Edit the Virtual Record
FILE DELETE..........Delete a file group from the DCFILES.DBF dictionary
FILE EDIT............A Database File / Work area Definition editor
FILE IMPORT..........Import File Group(s) from the Import File Dictionary
FILE RESTORE.........Restore work areas, indexes, relations, from dictionary
FILE SAVE............Save Work area definition array to dictionary
FIND.................GUI dialog for finding a record using an index
GO BOTTOM............Go to the Bottom of a set of Scoped Records
GO TOP...............Go to the Top of a set of Scoped Records
GUI..................Set the Dialogue mode to GUI or TEXT
HELP.................Display HELP for a command or function
HUNT.................Hunt for a record by search all indexes
IF ELSE..............Evaluate a list of expressions based on a condition
INDEX FIELDS.........Create index tags for all fields in a database
INDEX ON.............Create an index
INKEY................Display Inkey() and AppEvent() values for pressed keys
INSERT...............Insert Blank or Virtual records in selected database
INTERPRET............Interpret a command string
LOCATE...............Locate a record
LOCK.................Lock the current record
LOCK EDIT............Maintain the "Lock" definition database
LOCK FILE............Lock the current file
LOG..................Write system status to a log file
LOGIN................Login to application to establish user rights
MENU CREATE..........Create a new menu with Menu Editor
MENU EDIT............A Complex Pull-Down Menu Editor
MODIFY STRUCTURE.....Modify the structure of a database
OBJ LOAD.............Dynamically load an Xbase++ compiled .OBJ for execution
PACK.................Pack the current database
PROGRAM..............Run a Program from the Program Dictionary
PROGRAM MAINTENANCE..Maintain the DCPROG.DBF Program Dictionary File
PURGE................Purge duplicate records from a database
RECALL...............Recall record(s) that were previously marked for deletion
REPLACE..............Assign new values to field variables
REPLACE VIRTUAL......Replace the current record contents with Virtual record arra
RESTORE ARRAY........Restore a multidimensional array from a binary file
RESTORE DATA.........Restore work areas
RESTORE SET..........Restore the SET environment from a file
SAVE ARRAY...........Save a multidimensional array to a binary file
SAVE DATA............Save info about all open workareas to an array
SAVE SET.............Save the SET environment to a file
SAVE VIRTUAL.........Save current record to Virtual record
SEARCH...............Search all fields in a set of databases for a value
SEEK.................Seek a record in a set of Scoped Records
SELECT...............Select a database from a picklist of open files
SET..................Pop up an editing screen for all SET environment variables
SET ............Set and/or view an environment variable
SET AUTOLOCK.........Toggle automatic File/Record locking
SET BATCH............Create a command to run a batch file
SET COMMAND..........Create a command to run an executable program
SET DBE | RDD........Select a database driver
SET DOSKEY...........Set Dot-Prompt command stack to DOS-Key emulation
SET DOTSTACK.........Set the size of the Dot-prompt command stack
SET EDITOR...........Establish the default source code editor
SET FLDKEY...........Establish the hot key for popping up a field list
SET GUI..............Set the Dialogue mode to GUI or TEXT
SET ODIR.............Establish the working directory for .OBJ files
SET ODPERCENT........Set percentage update of progress odometer
SET PDIR.............Establish the working directory for .PRG files
SET PROCEDURE........Create a command to run a function or procedure
SET PROMPT...........Establish the type of prompt for the Dot-prompt
SET RELATION.........Set a relation with a child scope
SET SCOPE............Set a scoping value for the current work area
SET STATUS...........Toggle display of GUI Status Window
SET TALK.............Toggle display of pre-processed output
SET USEEXCLDATA......Force Exclusive use of application databases
SET XPPOPT...........Set the default Compiler switches
SET XPPPATH..........Set the directory when the Compiler resides
SKIP.................Skip records in a set of Scoped Records
STACK................Display the callstack and optionally edit the source
SUM..................Sum numeric fields in selected database
TAG..................Build or add to a Record Tag Array
TAG CLEAR............Clear the Record Tag Array
UNLOCK...............Unlock the current record
USE..................Open a database file in a work area
USER EDIT............Maintain the DCUSERS.DBF User Database
UTIL.................A menu of database utilities
WHERE PUBLIC.........List .OBJ(s) that contain public function
WHERE SOURCE.........Display a list of .OBJ/.PRG files containing PUBLIC proc
ZAP..................Zap the database
USER-DEFINED COMMANDSCreate a User-Defined object for displaying with GUI reader
DBU..................A Gui Database Management Utility
DCAPICK..............A dialogue for choosing a item from an array pick list.
DCREPORT FORM........A Windows compatible replacement for REPORT FORM

DCTABLE

A command for creating a TABLE in HTML

Syntax:

   @ [ < nRow >, < nCol > ] DCTABLE         ;
         [OBJECT < oTable >               ;
         [BORDER < nBorder >]             ;
         [ROWS < nRows >]                 ;
         [COLS,COLUMNS < nCols >]         ;
         [TRIMROWS]                     ;
         [TRIMCOLS]                     ;
         [FILL < cFill >]                 ;
         [ALIGN < nAlign >]               ;
         [PARENT < oParent >]             ;
         [PARENTID < cPID >]              ;
         [BGCOLOR < xBGColor > ]          ;
         [BORDERCOLOR < xBorderColor >]   ;
         [BORDERCOLORLIGHT < xBorderColorLight >] ;
         [BORDERCOLORDARK < xBorderColorDark >]  ;
         [CELLPADDING < nCellPadding >]   ;
         [CELLSPACING < nCellSpacing >]   ;
         [HSPACE < nHspace >]             ;
         [VALIGN < nValign >]             ;
         [VSPACE < nVspace >]             ;
         [WIDTH < cWidth >]               ;
         [CLASS < cClass >]               ;
         [CARGO < xCargo >]               ;
         [PRE,PRETEXT < bcPreHTML >]      ;
         [POST,POSTTEXT < bcPostHTML >]   ;
         [HIDE < bHide >]                 ;
         [EVAL < bEval >]                 ;
         [TITLE < cTitle >]               ;
         [ID < cId >]                     ;
         [GROUP < cGroup >]
   

Arguments:

   < nRow > and < nCol > are the row number and column number of
   the table if the parent of this object is a DCTABLE. The
   text will be inserted in the cell of the table defined by
   the row/column.
   
   OBJECT < oTable > is the name of the variable to assign as a
   storage place for this object.
   
   PARENT < oParent > is the name of the variable that was
   assigned to the parent of this table. If this argument
   is not passed then the parent will be the object set with
   the DCSETPARENT command.
   
   PARENTID < cParentID > may be used in lieu of the PARENT < oParent >
   clause.  This identifies the ID of the parent instead of the
   parent's object variable name.
   
   TRIMCOLS will suppress writing < td >< /td > column tags
   that are empty when at the end of columns.
   
   TRIMROWS will suppress writing < tr >< /tr > column tags that
   are empty when at the end of rows.
   
   ROWS < nRows > is the number of rows in the table.
   
   COLS,COLUMNS < nCols > is the number of columns in the table.
   
   HSPACE < nHSpace > is the number of pixels of space on the
   outside of the table on both the left and right side.
   
   VSPACE < nVSpace > is the number of pixels of space on the
   outside of the table on both the top and bottom.
   
   FILL < cFill > is a character string to put into each table
   cell.  Any writing to the cells will be appended to the
   fill string.
   
   WIDTH < cWidth > is a character string defining the width of
   the table.  Values may be either an integer--interpreted
   as a number of pixels--or a character string defining a
   percentage of the horizontal or vertical space.   The
   value 50% means half the available space while 50 means
   50 pixels.
   
   CELLPADDING < nCellPadding > defines the amount of space within table
   cells (i.e., between the border and cell contents). The
   value may be given as a number of pixels or as a percentage,
   though most browsers do not support percentages, treating
   "20%" as if it were "20". A percentage value is relative to
   the vertical space available for vertical padding or spacing,
   and the amount is split evenly between the top and bottom.
   Horizontal padding and spacing behave similarly.  The padding
   or spacing is always applied to all four sides.
   
   CELLSPACING < nCellSpacing > defines the amount of space between
   table cells.
   
   Internet explorer lets you alter the colors that make up an
   individual cell's border - if border are turned on with the
   border attribute.  The values for BORDERCOLOR < xBorderColor >,
   BORDERCOLORDARK < xBorderColorDark > and
   BORDERCOLORLIGHT < xBorderColorLight > may be an RGB color
   value (#XXXXXX) , a standard color name, an RGB 3-element
   array or a numeric value defined in GRA.CH.  The different
   colors shade the edges of the border to give it a 3D
   appearance with < nBorderColor > shades the central body of
   the border.
   
   BORDER < nBorder > specifies the width in pixels of the border
   around the table.
   
   ALIGN < nAlign > specifies the default horizontal alignment of
   items in the table cells.  Possible values are left, right,
   and center.
   
   VALIGN < nVAlign > specifies the default vertical alignment of
   items in the table cells.  Possible values are top, bottom,
   and center.
   
   BGCOLOR < xBGColor > specifies the default background color for
   the entire table.  Value may be an RGB color value (#XXXXXX),
   a standard color name, an RGB 3-element array or a numeric
   value defined in GRA.CH.
   
   HEADERS < aHeaders > is an array of character strings
   containing the headers for each column in the table.  The
   length of the array should be equivalent to the number of
   columns.
   
   FOOTERS < aFooters > is an array of character strings
   containing the footers for each column in the table.  The
   length of the array should be equivalent to the number of
   columns.
   
   CLASS < cClass > sets a class name for the table. The class name
   is case sensitive.  A class is used with style sheets to
   give the table a pre-defined appearance.
   
   CARGO < xCargo > is any kind of data you wish to to add to the
   :cargo container of object created by this definition.
   
   PRE,PRETEXT < bcPreHTML > is a character string or a code block
   that returns a character string containing any HTML text
   that will precede the opening < table > tag in the source
   that is written.
   
   POST,POSTTEXT < bcPostHTML > is a character string or a code block
   that returns a character string containing any HTML text
   that will follow the closing < /table > tag in the source
   that is written.
   
   HIDE < bHide > is a code block that is evaluated at the
   time the :writeHtml() method is called for the class that
   supports this command.  If the code block returns a .TRUE.,
   then no HTML code will be written.
   
   EVAL < bEval > is a code block that is evaluated after the
   object is created in DC_ReadHtml().  A pointer to the
   object associated with this command is passed as an
   argument to the code block.
   
   ID < cId > is a unique identifier for this object.  This ID is used
   with functions like DC_GETOBJECT() to determine the status
   of a get object.
   
   TITLE < cTitle > is a title to assign to this object.  The title
   is not used in the HTML output but is simply a description of the
   get object which is saved in the GetList.
   
   GROUP < cGroup > is a "group" name (case-sensitive) to assign to
   this GetList object.  Assignment to a group makes it possible to
   perform operations only on GetList items which are members of a
   specified group.
   

Description:

    The command DCTABLE creates an HTML TABLE definition and
    adds the definition to the array named GETLIST which is later
    processed by the DC_READHTML() function or by the DCREAD HTML
    command.  The GETLIST array must be first declared and
    initialized to the value of {}.  The command DCREAD HTML
    creates all the DC_Html*() objects from the GetList array
    and then invokes the :writeHtml() method of the topmost
    parent object to generate the HTML code.
   
    A Getlist object remains stored as long as it is referenced
    in an array or by a variable.  The commands CLEAR and
    CLEAR GETS assign an empty array to the GetList variable.
    This also occurs after the completion of the DCREAD command
    if it is called without the SAVE option, causing all
    objects referenced by the GetList array to be released.
   
    Any other HTML element may be inserted into a table by
    simply addressing the table element with it's row number
    and column number.  See example.
   

Notes:

   DCTABLE uses the DC_HtmlTable() class to create the table
   object and write the HTML source.
   

Examples:

   /*
   This example will build a table with 4 sub-tables.
   */
   
   FUNCTION Xtest()
   
   LOCAL i, j, GetList[0], cHtml, oTable, nTable, aSubTables[2,2]
   
   DCTABLE OBJECT oTable1 ;
        ROWS 2 ;
        COLUMNS 2 ;
        BORDER 5 ;
        BORDERCOLOR '#336677' ;
        TRIMROWS ;
        TRIMCOLS ;
        BGCOLOR '#339977'
   
   nTable := 1
   FOR i := 1 TO 2
     FOR j := 1 TO 2
       @ i,j DCTABLE ;
         OBJECT aSubTables[i,j] ;
         BGCOLOR '#33AA77' ;
         ROWS 4 ;
         COLUMNS 4 ;
         FILL Alltrim(Str(i)) + '/' + Alltrim(Str(j)) ;
         PARENT oTable1
       @ 1,1 DCSAY '

' + Alltrim(Str(nTable++)) + ; '

' PARENT aSubTables[i,j] NEXT NEXT DCREAD HTML TO cHtml MemoWrit('TEST.HTM',cHtml) RETURN nil

Source/Library:

  DCHTML.CH

See Also:

   DCREAD HTML
   dc_html()
   dc_readhtml()
   dc_htmltable()



OVERVIEW_DUAL_COMM

Dual-Mode Commands

Description:

    DUAL-Mode commands have been designed to work in either
    TEXT mode or GUI mode.  Text mode is selected by calling
    DC_GUI(.f.) and GUI mode is selected by calling DC_GUI(.t.).
   

OVERVIEW_GUI_COMM

GUI commands

Description:

    GUI commands are designed to work only in GUI mode.  When any of
    these commands are used, the dialog reader should be invoked with
    the DCREAD GUI command or the DC_ReadGUI() function.
   

=> (ECHO)

Display the pre-processed output of a DOT PROMPT command

Syntax:

    = > < command >
   

Arguments:

   < command > is the command string to translate.
   

Description:

    The =þ> command is used to display the pre-processed output of
    commands entered at the dot prompt.
   

Examples:

    . => STACK
   DC_CallStack()
   
    . => CLOSE
   dbCloseArea()
   
    . => ? K_ESC
   Qout( 27 )
   

See Also:

   dc_dot()



@ DC3STATE

Create a 3-STATE object for displaying with the GUI reader

Syntax:

   @ < nRow >,< nCol > DC3STATE < uVar > ;
                   [PROMPT < aVar >] ;
                   [SIZE < nWidth > [,< nHeight >]] ;
                   [PARENT < oParent >] ;
                   [PARENTID < cParentID >] ;
                   [MESSAGE < bcMsg > [INTO < oMsg >]] ;
                   [COLOR < bncFgC > [,< ncBgC >] ] ;
                   [HELPCODE < cHelp >] ;
                   [DATALINK < bLink >] ;
                   [FONT < bocFont >] ;
                   [WHEN < bWhen >] ;
                   [PRESENTATION < aPres >] ;
                   [PIXEL] ;
                   [OBJECT < oObject >] ;
                   [TOOLTIP < bcToolTip >] ;
                   [CURSOR < nCursor >] ;
                   [CARGO < xCargo >] ;
                   [HIDE < bHide >] ;
                   [EDITPROTECT < bProtect >] ;
                   [PREEVAL < bPreEval >] ;
                   [EVAL < bEval >] ;
                   [TITLE < cTitle >] ;
                   [RELATIVE < oRel >] ;
                   [ID < cId >] ;
                   [ACCELKEY < anAccel >] ;
                   [GOTFOCUS < bGotFocus >] ;
                   [LOSTFOCUS < bLostFocus >] ;
                   [TABSTOP] ;
                   [NOTABSTOP] ;
                   [TABGROUP < nTabGroup >] ;
                   [VISIBLE] ;
                   [INVISIBLE] ;
                   [GROUP < cGroup >] ;
                   [VALID < bValid >]
   

Arguments:

   < nRow > and < nCol > are the row and column of the screen.
   Coordinates are always relative to position 0,0 ie. Top,Left
   of the parent object, unless the RELATIVE < oRel > argument is
   used.  If no parent is assigned, then the parent is the Dialog
   box. IF the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based coordinates.  You can also force the pixel
   mode by including PIXEL as a command argument.
   
   < nVar > is the variable to GET.  This must be a initialized to
   a numerical value of 0, 1 or 2. It must not be a macro. < nVar >
   is automatically anchored via a Get-Set codeblock created by
   DC_GetAnchorCB() unless < nVar > is a custom Get-Set code block.
   Macros may be used in a custom Get-Set code block.
   
   OBJECT < oObject > is the variable to use as a container for the
   object after it is created by the GUI reader.
   
   RELATIVE < oRel > is an optional object in the Getlist which
   determines the start coordinates of this object.  If this
   option is used, then the < nSrow >, < nSCol > coordinates are
   relative to the starting coordinates of < oRel > rather than
   the parent object.
   
   PROMPT < aPrompt > is an array of 3 character strings, one for
   each state of the 3-state box, to display immediately to the
   right of the 3-state box.
   
   SIZE < nWidth >,< nHeight > is the width and height of the
   prompt.  If the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based numbers.
   
   MESSAGE < bcMsg > is the message you want to display in the
   message area of the dialogue screen defined by the DCMESSAGEBOX
   command when the object is in focus.  Optionally, INTO < oMsgBox >
   will designate which message box to display the message into.
   If the INTO clause is not used, then the last message box in the
   GetList is the default.  < oMsgBox > may also be any object that
   supports the :setCaption() method.  If < bcMsg > is a code-block,
   it must return a character string.
   
   WHEN < bWhen > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .FALSE. then the object will be disabled and grayed.
   If the value returned is .TRUE. then the object will be enabled.
   
   HIDE < bHide > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .TRUE. then the object will be hidden from view.  If
   the value returned is .FALSE. then the object will be displayed.
   
   EDITPROTECT < bProtect > is an optional condition tested during the
   execution of the GUI gets by the DCREAD GUI command, before the
   object receives input focus (before it is activated). When the
   condition returns the value .T. (true), the object receives the
   input focus.  Otherwise, it is skipped. < bProtect > is a code
   block that must return a logical value when evaluated. The object
   is passed to the code block prior to the object receiving input
   focus. This clause behaves similar to the WHEN clause with the
   exception that the object is not disabled (grayed out).
   
   PREEVAL < bPreEval > is a code block to be evaluated by the GUI
   reader before the Xbase Parts object is created.  The object is
   passed to the code block.
   
   EVAL < bEval > is a code block to be evaluated by the GUI reader
   after the Xbase Parts object is created.  The object is passed
   to the code block.
   
   VALID < bValid > is an optional condition tested during the
   execution of the GUI gets by the READ command before a Get
   object loses input focus (before it is deactivated).  When
   the condition returns the value .T. (true), the Get object
   loses the input focus.  Otherwise, it remains active. < bValid >
   is a code block that must return a logical value when it is
   evaluated.  The Get object is passed to the code block prior
   to the Get object losing input focus.
   
   PARENT < oParent > is the name of the variable that was assigned to
   the parent object for this object.  Only use this clause if you
   are placing this object onto another dialogue object. If this
   argument is not passed then the parent will be the object set
   with the DCSETPARENT command.
   
   PARENTID < cParentID > may be used in lieu of the PARENT < oParent >
   clause.  This identifies the ID of the parent instead of the
   parent's object variable name.
   
   DATALINK < bLink > is an optional code block that is evaluated
   every time Get/Set codeblock is evaluated, ie when the data
   is read from the < uVar > into the object, except when using
   a user-defined Get/Set code block.  < bLink > is also
   evaluated when DC_GetRefresh() is called unless the < lDataLink >
   parameter of DC_GetRefresh() is .FALSE.
   
   FONT < cFont > is a character string defining an optional font.
   The font string must conform to the Xbase++ standard, ie.
   "10.Courier.Bold". It may also be a font object or a code block
   that returns a character string or a font object to later
   refresh with DC_GetRefresh().
   
   PRESENTATION < aPres > is a two-dimensional array. If specified,
   this contains presentation parameters for the CheckBox object.
   The first column of the array must contain #define constants
   from the XBP.CH file starting with the prefix XBP_PP_. These
   constants define the presentation parameters that can be set
   for the object and include colors and fonts. The second column
   of the array in < aPres > contains the value for each setting.
   These are also generally set using #define constants from the
   GRA.CH file.
   
   TOOLTIP < bcToolTip > is a character string which will display
   as a "Tool Tip" next to the object when the cursor is passed
   over the object. A semi-colon within the text indicates a new
   line.  If < bcToolTip > is a code-block, it must return a character
   string.  NOTE: The Tooltip painting method is run in another
   thread, therefore the codeblock should not run code that points
   to the current work area.  It may however, contain local, public
   or private variables.
   
   CURSOR < nCursor > is an optional mouse pointer to use for this
   object.  System mouse pointers start with XBPWINDOW_POINTERTYPE_
   and are defined in XPB.CH.  The default pointer is
   XBPWINDOW_POINTERTYPE_POINTER.  < nCursor > may also be a resource
   ID that points to a Bit-Map that has been compiled with the
   resource compiler and linked to the .EXE.
   
   COLOR < bncFGc >, < ncBGc > are foreground and background colors.
   They may be character strings representing valid text-based
   colors supported by SetColor() or they may be numeric constants
   which begin with either the prefix GRA_CLR_ or the prefix
   XBPSYSCLR_ as defined in GRA.CH or XBP.CH.  IF < bncFGc > is a
   code block is must return a 2-element array containing a
   foreground and background color.
   
   ID < cId > is a unique identifier for this object.  This ID is used
   with functions like DC_GETORIGUPDATED() to determine the status
   of a get object.
   
   CARGO < xCargo > is any kind of data you wish to to add to the
   :cargo container for this object.  The cargo may be accessed
   at any time via the :cargo exported variable, however it will not
   be stored in the same manner it is entered.  The :cargo container
   of DCDIALOG objects is an array of at least three elements:
   
     [1] - A numeric value that is a pointer to the Getlist array
           for this object.
   
     [2] - A pointer to the GetList array.
   
     [3] - The value of < xCargo >.
   
     [4] and up - optional values added by the GUI reader.
   
   TITLE < cTitle > is a title to assign to this object.  The title
   is not displayed on the screen but is simply a description of the
   get object which is saved in the GetList.
   
   ACCELKEY < anAccel > is a numeric "hot-key" assignment that will set
   focus to the checkbox object when the hot-key is pressed.  The key
   must be a valid key with the prefix xbeK_*.  These keys are
   defined in APPEVENT.CH.  < anAccel > may also be an array of numeric
   values to assign more than one key to the object.
   
   GOTFOCUS < bGotFocus > is a code block that is evaluated when this
   object receives input focus.
   
   LOSTFOCUS < bLostFocus > is a code block that is evaluated when this
   object loses input focus.
   
   TABSTOP will cause the object (Xbase Part) to be set when using
   the Tab key.  Note: When logical groups are defined in a dialog
   using TABGROUP < nTabGroup >, TABSTOP is usually set to .T. (true)
   for the first dialog element in the group.  This allows the first
   dialog element of a group to be activated using the Tab key.
   
   NOTABSTOP will cause the object (Xbase Part) to be ignored when
   using the Tab key. This clause is needed only to override any
   default setting of TabStop by the DCGETOPTIONS [TABSTOP] command.
   
   TABGROUP < nTabGroup > allows objects (Xbase Parts) that are created
   immediately after one another in the GetList to be combined into
   logical groups. This allows the user to navigate within a dialog
   from group to group by pressing the Tab key.  Within a group of
   dialog elements navigation is performed using the cursor keys.
   
   Only constants defined in the XBP.CH file can be used as values
   for this instance variable.  The following table lists the
   available constants:
   
   #define constants for < nTabGroup >:
   
     Constant             Description
   
     XBP_NO_GROUP     *)  Dialog element does not belong to a group
     XBP_BEGIN_GROUP      Dialog element is the first in a group
                          (this begins the definition of the group)
     XBP_WITHIN_GROUP     Dialog element is within a group
     XBP_END_GROUP        Dialog element is the last in a group
                          (this ends the definition of the group)
   
    *) Default value
   
   GROUP < cGroup > is a "group" name (case-sensitive) to assign to
   this GetList object.  Assignment to a group makes it possible to
   perform operations only on GetList items which are members of a
   specified group, using functions such as DC_GetRefresh() or
   DC_ReadGui().
   
   VISIBLE determines whether the object is visible immediately after
   the call to the method :create() . By default the object follows
   the VISIBLE clause of the DCGETOPTIONS command.  Use the
   INVISIBLE clause to override the VISIBLE clause of DCGETOPTIONS
   
   HELPCODE < cHelp > is a character string that is passed to the
   DC_HelpF1() function if F1 is pressed or the HELP button
   is clicked when this GET has focus.  This HELPCODE allows
   the Help system to override the passing of the Procedure and
   Varname for more specific context-help.
   

Description:

    The command @..DC3STATE creates a new 3-State definitiion
    and adds it to the array named GETLIST which is later
    processed by the DC_Read*() functions or by the DCREAD *
    command.  The GETLIST array must be first declared and
    initialized to the value of {}.
   
    The command DCREAD GUI creates the DC_Xbp*() objects and
    activates the edit mode for all definitions found in the
    GetList array.
   
    The command DCREAD HTML creates the DC_Html*() objects and
    writes the HTML source code.
   
    A Getlist object remains stored as long as it is referenced
    in an array or by a variable.  The commands CLEAR and
    CLEAR GETS assign an empty array to the GetList variable.
    This also occurs after the completion of the DCREAD command
    if it is called without the SAVE option, causing all Get
    objects referenced by the GetList array to be released.
   
    @..DC3STATE objects can be combined with any objects that
    that use the DCDIALOG system, such as @..DCSAY..GET,
    @..DCRADIO, @..DCPUSHBUTTON or @..DCTABPAGE.
   

Notes:

    The 3-state object created by @ DC3STATE is an object of the
    DC_Xbp3State() class which inherits from Xbp3State(), therefore
    it can be manipulated with any iVar or method supported by
    Xbp3State().
   

Examples:

    #include "dcdialog.ch"
   
    FUNCTION Xtest()
   
    LOCAL GetList := {}, aForSale, nForSale := 0, oMsgBox
   
    aForSale := { 'Not for Sale','For Sale','Not Sure' }
   
    @ 2,2 DC3STATE nForSale PROMPT aForSale ;
      SIZE 12 ;
      TABSTOP ;
      MESSAGE 'Is this article FOR SALE?' INTO oMsgBox ;
      TITLE '3-STATE - For Sale?' ;
      ID 'FOR_SALE'
   
    @ 4,2 DCMESSAGEBOX OBJECT oMsgBox SIZE 20,1
   
    DCREAD GUI FIT ADDBUTTONS
   
    RETURN nil
   

Source/Library:

  DCDIALOG.CH

@ DCAPPCRT

Create an APPLICATION CRT object for displaying with GUI reader

Syntax:

   @ < nRow >,< nCol > DCAPPCRT < oCrt > ;
     [SIZE < nHeight > [,< nWidth >]] ;
     [PARENT < oParent >] ;
     [PARENTID < cParentId >] ;
     [CAPTION < cCaption >] ;
     [BORDER < nB >] ;
     [FONT < bocFont >] ;
     [FONTSIZE < nFW >,< nFH >] ;
     [ACTION < bAction >] ;
     [COLOR < bncFgC > [,< ncBgC >] ] ;
     [CARGO < xCargo >] ;
     [THREAD < oThread >] ;
     [HIDE < bHide >] ;
     [PREEVAL < bPreEval >] ;
     [EVAL < bEval >] ;
     [PIXEL] ;
     [RELATIVE < oRel >]
   

Arguments:

   < nRow >, < nCol > are the coordinates on the screen.
   Coordinates are always relative to position 0,0 ie. Top,Left
   of the parent object, unless the RELATIVE < oRel > argument is
   used.  If no parent is assigned, then the parent is the Dialog
   box.  IF the PIXEL option is set to .TRUE. in DCGET OPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based coordinates.  You can also force the pixel mode by
   including PIXEL as a command argument.
   
   < oCrt > is a local memory variable that will be used to store
   the reference to the CRT object.
   
   SIZE < nHeight > ,< nWidth > are the number of rows and
   columns.  The default is 25 rows by 80 columns.
   
   PARENT < oParent > is the name of the variable that was
   assigned to the parent TABPAGE or GROUP for this CRT Object.
   Only  use this command if you are placing this Browse onto
   another dialogue object.  If this argument is not passed then
   the parent will be the object set with the DCSETPARENT command. .
   
   PARENTID < cParentID > may be used in lieu of the PARENT < oParent >
   clause.  This identifies the ID of the parent instead of the
   parent's object variable name.
   
   CAPTION < cCaption > is the title to display in the title
   line of the CRT window.
   
   BORDER < nB > defines the border type of a CRT window. Constants
   defined in the XBP.CH file can be assigned to this instance
   variable. The following table shows the valid #define constants
   for BORDER .
   
   Constants for border types
   
    Constant                           Description
    --------------------------         ---------------------------
    XBPDLG_NO_BORDER                    No border
    XBPDLG_SIZEBORDER                   Window is sizeable
    XBPDLG_THINBORDER               *)  Thin border, window size
                                        can not be changed
    XBPDLG_DLGBORDER                    Thick border, window size
                                        can not be changed
    XBPDLG_RAISEDBORDERTHICK       **)  Thick, raised border
   
    XBPDLG_RAISEDBORDERTHIN         *)  Thin, raised border
    XBPDLG_RECESSEDBORDERTHICK          Thick, recessed border
    XBPDLG_RECESSEDBORDERTHIN       *)  Thin, recessed border
    XBPDLG_RAISEDBORDERTHICK_FIXED      Thick, raised border,
                                        size can not be changed
    XBPDLG_RAISEDBORDERTHIN_FIXED   *)  Thin, raised border,
                                        size can not be changed
   
    XBPDLG_RECESSEDBORDERTHICK_FIXED    Thick, recessed border,
                                        size can not be changed
    XBPDLG_RECESSEDBORDERTHIN_FIXED *)  Thin, recessed border,
                                        size can not be changed
   
   *) not supported by Windows    **) Default border
   
   FONT < cFont > sets the font for the text based display of
   characters in the CRT window. < cFont > is a character expression
   specifying the name of the font. The default value is
   "Alaska CRT". It may also be a font object or a code block
   that returns a character string or a font object to later
   refresh with DC_GetRefresh().
   
   If the requested font is not available, the font that provides
   the "best fit" is installed.
   
   FONTSIZE < nFW >,< nFH > is the Width and Height of the font.
   
   < nFW > sets the width of characters output in text mode (such as
   output by QOut() or @... SAY). The default value is 8.  The font
   width multiplied by the number of columns :maxCol+1 determines the
   width of the CRT window on the screen. The calculation is
   < nFW > * (:maxCol+1) == :xSize . The translation of text mode column
   coordinates to graphic x coordinates is done using < nFW >.
   
   < nFH > is used to set the font height for characters output in the
   text mode (such as output by QOut() or @... SAY). The default
   value is 16. The font height is multiplied by the number of
   rows :maxRow+1 to determine the height of the CRT window on the
   screen. The calculation used is  < nFH > * (:maxRow + 1) == :ySize.
   Translating row coordinates in the text mode to graphic y
   coordinates is also performed using < nFH >.
   
   NOTE: < nFW > and < nFH > are used to select a font with the
   corresponding character width and height.  This is done by the
   methods :create() and :configure() . If the corresponding font is
   not available, the font that provides the "best fit" is installed.
   
   ACTION < bAction > is the program to run in the CRT window when
   it is brought into focus.  If the program is to be run in
   another thread, then the THREAD < oThread > option must be used
   to start the application immediately in a new thread. < oThread >
   is the name of a local variable to store a reference to the
   thread object.
   
   COLOR < bncFgC >,< ncBgC >] is a default color to clear the CRT
   application screen.  The color string must conform to the colors
   supported by SetColor().
   
   CARGO < xCargo > is any kind of data you wish to to add to the
   :cargo container for this object.  The cargo may be accessed
   at any time via the < oCrt >:cargo exported variable, however
   it will not be stored in the same manner it is entered.  The
   :cargo container of DCDIALOG objects is an array of at least
   two elements:
   
    [1] - A numeric value that is a pointer to the Getlist array
          for this object.
   
    [2] - The value of < xCargo >.
   
    [3] and up - optional values added by the GUI reader.
   
   PREEVAL < bPreEval > is a code block to be evaluated by the GUI
   reader before the Xbase Parts object is created.  The object is
   passed to the code block.
   
   EVAL < bEval > is a code block to be evaluated by the GUI reader
   after the Xbase Parts object is created.  The object is passed
   to the code block.
   
   RELATIVE < oRel > is an optional object in the Getlist which
   determines the start coordinates of this object.  If this
   option is used, then the < nRow >, < nCol > coordinates are
   relative to the starting coordinates of < oRel > rather than
   the parent object.
   
   ID < cId > is a unique identifier for this object.  This ID is used
   with functions like DC_GETORIGUPDATED() to determine the status
   of a get object.
   
   HIDE < bHide > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .TRUE. then the object will be hidden from view.  If
   the value returned is .FALSE. then the object will be displayed.
   

Description:

    The command @..DCAPPCRT creates a new Application CRT object
    and adds the object to the array named GETLIST which is later
    processed by the DC_READGUI() function or by the DCREAD GUI
    command.  The GETLIST array must be first declared and
    initialized to the value of {}.  The command DCREAD GUI activates
    the edit mode for all objects found in the GetList array.
    A Getlist object remains stored as long as it is referenced
    in an array or by a variable.  The commands CLEAR and
    CLEAR GETS assign an empty array to the GetList variable.
    This also occurs after the completion of the DCREAD command
    if it is called without the SAVE option, causing all Get
    objects referenced by the GetList array to be released.
   
    A DCAPPCRT object is based on the XbpCrt class which is the GUI
    dialog used for applications partially programmed in text mode.
    An XbpCrt object provides a dialog window for text based and
    graphic oriented screen output.  Using XbpCrt objects,
    applications programmed for text mode can be transitioned into
    pure PM applications in a stepwise. manner.  An XbpCrt object
    can display text output using functions such as QOut() or
    DispOut() and can display Get data entry fields
    (command @... SAY... GET).  They can also include graphic dialog
    elements such as those provided by objects of the XbpPushButton
    and XbpMLE classes.  XbpCrt objects create what are called
    "hybrid" applications because they combine text and graphic
    oriented screen output.
   
    The DCAPPCRT object offers a straightforward way to transition
    existing text mode applications into GUI applications which use
    the eXPress++ dialog system.  An existing CA-Clipper application
    can run in an XbpCrt window after being compiled with Xbase++.
    The program code can be changed to use Xbase Parts that provide
    graphic dialog elements step by step as time permits.
   
    @..DCAPPCRT objects can be combined with any objects that
    that use the DCDIALOG system, such as @..DCSAY..GET,
    @..DCRADIO, @..DCPUSHBUTTON or @..DCMULTILINE.
   

Notes:

    The browse object created by @ DCAPPCRT is an object of the
    XbpCrt() class, therefore it can be manipulated with
    any iVar or method supported by XbpCrt().
   

Source/Library:

  DCDIALOG.CH

@ DCBROWSE

Create a BROWSE object for displaying with GUI reader

Syntax:

   @ < nRow >, < nCol > DCBROWSE < oBrowse > ;
       [DATA < xData > [ELEMENT < nElement >] ] ;
       [ALIAS < cAlias >] ;
       [SIZE < nWidth > [,< nHeight >]] ;
       [PARENT < oParent >] ;
       [PARENTID < cParentId >] ;
       [INTO < aVar >] ;
     * [POINTER < nVar >] ;
     * [DATALINK < bLink >] ;
     * [PRESENTATION < aPres >] ;
     * [CURSORMODE < nCursorMode >] ;
       [COLOR < bncFgC > [,< ncBgC >] ] ;
       [CARGO < xCargo >] ;
     * [PIXEL] ;
       [MESSAGE < bcMsg > [INTO < oMsgBox >]] ;
       [HIDE < bHide >] ;
       [WHEN < bWhen >] ;
     * [RBSELECT] ;
       [PREEVAL < bPreEval >] ;
       [EVAL < bEval >] ;
       [FONT < bocFont >] ;
     * [EDIT < nEditEvent > ;
          [ MODE < nEditMode >] ;
          [ ACTION < bEditAction >] ;
          [ EXIT < bEditExit > ] ] ;
     * [INSERT < nInsertEvent > ;
          [ INSMODE < nInsMode > ] ;
          [ DEFAULT < abDefault >] ;
          [ ACTION < bInsertAction >] ;
          [ EXIT < bInserExit >] ] ;
          [ APPEND < nAppendEvent >] [ APPMODE < nAppMode > ] ];
     * [DELETE < nDeleteEvent > ;
          [ ACTION < bDeleteAction >] ;
          [ EXIT < bDeleteExit > ] ] ;
     * [HANDLER < handler > [REFERENCE < xRef >]] ;
       [RELATIVE < oRel >] ;
     * [ITEMMARKED < bItemMarked >] ;
     * [ITEMSELECTED < bItemSelected >] ;
     * [MARK < nbMark >] ;
     * [MKCOLOR < nbMarkEval >, < nMFgC > [,< nMBgC >] ] ;
       [ID < cId >] ;
     * [FREEZELEFT < aColLeft >  ;
     * [FREEZERIGHT < aColRight >] ;
     * [ACCELKEY < nKey >] ;
     * [GOTFOCUS < bGotFocus >] ;
     * [LOSTFOCUS < bLostFocus >] ;
     * [TABSTOP] ;
     * [NOTABSTOP];
     * [TABGROUP < nTabGroup >] ;
     * [VISIBLE] ;
     * [INVISIBLE] ;
       [SCOPE] ;
     * [THUMBLOCK < nRecords >] ;
     * [NOVSCROLL] ;
     * [NOHSCROLL] ;
     * [NOSOFTTRACK] ;
     * [NOSIZECOLS] ;
       [GROUP < cGroup >] ;
     * [HEADLINES < nHeaderLines > [DELIMITER < cHeadDelim >]] ;
     * [FOOTLINES < nFooterLines > [DELIMITER < cFootDelim >]] ;
     * [FIT] ;
     * [OPTIMIZE] ;
       [TITLE < cTitle >] ;
     * [AUTOREFRESH < nTimer >] ;
       [SORTSCOLOR < anSortedColorFG > [,< anSortedColorBG >] ];
       [SORTUCOLOR < anUnSortedColorFG > [,< anUnSortedColorBG >] ] ;
       [SORTUPBITMAP < nBitmapSortUp >] ;
       [SORTDOWNBITMAP < nBitmapSortDown >] ;
       [DESCENDING]
   

Arguments:

   GUI applications:
   
   < nRow >, < nCol > are the coordinates on the screen.
   Coordinates are always relative to position 0,0 ie. Top,Left
   of the parent object, unless the RELATIVE < oRel > argument is
   used.  If no parent is assigned, then the parent is the Dialog
   box.  IF the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based coordinates.  You can also force the pixel mode by
   including PIXEL as a command argument.
   
   HTML applications:
   
   < nRow > and < nCol > are the row number and column number of
   the table if the parent of this object is a DCTABLE. The
   text will be inserted in the cell of the table defined by
   the row/column.
   
   < oBrowse > is the name of the variable to assign as a storage
   place for this object.
   
   RELATIVE < oRel > is an optional object in the Getlist which
   determines the start coordinates of this object.  If this
   option is used, then the < nSrow >, < nSCol > coordinates are
   relative to the starting coordinates of < oRel > rather than
   the parent object.
   
   ALIAS < cAlias > defines the browse as a database browse. < cAlias)
   is a variable containing the alias of the database to browse.
   
     or
   
   DATA < aData > defines the browse as an array browse.  < aData > is
   a variable containing a pointer to the array to browse.  ELEMENT
   < nElement > is an optional clause defining the selected element of
   < aData >.  CAUTION: If a new array pointer is created that points
   to a different array, then DC_GetBrowArray() must be used to
   update the array pointer in the browse object.
   
   SIZE < nWidth >,< nHeight > is the width and height of the
   prompt.  If the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based numbers.
   
   INTO < aVar > is a memory variable to store a sub-array. This clause
   is used only when browsing arrays.  Each time the user clicks on
   a new row of the array browse, the sub-array selected will be
   stored in < aVar >.  < aVar > must be initialized to an array.
   
   POINTER < nVar > is a memory variable to store the current array
   element pointer. This clause  is used only when browsing arrays.
   Each time the user clicks on a new row of the array browse, the
   browse row (element number) will be stored in < nVar >.  < nVar >
   must be initialized to a numeric value.
   
   PARENT < oParent > is the name of the variable that was assigned to
   the parent object for this object.  Only use this clause if you
   are placing this object onto another dialogue object.  If this
   argument is not passed then the parent will be the object set
   with the DCSETPARENT command.
   
   PARENTID < cParentID > may be used in lieu of the PARENT < oParent >
   clause.  This identifies the ID of the parent instead of the
   parent's object variable name.
   
   DATALINK < bDataLink > is an optional code block to evaluate
   whenever the user double-clicks the mouse or presses the ENTER key
   within the browse area.  The browse object is passed as a
   parameter to the code block.
   
   FONT < cFont > is a character string defining an optional font.
   The font string must conform to the Xbase++ standard, ie.
   "10.Courier.Bold". It may also be a font object or a code block
   that returns a character string or a font object to later
   refresh with DC_GetRefresh().
   
   EDIT < nEditEvent > is an optional clause that enables "cell-editing"
   of the browse cells whenever a specified event occurs that is
   associated with the browse object.  < nEditEvent > is a numeric
   value equivalent to an xbe* event or keyboard value which has
   been defined in APPEVENT.CH.  For example, cell editing will
   occur within the selected cell when < nEditEvent > is equal to
   xbeBRW_ItemSelected and the cell is selected with a mouse
   double-click or the ENTER key is pressed.  MODE < nEditMode > is
   the navigation mode within the cells.  < nEditMode > is a numeric
   value from the following table:
   
     < nEditMode >                 Description
     -----------                 ------------------------------------
     DCGUI_BROWSE_EDITEXIT       Exit cell editing after ENTER key
   
     DCGUI_BROWSE_EDITACROSS     Move to next column after ENTER key
   
     DCGUI_BROWSE_EDITDOWN       Move to next row after ENTER key
   
     DCGUI_BROWSE_EDITACROSSDOWN Move to next column after ENTER key
                                 and move to next row at end of column
   
     DCGUI_BROWSE_EDITACROSSDOWN_APPEND
                                 Move to next column after ENTER key
                                 and move to next row at end of column
                                 Pressing ENTER at last row/last column
                                 appends new element.  Pressing DOWN
                                 arrow key at last row appends new
                                 element.
   
   < bEditAction > is an optional code block that is evaluated before
   the cells are edited.  < bEditExit > is an optional code block that
   is evaluated after the cells are edited.  The browse object is
   passed as a parameter to < bEditAction > and < bEditExit >.
   
   INSERT < nInsertEvent > is an optional clause that enables the
   inserting of an element into the array and editing the cell
   items. < nInsertEvent > is a numeric value equivalent to an xbe*
   event or keyboard value which has been defined in APPEVENT.CH.
   For example, cell insertion will occur at the selected row of
   the browse when < nEditEvent > is equal to xbeK_INS and the browse
   is in focus and the INSERT key is pressed.  < bInsertAction > is an
   optional code block that is evaluated before a new element is
   inserted in the array.  < bInsertExit > is an optional code block
   that is evaluated after exiting the cell editor.  The Browse
   Object is passed as a parameter when evaluating < bInsertAction >
   and < bInsertExit >.  INSMODE < nInsMode > is an additional optional
   clause that can only be used with the INSERT clause.  < nInsMode >
   determines the behavior of insert mode.
   
     < nInsMode >             Description
     -----------            ------------------------------------
     DCGUI_BROWSE_SUBMODE_1 Up/Down arrow keys are ignored.
                            Enter key on last column exits insert.
   
     DCGUI_BROWSE_SUBMODE_2 Up/Down arrow key will move to previous
                            or next row respectively.  If down arrow
                            pressed in last row, will append new
                            element.
   
   APPEND < nAppendEvent > is an additional optional clause that can
   only be used with the INSERT clause.  < nAppendEvent > is a numeric
   value equivalent to an xbe* event or keyboard value. This event
   forces the insertion of the new element at the end of the array
   rather than at the selected row.  APPMODE < nAppMode > is an
   additional optional clause that can only be used with the APPEND
   clause.  < nAppMode > determines the behavior of append mode.
   
     < nAppMode >             Description
     -----------            ------------------------------------
     DCGUI_BROWSE_SUBMODE_1 Up/Down arrow keys are ignored.
                            Enter key on last column exits append.
   
     DCGUI_BROWSE_SUBMODE_2 Up/Down arrow key will move to previous
                            or next row respectively.  If down arrow
                            pressed in last row, will append new
                            element.
   
   
   DELETE < nDeleteEvent > is an optional clause that enables the
   deleting the current selected element (row) of an array or the
   currently selected record. < nDeleteEvent > is a numeric value
   equivalent to an xbe* event or keyboard value which has been
   defined in APPEVENT.CH.  For example, cell deletion will occur
   at the selected row of the browse when < nEditEvent > is equal to
   xbeK_DEL and the browse is in focus and the DELETE key is pressed.
   < bDeleteAction > is an optional code-block that is evaluated before
   the element is deleted.  < bDeleteExit > is an optional code block
   that is evaluated after the element is deleted.  The Browse Object
   is passed as a parameter when evaluating < bDeleteAction > and
   < bDeleteExit >.
   
   HANDLER < cEventHandler > is the name of a Function which points
   to a custom event handler.  The cell editor uses it's own, default
   event handler to manage the objects during the running of the
   program.  The default event handler makes a call to the
   custom event handler before processing it's default events.
   The custom event handler uses Appevent() to get information
   on the current event and passes the following parameters:
   
     1. nEvent   - The event type.
     2. mp1      - The first event parameter.
     3. mp2      - The second event parameter.
     4. oXbp     - A pointer to the object creating the event.
     5. oDlg     - A pointer to the main dialogue object.
     6. aGetlist - A pointer to the GetList array.
     7. aRef     - A pointer to an optional Reference array.
   
     The Function should look like this:
   
     STATIC FUNCTION MyHandler ( nEvent, mp1, mp2, oXbp, oDlg,
                                 aGetlist, aRef )
   
     /* custom code */
   
     RETURN DCGUI_NONE
   
    The function must return a numeric value which controls the
    behavior of the event loop as follows:
   
     Return Value   Behavior
     ------------   --------------------------------------------
     DCGUI_NONE     Continue processing the event
     DCGUI_IGNORE   Ignore event
     DCGUI_CLEAR    Ignore event and clear all events from queue
     DCGUI_EXIT     Exit the Cell editor
   
   REFERENCE < aRef > is any array to pass to the custom event handler.
   Programming dialogue systems that must manipulate many variables
   is much simpler if all the variables are placed into a single
   array and then passed to the dialogue system and its event
   handler.
   
   PRESENTATION < aPres > is a two-dimensional array. If specified,
   this contains presentation parameters for the Browse object.
   The first column of the array must contain #define constants
   from the XBP.CH file starting with the prefix XBP_PP_. These
   constants define the presentation parameters that can be set
   for the object and include colors and fonts. The second column
   of the array in < aPres > contains the value for each setting.
   these are also generally set using #define constants from the
   GRA.CH file.
   
   CURSORMODE < nCursorMode > determines the browse cursor to be
   displayed by the Browse object. #define constants from XBP.CH
   must be used for this mode:
   
     Constant            Description
   
     XBPBRW_CURSOR_NONE  No visible cursor
     XBPBRW_CURSOR_CELL  Cell cursor (default)
     XBPBRW_CURSOR_ROW   Row cursor
   
   PREEVAL < bPreEval > is a code block to be evaluated by the GUI
   reader before the Xbase Parts object is created.  The object is
   passed to the code block.
   
   EVAL < bEval > is a code block to be evaluated by the GUI reader
   after the Xbase Parts object is created.  The object is passed
   to the code block.
   
   CARGO < xCargo > is any kind of data you wish to to add to the
   :cargo container for this object.  The cargo may be accessed
   at any time via the :cargo exported variable, however it will not
   be stored in the same manner it is entered.  The :cargo container
   of DCDIALOG objects is an array of at least three elements:
   
     [1] - A numeric value that is a pointer to the Getlist array
           for this object.
   
     [2] - A pointer to the GetList array.
   
     [3] - The value of < xCargo >.
   
     [4] and up - optional values added by the GUI reader.
   
   COLOR < bncFGc >, < ncBGc > are foreground and background colors.
   They may be character strings representing valid text-based
   colors supported by SetColor() or they may be numeric constants
   which begin with either the prefix GRA_CLR_ or the prefix
   XBPSYSCLR_ as defined in GRA.CH or XBP.CH. IF < bncFGc > is a
   code block is must return a 2-element array containing a
   foreground and background color.
   
   ITEMMARKED < bItemMarked > is a code block to evaluate when a data
   row or a cell is highlighted in the browser.  The code block
   must be formatted as {| aRowCol, uNIL2, self | ... } where
   < aRowCol > is a two-element array { nRowPos, nColPos } which
   indicates the row and column position of the cell that is
   clicked with the left mouse button.
   
   ITEMSELECTED < bItemSelected > is a code block to evaluate when
   a data row is selected with a double-click of the left mouse
   button or by pressing the ENTER key in the browser.  The code
   block must be formatted as {| uNIL1, uNIL2, self | ... }.
   
   MARK < nbMark > is a numeric value or a code block.  A numeric
   value is used to point to the array sub-element which contains
   a logical value.  When the mouse is double-clicked in a browse
   column (item selected), the value in the sub-element is toggled
   between .TRUE. and .FALSE.  IF a code block is entered, then
   a double-click will evaluate the code block.  For example a
   code block can be used to toggle the value of a logical field
   in the selected record.
   
   MKCOLOR < nbMarkEval > is an optional code block to evaluate
   to display "marked" records or array elements.  This code block
   must return a LOGICAL value.  When the value returned is .TRUE.,
   the color of the entire row (all columns) is set to the < ncMFgC >
   and < ncMBgC > colors.  When the value returned is .FALSE., each
   column in the row is displayed in the color established for that
   individual row.
   
   < ncMFgC >, < ncMBgC > are foreground and background colors that
   are selected when < nbMarkEval > evaluates .TRUE.  They may be
   character strings representing valid text-based colors supported
   by SetColor() or they may be numeric constants which begin with
   either the prefix GRA_CLR_ or the prefix XBPSYSCLR_ as defined
   in GRA.CH or XBP.CH.
   
   ID < cId > is a unique identifier for this object.  This ID is used
   with functions like DC_GETORIGUPDATED() to determine the status
   of a get object.
   
   FREEZELEFT < aColsLeft > is an array of numeric values equal to
   the position of the columns in the browse which should be frozen
   at the left side of the browse window and prevented from
   scrolling off the screen.
   
   FREEZERIGHT < aColsRight > is an array of numeric values equal to
   the position of the columns in the browse which should be frozen
   at the right side of the browse window and prevented from
   scrolling off the screen.
   
   MESSAGE < bcMsg > is the message you want to display in the
   message area of the dialogue screen defined by the DCMESSAGEBOX
   command when the object is in focus.  Optionally, INTO < oMsgBox >
   will designate which message box to display the message into.
   If the INTO clause is not used, then the last message box in the
   GetList is the default.  If < bcMsg > is a code-block, it must
   return a character string.
   
   HIDE < bHide > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .TRUE. then the object will be hidden from view.  If
   the value returned is .FALSE. then the object will be displayed.
   
   WHEN < bWhen > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .FALSE. then the object will be disabled and grayed.
   If the value returned is .TRUE. then the object will be enabled.
   
   RBSELECT will cause the right button of the mouse to select a
   browse cell in the same manner as the left button.
   
   ACCELKEY < anAccel > is a numeric "hot-key" assignment that will set
   focus to the checkbox object when the hot-key is pressed.  The key
   must be a valid key with the prefix xbeK_*.  These keys are
   defined in APPEVENT.CH.  < anAccel > may also be an array of numeric
   values to assign more than one key to the object.
   
   GOTFOCUS < bGotFocus > is a code block that is evaluated when this
   object receives input focus.  < bGotFocus > := {|uNIL1,uNIL2,self|...}
   
   LOSTFOCUS < bLostFocus > is a code block that is evaluated when this
   object loses input focus. < bLostFocus > := {|uNIL1,uNIL2,self|...}
   
   TABSTOP will cause the object (Xbase Part) to be set when using
   the Tab key.  Note: When logical groups are defined in a dialog
   using TABGROUP < nTabGroup >, TABSTOP is usually set to .T. (true)
   for the first dialog element in the group.  This allows the first
   dialog element of a group to be activated using the Tab key.
   
   NOTABSTOP will cause the object (Xbase Part) to be ignored when
   using the Tab key. This clause is needed only to override any
   default setting of TabStop by the DCGETOPTIONS [TABSTOP] command.
   
   TABGROUP < nTabGroup > allows objects (Xbase Parts) that are created
   immediately after one another in the GetList to be combined into
   logical groups. This allows the user to navigate within a dialog
   from group to group by pressing the Tab key.  Within a group of
   dialog elements navigation is performed using the cursor keys.
   
   Only constants defined in the XBP.CH file can be used as values
   for this instance variable.  The following table lists the
   available constants:
   
    #define constants for < nTabGroup >:
   
     Constant             Description
   
     XBP_NO_GROUP     *)  Dialog element does not belong to a group
     XBP_BEGIN_GROUP      Dialog element is the first in a group
                          (this begins the definition of the group)
     XBP_WITHIN_GROUP     Dialog element is within a group
     XBP_END_GROUP        Dialog element is the last in a group
                          (this ends the definition of the group)
   
    *) Default value
   
   SCOPE is an optional argument that enables the browse to display only
   the records that adhere to a previous scope that has been set by
   DC_SetScope().  This feature utilizes the functions DC_dbGoTop(),
   DC_dbGoBottom(), DC_dbSkipper(), DC_KeyCount() and DC_KeyNo() in the
   navigation code blocks of the browse to stay in scope.  In addition, the
   vertical scrollbar will accurately show the record position within the
   current scope.
   
   If this argument is not used, the browse will utilize dbGoTop(),
   dbGoBottom(), dbSkipper(), OrdKeyNo() and a modified RecCount() in the
   navigation code blocks of the browse.  These functions will disregard any
   previous settings of DC_SetScope().  Additional filtering must be
   accomplished by using SET FILTER or conditional indexes.
   
   Note: When using the DBFNTX, DBFCDX or FOXCDX drivers,the eXPress++ scoping
   system can slow performance therefore it is recommended that you do not use
   it on large databases unless you also use the THUMBLOCK clause.  The
   eXPress++ scoping system has been designed for optimization, however, when
   using third-party DBE's such as COMIX and Advantage Server and will
   automatically detect that these drivers are being used.  SCOPE also utilizes
   the percentage method for determining the position of the scrollbar thumb by
   using the DC_KeyNo() and DC_KeyCount() functions. If the database contains
   more than 32000 records the thumb is scaled to compensate for the limitation
   of the XbpScrollbar class to only 32k positions. DC_KeyNo() is enabled with
   DC_KeyStat(.T.).
   
   NOTE: If DC_KeyStat() is set to .FALSE. or a Filter is set on the
         database, DC_KeyCount() will return a -1 thereby causing
         the vertical scrollbar thumb to occupy the entire scroll
         area.  It is not possible to determine the key count
         when a filter is set.
   
   THUMBLOCK < nRecords > should be used on very large databases which are
   indexed or on databases that have a filter. This option forces the
   thumb to remain locked in the middle of the vertical scrollbar region
   to prevent the user from forcing a skip request that can take a very
   long time or to move to an incorrect record when a filter is set on
   the database.  If the database contains more than < nRecords > the
   thumb will be locked however the user may still click above and below
   the thumb for page up/page down respectively.  The default is 32,000
   records.  NOTE: THUMBLOCK is ignored if the SCOPE clause is not used.
   
   NOVSCROLL will suppress the vertical scroll bar.
   
   NOHSCROLL will suppress the horizontal scroll bar.
   
   NOSOFTTRACK will force movement of the scroll bars to automatically refresh
   the browse while the bar is moving.
   
   NOSIZECOLS will prevent the user from sizing columns.
   
   VISIBLE determines whether the object is visible immediately after
   the call to the method :create() . By default the object follows
   the VISIBLE clause of the DCGETOPTIONS command.  Use the
   INVISIBLE clause to override the VISIBLE clause of DCGETOPTIONS
   
   GROUP < cGroup > is a "group" name (case-sensitive) to assign to
   this GetList object.  Assignment to a group makes it possible to
   perform operations only on GetList items which are members of a
   specified group, using functions such as DC_GetRefresh() or
   DC_ReadGui().
   
   HEADLINES < nHeaderLines > is the number of lines (rows) to use
   in the column headers.  The default is 1.  DELIMITER < cHeadDelim >
   is the delimiter character(s) which are used to denote the start
   of a new line in the HEADER clause of DCBROWSECOL.  The default
   delimiter is a semi-colon.
   
    Example: DCBROWSECOL HEADER 'Street Address;City/State'
   
   FOOTLINES < nFooterLines > is the number of lines (rows) to use
   in the column footers.  The default is 1.  DELIMITER < cFootDelim >
   is the delimiter character(s) which are used to denote the start
   of a new line in the FOOTER clause of DCBROWSECOL.  The default
   delimiter is a semi-colon.
   
   FIT will automatically size the WIDTH of the browse to the sum
   of the widths of all the columns.  CAUTION: this clause only
   overrides the browse width, not the height.  The SIZE clause must
   still be used to set the browse height and width or a runtime error
   will occur.
   
   OPTIMIZE will enable a double-click in the header column to
   resize the column to the optimum width so all items will fit in
   the column with no truncated items.  The OPTIMIZE clause will
   only work when browsing an array.
   
   TITLE < cTitle > is a title to assign to this object.  The title
   is not displayed on the screen but is simply a description of the
   get object which is saved in the GetList.
   
   AUTOREFRESH < nTimer > is used to set a timer event that automatically
   refreshes the browse window (when it is visible) every
   < nTimer >/100 seconds.
   
   SORTSCOLOR < anSortedColorFG > [,< anSortedColorBG >] is used to set
   the color of the column heading that is chosen as the controlling
   sort order when click the mouse in the column heading.  See the
   SORT clause of DCBROWSECOL.
   
   SORTUCOLOR < anUnSortedColorFG > [,< anUnSortedColorBG >] is used to
   set the color of the column headings that are not the controlling
   sort order.
   
   SORTUPBITMAP < nBitmapSortUp > is used to set the bitmap that is used
   in the column header of the sorted column when the controlling
   order is "ascending".
   
   SORTDOWNBITMAP < nBitmapSortDown > is used to set the bitmap that is used
   in the column header of the sorted column when the controlling
   order is "descending".
   
   DESCENDING is used to set the controlling sort order to descending.
   
   NOTE: The function DC_BrowseSort() is used to set the defaults
         for the SORT* clauses.
   

Description:

    The command @..DCBROWSE creates a new Browse definition and
    adds it to the array named GETLIST which is later processed
    by the DC_Read*() functions or by the DCREAD * commands.
    The GETLIST array must be first declared and initialized to
    the value of {}.
   
    The command DCREAD GUI creates the DC_Xbp*() objects and
    activates the edit mode for all definitions found in the
    GetList array.
   
    The command DCREAD HTML creates the DC_Html*() objects and
    writes the HTML source code.
   
    A Getlist object remains stored as long as it is referenced
    in an array or by a variable.  The commands CLEAR and
    CLEAR GETS assign an empty array to the GetList variable.
    This also occurs after the completion of the DCREAD command
    if it is called without the SAVE option, causing all Get
    objects referenced by the GetList array to be released.
   
    A DCBROWSE object is a parent to DCBROWSECOL objects (the
    columns of the browse).  DCBROWSE is used to browse either
    arrays or databases.
   
    @..DCSAY..GET objects can be combined with any objects that
    that use the DCDIALOG system, such as @..DCCHECKBOX,
    @..DCRADIO, @..DCBUTTON, @..DCTABPAGE, @..DCTABLE or @..DCHTML*.
   

Notes:

   Gui Applications :
   
   The browse object created by @ DCBROWSE is an object of the
   DC_XbpBrowse() class which inherits from the XbpBrowse()
   class, therefore it can be manipulated with any iVar or
   method supported by XbpBrowse().
   
   The browse navigation system for arrays looks like this.
   
     oXbp:skipBlock     := {|n,o| SkipArray( n, o:cargo ) }
     oXbp:goTopBlock    := {|o| o:cargo[4] := 1 }
     oXbp:goBottomBlock := {|o| o:cargo[4] := Len( o:cargo[5] ) }
     oXbp:posBlock      := {|o| o:cargo[4] }
     oXbp:phyPosBlock   := {|o| o:cargo[4] }
     oXbp:lastPosBlock  := {|o| Len( o:cargo[5] ) }
     oXbp:firstPosBlock := {|| 1 }
   
   
   The :cargo instance variable contains an array of pointers,
   VALID, HIDE, WHEN and FREEZE information.  When installing a custom
   "skipper" system, use :cargo[3] as a complete cargo sub-system.
   
   Here is the standard CARGO convention for all objects created by
   DC_ReadGUI():
   
   :cargo[1] is a pointer to the GetList number
   :cargo[2] is a pointer to the Getlist array
   :cargo[3] is USER-DEFINED cargo
   :cargo[4] and up are reserved.
   
   All custom skipper methods should use pointers in cargo[3].  A
   custom skipper system would be installed after the objects were
   created by DC_ReadGUI().  This can be accomplished by using the
   EVAL clause in the DCREAD GUI command to call a user-defined
   function.
   
   Example:
   
     oXbp:cargo[3]      := Array(2)
     oXbp:skipBlock     := {|n,o| MySkipArray( n, o:cargo ) }
     oXbp:goTopBlock    := {|o| o:cargo[3,1] := 1 }
     oXbp:goBottomBlock := {|o| o:cargo[3,1] := Len( o:cargo[3,2] ) }
     oXbp:posBlock      := {|o| o:cargo[3,1] }
     oXbp:phyPosBlock   := {|o| o:cargo[3,1] }
     oXbp:lastPosBlock  := {|o| Len( o:cargo[3,2] ) }
     oXbp:firstPosBlock := {|| 1 }
   
   /* ---------------------- */
   
   STATIC FUNCTION MySkipArray( nWantSkip, aCargo )
   
   LOCAL nDidSkip, nLastRec := Len( aCargo[3,2] )
   
      IF aCargo[3,1] + nWantSkip <þ 1              // "BoF"
         nDidSkip := 1 - aCargo[3,1]
      ELSEIF aCargo[3,1] + nWantSkip þ> nLastRec   // "EoF"
         nDidSkip := nLastRec - aCargo[3,1]
      ELSE
         nDidSkip := nWantSkip
      ENDIF
      aCargo[3,1] += nDidSkip
   
   RETURN nDidSkip
   
   /* ------------------------- */
   
   CAUTION:  When overloading the Skipper system, you must also
             overload the :itemSelected instance variable.  The
             default codeblock for :itemSelected refers to array
             elements in :cargo which have been previously set-up
             to work with the default Skipper.  If the :cargo array
             is modified, then a double-click on a browse column
             will cause a runtime error.
   
   ------------------------------
   
   HTML Applications :
   
   The browse object created by @ DCBROWSE is an object of the
   DC_HtmlBrowse() class.
   

Examples:

    /*
    This example demonstrates both a database browse and an
    array browse in the same dialogue screen.  The database
    browse is on Tab Page 1 and the Array browse (directory
    listing) is on Tab Page 2.
    */
   
    #include "dcdialog.ch"
    #include "xbp.ch"
   
   
    PROCEDURE Xtest()
   
    LOCAL GetList := {}, GetOptions, oTabPage1, oTabPage2, ;
          oBrowse, cAlias, aDirectory, oDirectory
   
    USE COLLECT NEW SHARED
   
    /* ---- Tab Page #1 ---- */
   
    @ 3,3 DCTABPAGE oTabPage1 CAPTION 'Browse' ;
      SIZE 60,12
   
    cAlias := "COLLECT"
   
    @ 2,2 DCBROWSE oBrowse PARENT oTabPage1  ;
          DATA cAlias SIZE 55,9 FREEZELEFT { 1, 2 }
   
    DCBROWSECOL FIELD COLLECT->descrip ;
      HEADER "Description" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->type ;
      HEADER "Type" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->sub_type ;
      HEADER "SubType" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->location ;
      HEADER "Location" PARENT oBrowse
   
    DCBROWSECOL DATA {|a|a:={'Yes','No','Not Sure'},a[COLLECT->for_sale+1]} ;
      HEADER "For Sale?" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->date_orig ;
      HEADER "Orig Date" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->date_acqu ;
      HEADER "Acqu Date" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->orig_price ;
      HEADER "Acqu Price" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->appr_value ;
      HEADER "Appr Value" PARENT oBrowse
   
    DCBROWSECOL FIELD COLLECT->condition ;
      HEADER "Condition" PARENT oBrowse
   
    DCBROWSECOL DATA {||IIF(COLLECT->original,'Yes','No')} ;
      HEADER "Orig Owner?" PARENT oBrowse
   
   
    /* ---- Tab Page #2 ---- */
   
    @  0,0 DCTABPAGE oTabPage2 CAPTION 'Directory' ;
       RELATIVE oTabPage1
   
    aDirectory := Directory()
   
    @ 2,2 DCBROWSE oDirectory PARENT oTabPage2 ;
          DATA aDirectory SIZE 55,9
   
    DCBROWSECOL ELEMENT 1 HEADER "Name" PARENT oDirectory WIDTH 10
   
    DCBROWSECOL ELEMENT 2 HEADER "Size" PARENT oDirectory WIDTH 8
   
    DCBROWSECOL ELEMENT 3 HEADER "Date" PARENT oDirectory WIDTH 8
   
    DCBROWSECOL ELEMENT 4 HEADER "Time" PARENT oDirectory WIDTH 8
   
    DCREAD GUI ;
      TITLE "My COLLECTION" ;
      FIT ;
      ADDBUTTONS ;
      EVAL {||oBrowse:hide(), oBrowse:show()}
   
    RETURN
   
    /*
    This example demonstrates an array browse with source
    written to HTML.
    */
   
   FUNCTION XTest2()
   
   LOCAL i, j, GetList[0], cHtml, oBrowse, aDir := Directory()
   
   @ 0,0 DCBROWSE oBrowse SIZE 4,10 DATA aDir
   
   DCBROWSECOL ELEMENT 1 HEADER 'File Name' PARENT oBrowse
   DCBROWSECOL ELEMENT 2 HEADER 'File Size' PARENT oBrowse
   DCBROWSECOL ELEMENT 3 HEADER 'File Date' PARENT oBrowse
   DCBROWSECOL ELEMENT 4 HEADER 'File Time' PARENT oBrowse
   
   DCREAD HTML TO cHtml
   MemoWrit('TEST.HTM',cHtml)
   
   RETURN nil
   

Source/Library:

  DCDIALOG.CH

See Also:

   DCBROWSECOL
   dc_getbrowarray()
   dc_browserow()
   dc_htmlbrowse()



@ DCCHECKBOX

Create a CHECKBOX object for displaying with GUI reader

Syntax:

   @ < nGetRow >,< nGetCol > DCCHECKBOX < uVar > ;
     [DELIMVAR < cDelim >] ;
     [PROMPT < bcPrompt >] ;
     [PARENT < oParent >] ;
     [PARENTID < cParentId >] ;
     [DATALINK < bLink >] ;
     [MESSAGE < bcMsg > [INTO < oMsgBox >]] ;
     [COLOR < bncFgC > [,< ncBgC >] ] ;
     [CARGO < xCargo >] ;
     [WHEN < bWhen >] ;
     [HIDE < bHide >] ;
     [EDITPROTECT < bProtect >] ;
     [FONT < bocFont >] ;
     [SIZE < nWidth >,< nHeight >] ;
     [PRESENTATION < aPres >] ;
     [PIXEL] ;
     [TOOLTIP < bcToolTip >] ;
     [OBJECT < oObject >] ;
     [CURSOR < naCursor >] ;
     [PREEVAL < bPreEval >] ;
     [EVAL < bEval,... >] ;
     [RELATIVE < oRel >] ;
     [ID < cId >] ;
     [TITLE < cTitle >] ;
     [ACCELKEY < anAccel >] ;
     [GOTFOCUS < bGotFocus >] ;
     [LOSTFOCUS < bLostFocus >] ;
     [TABSTOP] ;
     [NOTABSTOP] ;
     [TABGROUP < nTabGroup >] ;
     [VISIBLE] ;
     [INVISIBLE] ;
     [GROUP < cGroup >]
   

Arguments:

   GUI applications:
   
   < nRow > and < nCol > are the row and column of the screen.
   Coordinates are always relative to position 0,0 ie. Top,Left
   of the parent object, unless the RELATIVE < oRel > argument is
   used.  If no parent is assigned, then the parent is the Dialog
   box. IF the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based coordinates.  You can also force the pixel
   mode by including PIXEL as a command argument.
   
   HTML applications:
   
   < nRow > and < nCol > are the row number and column number of
   the table if the parent of this object is a DCTABLE. The
   text will be inserted in the cell of the table defined by
   the row/column.
   
   < lVar > is the variable to GET.  This must be a initialized to
   a logical value. It must not be a macro. The < lVar > is
   automatically anchored via a Get-Set codeblock created by
   DC_GetAnchorCB() unless < lVar > is a custom Get-Set code block.
   Macros may be used in a custom Get-Set code block.
   
   OBJECT < oObject > is the variable to use as a container for the
   object after it is created by the GUI reader.
   
   RELATIVE < oRel > is an optional object in the Getlist which
   determines the start coordinates of this object.  If this
   option is used, then the < nSrow >, < nSCol > coordinates are
   relative to the starting coordinates of < oRel > rather than
   the parent object.
   
   DELIMVAR < cDelim > is for text-based screens only and is
   ignored when DC_GUI() is .TRUE.  This is a three character
   sequence to use for the checkbox - the default is (*).
   
   PROMPT < bcPrompt > is the prompt to display immediately to
   the right of the checkbox.  It may be a character string or a
   code block that returns a character string.
   
   SIZE < nWidth >,< nHeight > is the width and height of the
   prompt.  If the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based numbers.
   
   MESSAGE < bcMsg > is the message you want to display in the
   message area of the dialogue screen defined by the DCMESSAGEBOX
   command when the object is in focus.  Optionally, INTO < oMsgBox >
   will designate which message box to display the message into.
   If the INTO clause is not used, then the last message box in the
   GetList is the default. < oMsgBox > may also be any object that
   supports the :setCaption() method.  If < bcMsg > is a code-block,
   it must return a character string.
   
   WHEN < bWhen > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .FALSE. then the object will be disabled and grayed.
   If the value returned is .TRUE. then the object will be enabled.
   The object is passed as a parameter to the code block.
   
   HIDE < bHide > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .TRUE. then the object will be hidden from view.  If
   the value returned is .FALSE. then the object will be displayed.
   The object is passed as a parameter to the code block.
   
   EDITPROTECT < bProtect > is an optional condition tested during the
   execution of the GUI gets by the DCREAD GUI command, before the
   object receives input focus (before it is activated). When the
   condition returns the value .T. (true), the object receives the
   input focus.  Otherwise, it is skipped. < bProtect > is a code
   block that must return a logical value when evaluated. The code
   block is evaluated prior to the object receiving input focus.
   This clause behaves similar to the WHEN clause with the exception
   that the object is not disabled (grayed out).  The object is
   passed as a parameter to the code block.
   
   PARENT < oParent > is the name of the variable that was assigned to
   the parent object for this object.  Only use this clause if you
   are placing this object onto another dialogue object.   If this
   argument is not passed then the parent will be the object set
   with the DCSETPARENT command.
   
   PARENTID < cParentID > may be used in lieu of the PARENT < oParent >
   clause.  This identifies the ID of the parent instead of the
   parent's object variable name.
   
   DATALINK < bLink > is an optional code block that is evaluated
   every time Get/Set codeblock is evaluated, ie when the data
   is read from the < uVar > into the object except when using
   a user-defined Get/Set code block. < bLink > is also
   evaluated when DC_GetRefresh() is called unless the < lDataLink >
   parameter of DC_GetRefresh() is .FALSE.
   
   FONT < cFont > is a character string defining an optional font.
   The font string must conform to the Xbase++ standard, ie.
   "10.Courier.Bold". It may also be a font object or a code block
   that returns a character string or a font object to later
   refresh with DC_GetRefresh().
   
   PRESENTATION < aPres > is a two-dimensional array. If specified,
   this contains presentation parameters for the CheckBox object.
   The first column of the array must contain #define constants
   from the XBP.CH file starting with the prefix XBP_PP_. These
   constants define the presentation parameters that can be set
   for the object and include colors and fonts. The second column
   of the array in < aPres > contains the value for each setting.
   These are also generally set using #define constants from the
   GRA.CH file.
   
   TOOLTIP < bcToolTip > is a character string which will display
   as a "Tool Tip" next to the object when the cursor is passed
   over the object. A semi-colon within the text indicates a new
   line.  If < bcToolTip > is a code-block, it must return a character
   string.  NOTE: The Tooltip painting method is run in another
   thread, therefore the codeblock should not run code that points
   to the current work area.  It may however, contain local, public
   or private variables.
   
   CURSOR < naCursor > may be either a numeric value or an array of
   3 elements which defines an optional mouse pointer to use for
   this object.  System mouse pointers start with
   XBPWINDOW_POINTERTYPE_ and are defined in XPB.CH.  The default
   pointer is XBPWINDOW_POINTERTYPE_POINTER.  < naCursor > may be a
   numeric resource ID that points to a Bit-Map that has been
   compiled with the resource compiler and linked to the .EXE.
   < naCursor > may be a 3-element array described as follows:
   
      Element  Type  Description
      -------  ---- ---------------------------------------------
        [1]      C   Optional name of .DLL containing the pointer
                     resource.
   
        [2]      N   The numeric resource ID of the pointer.  If
                     element 1 is a NIL, then this resource must be
                     linked into the .EXE.
   
        [3]      N   The type of resource as defined in XBP.CH.
   
   
   PREEVAL < bPreEval > is a code block to be evaluated by the GUI
   reader before the Xbase Parts object is created.  The object is
   passed to the code block.
   
   EVAL < bEval > is a code block to be evaluated by the GUI reader
   after the Xbase Parts object is created.  The object is passed
   to the code block.
   
   COLOR < ncFGc >, < ncBGc > are foreground and background colors.
   They may be character strings representing valid text-based
   colors supported by SetColor() or they may be numeric constants
   which begin with either the prefix GRA_CLR_ or the prefix
   XBPSYSCLR_ as defined in GRA.CH or XBP.CH. IF < bncFGc > is a
   code block is must return a 2-element array containing a
   foreground and background color.
   
   ID < cId > is a unique identifier for this object.  This ID is used
   with functions like DC_GETORIGUPDATED() to determine the status
   of a get object.
   
   CARGO < xCargo > is any kind of data you wish to to add to the
   :cargo container for this object.  The cargo may be accessed
   at any time via the :cargo exported variable, however it will not
   be stored in the same manner it is entered.  The :cargo container
   of DCDIALOG objects is an array of at least three elements:
   
     [1] - A numeric value that is a pointer to the Getlist array
           for this object.
   
     [2] - A pointer to the GetList array.
   
     [3] - The value of < xCargo >.
   
     [4] and up - optional values added by the GUI reader.
   
   TITLE < cTitle > is a title to assign to this object.  The title
   is not displayed on the screen but is simply a description of the
   get object which is saved in the GetList.
   
   ACCELKEY < anAccel > is a numeric "hot-key" assignment that will set
   focus to the checkbox object when the hot-key is pressed.  The key
   must be a valid key with the prefix xbeK_*.  These keys are
   defined in APPEVENT.CH.  < anAccel > may also be an array of numeric
   values to assign more than one key to the object.
   
   GOTFOCUS < bGotFocus > is a code block that is evaluated when this
   object receives input focus. < bGotFocus > := {|uNIL1,uNIL2,self|...}
   
   LOSTFOCUS < bLostFocus > is a code block that is evaluated when this
   object loses input focus.  < bLostFocus > := {|uNIL1,uNIL2,self|...}
   
   TABSTOP will cause the object (Xbase Part) to be set when using
   the Tab key.  Note: When logical groups are defined in a dialog
   using TABGROUP < nTabGroup >, TABSTOP is usually set to .T. (true)
   for the first dialog element in the group.  This allows the first
   dialog element of a group to be activated using the Tab key.
   
   NOTABSTOP will cause the object (Xbase Part) to be ignored when
   using the Tab key. This clause is needed only to override any
   default setting of TabStop by the DCGETOPTIONS [TABSTOP] command.
   
   TABGROUP < nTabGroup > allows objects (Xbase Parts) that are created
   immediately after one another in the GetList to be combined into
   logical groups. This allows the user to navigate within a dialog
   from group to group by pressing the Tab key.  Within a group of
   dialog elements navigation is performed using the cursor keys.
   
   Only constants defined in the XBP.CH file can be used as values
   for this instance variable.  The following table lists the
   available constants:
   
    #define constants for < nTabGroup >:
   
     Constant             Description
   
     XBP_NO_GROUP     *)  Dialog element does not belong to a group
     XBP_BEGIN_GROUP      Dialog element is the first in a group
                          (this begins the definition of the group)
     XBP_WITHIN_GROUP     Dialog element is within a group
     XBP_END_GROUP        Dialog element is the last in a group
                          (this ends the definition of the group)
   
    *) Default value
   
   GROUP < cGroup > is a "group" name (case-sensitive) to assign to
   this GetList object.  Assignment to a group makes it possible to
   perform operations only on GetList items which are members of a
   specified group, using functions such as DC_GetRefresh() or
   DC_ReadGui().
   
   VISIBLE determines whether the object is visible immediately after
   the call to the method :create() . By default the object follows
   the VISIBLE clause of the DCGETOPTIONS command.  Use the
   INVISIBLE clause to override the VISIBLE clause of DCGETOPTIONS
   

Description:

    The command @..DCCHECKBOX creates a new Check Box definition
    and it to the array named GETLIST which is later processed by
    the DC_Read*() functions or by the DCREAD * commands.  The
    GETLIST array must be first declared and initialized to the
    value of {}.
   
    The command DCREAD GUI creates the DC_Xbp*() objects and
    activates the edit mode for all definitions found in the
    GetList array.
   
    The command DCREAD HTML creates the DC_Html*() objects and
    writes the HTML source code.
   
    A Getlist object remains stored as long as it is referenced
    in an array or by a variable.  The commands CLEAR and
    CLEAR GETS assign an empty array to the GetList variable.
    This also occurs after the completion of the DCREAD command
    if it is called without the SAVE option, causing all
    objects referenced by the GetList array to be released.
   
     @..DCCHECKBOX objects can be combined with any objects that
    that use the DCDIALOG system, such as @..DCSAY..GET,
    @..DCRADIO, @..DCTABLE, @..DCPUSHBUTTON or @..DCTABPAGE.
   

Notes:

    GUI Applications :
   
    The checkbox object created by @ DCCHECKBOX is an object of the
    DC_XbpCheckBox() class which inherits from the XbpCheckBox()
    class, therefore it can be manipulated with any iVar or method
    supported by XbpCheckBox().
   
    --------------------
   
    HTML Applications :
   
    The checkbox object created by @ DCCHECKBOX is an object
    of the DC_HtmlCheckBox() class.
   

Examples:

   /*  (Simple Check Boxes in GUI)  */
   
   #include "dcdialog.ch"
   
   
   PROCEDURE Xtest()
   
   LOCAL lDict := .f., lSource := .t., lBackup := .f., ;
         lPack := .t.,  GetList := {}
   
   @ 5,10 DCCHECKBOX lDict   PROMPT 'Save to Dictionary'
   @ 5,40 DCCHECKBOX lSource PROMPT 'Save to Source Code'
   @ 7,10 DCCHECKBOX lBackUp PROMPT 'Make a Backup file'
   @ 7,40 DCCHECKBOX lPack   PROMPT 'Pack the File'
   
   DCREAD GUI FIT ADDBUTTONS
   
   RETURN
   
   
   /* Simple Checkboxes in HTML */
   
   #include "dcdialog.ch"
   #include "dchtml.ch"
   
   FUNCTION Xtest()
   
   LOCAL i, GetList[0], oForm, cHtml, oTable, lCheck1, lCheck2, lCheck3
   
   DCFORM OBJECT oForm
   DCTABLE OBJECT oTable PARENT oForm ROWS 3 COLUMNS 1
   lCheck1 := .t.
   lCheck2 := .f.
   lCheck3 := .f.
   @ 1,1 DCCHECKBOX lCheck1 PROMPT 'Check me first' PARENT oTable
   @ 2,1 DCCHECKBOX lCheck2 PROMPT 'Check me second' PARENT oTable
   @ 3,1 DCCHECKBOX lCheck3 PROMPT 'Check me third' PARENT oTable
   
   DCREAD HTML TO cHtml
   
   MemoWrit('TEST.HTM',cHtml)
   
   RETURN cHtml
   

Source/Library:

  DCDIALOG.CH                                                     I

See Also:

   dc_htmlcheckbox()
   dc_readgui()
   dc_readhtml()
   DCREAD GUI
   DCREAD HTML



@ DCCOMBOBOX

Create a COMBOBOX object for displaying with GUI reader

Syntax:

   @ < nRow >,< nCol > DCCOMBOBOX < uOutVar > LIST < aVar > ;
       [TYPE < nType >] ;
       [SIZE < nGetWidth > [,< nGetHeight >]] ;
       [PIXEL] ;
       [REFRESH] ;
       [PARENT < oParent >] ;
       [PARENTID < cParentId >] ;
       [FONT < bocFont >] ;
       [MESSAGE < bcMsg > [INTO < oMsgBox >]] ;
       [WHEN < bWhen >] ;
       [HIDE < bHide >] ;
       [EDITPROTECT < bProtect >] ;
       [VALID < bValid >] ;
       [HELPCODE < cHelp >] ;
       [PRESENTATION < aPres >] ;
       [TOOLTIP < bcToolTip >] ;
       [CURSOR < naCursor >] ;
       [PREEVAL < bPreEval >] ;
       [EVAL < bEval >] ;
       [DATALINK < bLink >] ;
       [OBJECT < oObject >] ;
       [RELATIVE < oRel >] ;
       [CARGO < xCargo >] ;
       [COLOR < bncFgC > [,< ncBgC >] ] ;
       [ID < cId >] ;
       [TITLE < cTitle >] ;
       [ACCELKEY < anAccel >] ;
       [GOTFOCUS < bGotFocus >] ;
       [LOSTFOCUS < bLostFocus >] ;
       [TABSTOP] ;
       [NOTABSTOP] ;
       [TABGROUP < nTabGroup >] ;
       [VISIBLE] ;
       [INVISIBLE] ;
       [GROUP < cGroup >
   

Arguments:

   GUI applications:
   
   < nRow > and < nCol > are the row and column of the screen.
   Coordinates are always relative to position 0,0 ie. Top,Left
   of the parent object, unless the RELATIVE argument is used.
   If no parent is assigned, then the parent is the Dialog box.
   IF the PIXEL option is set to .TRUE. in DCGETOPTIONS, then
   the numbers are in pixels otherwise they are in standard
   text-based coordinates.  You can also force the pixel
   mode by including PIXEL as a command argument.
   
   HTML applications:
   
   < nRow > and < nCol > are the row number and column number of
   the table if the parent of this object is a DCTABLE. The
   text will be inserted in the cell of the table defined by
   the row/column.
   
   < aVar > is a single-dimensional array of character strings
   which is used as the list box of items.
   
   < cOutVar > is the input/output variable.  This should be
   initialized to a character string. It must not be a macro,
   however it may be a code block that contains a macro. The < uVar >
   is automatically anchored via a Get-Set codeblock created by
   DC_GetAnchorCB() unless < uVar > is a custom Get-Set code block.
   
   TYPE < nType > is a numeric constant which is defined in the XBP.CH
   file and are listed in the following table:
   
     Constant                Description
   
     XBPCOMBO_SIMPLE         List box is always dropped down
     XBPCOMBO_DROPDOWN   *)  List box dropped down via a mouse click
     XBPCOMBO_DROPDOWNLIST   List box dropped down via a mouse click
                             and keyboard input in the entry field is
                             not allowed
   
     *) Default value
   
   SIZE < nWidth >,< nHeight > is the width and height of the
   combobox.  If the PIXEL option is set to .TRUE. in DCGETOPTIONS,
   then the numbers are in pixels otherwise they are in standard
   text-based numbers.  Note:  The height value  determines the total
   height of the combo box including the pull-down listbox.
   
   PARENT < oParent > is the name of the variable that was assigned to
   the parent object for this object.  Only use this clause if you
   are placing this object onto another dialogue object.  If this
   argument is not passed then the parent will be the object set
   with the DCSETPARENT command.
   
   PARENTID < cParentID > may be used in lieu of the PARENT < oParent >
   clause.  This identifies the ID of the parent instead of the
   parent's object variable name.
   
   REFRESH will force a refresh of the GetList each time an item is
   chosen from the pick-list.  Use this clause if other objects in
   the GetList contain a WHEN or HIDE clause which is dependent on
   the value picked.
   
   OBJECT < oObject > is the variable to use as a container for the
   object after it is created by the GUI reader.
   
   FONT < cFont > is a character string defining an optional font.
   The font string must conform to the Xbase++ standard, ie.
   "10.Courier.Bold". It may also be a font object or a code block
   that returns a character string or a font object to later
   refresh with DC_GetRefresh().
   
   MESSAGE < bcMsg > is the message you want to display in the
   message area of the dialogue screen defined by the DCMESSAGEBOX
   command when the object is in focus.  Optionally, INTO < oMsgBox >
   will designate which message box to display the message into.
   If the INTO clause is not used, then the last message box in the
   GetList is the default.  < oMsgBox > may also be any object that
   supports the :setCaption() method.  < bcMsg > may be a code block
   that returns a character value.
   
   WHEN < bWhen > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .FALSE. then the object will be disabled and grayed.
   If the value returned is .TRUE. then the object will be enabled.
   The object is passed as a parameter to the code block.
   
   HIDE < bHide > is a code block that is evaluated in the event loop.
   This code block must return a logical value.  If the value
   returned is .TRUE. then the object will be hidden from view.  If
   the value returned is .FALSE. then the object will be displayed.
   the object is passed as a parameter to the code block.
   
   EDITPROTECT < bProtect > is an optional condition tested during the
   execution of the GUI gets by the DCREAD GUI command, before the
   object receives input focus (before it is activated). When the
   condition returns the value .T. (true), the object receives the
   input focus.  Otherwise, it is skipped. < bProtect > is a code
   block that must return a logical value when evaluated. The code
   block is evaluated prior to the object receiving input focus.
   This clause behaves similar to the WHEN clause with the exception
   that the object is not disabled (grayed out).  The object is
   passed as a parameter to the code block.
   
   VALID < bValid > is an optional condition tested during the
   execution of the GUI gets by the READ command before a Get
   object loses input focus (before it is deactivated).  When
   the condition returns the value .T. (true), the Get object
   loses the input focus.  Otherwise, it remains active. < bValid >
   is a code block that must return a logical value when it is
   evaluated.  The object passed as a parameter to the code block.
   
   HELPCODE < cHelp > is a character string that is passed to the
   DC_HelpF1() function if F1 is pressed or the HELP button
   is clicked when this GET has focus.  This HELPCODE allows
   the Help system to override the passing of the Procedure and
   Varname for more specific context-help.
   
   PRESENTATION < aPres > is a two-dimensional array. If specified,
   this contains presentation parameters for the ComboBox object.
   The first column of the array must contain #define constants
   from the XBP.CH file starting with the prefix XBP_PP_. These
   constants define the presentation parameters that can be set
   for the object and include colors and fonts. The second column
   of the array in < aPres > contains the value for each setting.
   These are also generally set using #define constants from the
   GRA.CH file.
   
   TOOLTIP < bcToolTip > is a character string which will display
   as a "Tool Tip" next to the object when the cursor is passed
   over the object. A semi-colon within the text indicates a new
   line.  If < bcToolTip > is a code-block, it must return a character
   string.  NOTE: The Tooltip painting method is run in another
   thread, therefore the codeblock should not run code that points
   to the current work area.  It may however, contain local, public
   or private variables.
   
   CURSOR < naCursor > may be either a numeric value or an array of
   3 elements which defines an optional mouse pointer to use for
   this object.  System mouse pointers start with
   XBPWINDOW_POINTERTYPE_ and are defined in XPB.CH.  The default
   pointer is XBPWINDOW_POINTERTYPE_POINTER.  < naCursor > may be a
   numeric resource ID that points to a Bit-Map that has been
   compiled with the resource compiler and linked to the .EXE.
   < naCursor > may be a 3-element array described as follows:
   
      Element  Type  Description
      -------  ---- ---------------------------------------------
        [1]      C   Optional name of .DLL containing the pointer
                     resource.
   
        [