eXPress++ Annual Subscription



eXPress++ owners,

Our annual subscription service started in 2005 and it is now time for most of you to renew. eXpress++ upgrades are not available other than through this subscription plan.

If you are a new eXpress++ owner, then your first year of subscription is included with the product and starts from the date that you purchased the product.

For all other eXpress++ owners, you must purchase the subscription to attain access to updates. With this service, updates will now become available on an as-needed basis, rather than waiting for releases. In the past, changes to eXpress++ did not become available to eXpress++ users until after a lengthy period of beta testing. With the subscription service, changes become available as soon as they are completed.

The source will be available by FTP or HTTP download only to paid-up subscribers.

Effective March 1, 2008, only paid Subscribers will have access to the Subscriber forum of the WebBoard, the NewsGroups and E-Mail notifications. A new Announcements forum will be used to announce new updates.

The most current version is eXpress++ 1.9 build 249. This has been tested with Xbase++ 1.8, 1.82 and 1.9.

The 1-year subscription price is $249.00.
The 2-year subscription price is $399.00.
Go to Order Page to place your subscription order.


           ---------------- New to 1.9 (build 249) ----------

 1025. Added a sample program in .\SAMPLES\DESIGN that demonstrates how to use
       the NEW DESIGN mode. This new design system is in DCDESIGN.DLL.   Bobby
       Drakos insisted that this feature be promoted and shared with other
       eXpress++ users because it saves him hours of time every week.

 1024. Improved defect tracker.  See .\SAMPLES\TRACKER\TRACKER.PRG.
       Better exception display and now has ability to stay in program after
       an error by clicking on BREAK.

 1023. Fixed bug when using DCGETOPTIONS BUTTON clause and scaling.  Buttons
       would not fit onto dialog correctly.

 1022. Fixed bug in @ DCBROWSE when using DC_AutoRestoreBrowse() and scaling.
       Browse column widths would not restore properly.

 1021. The .\SAMPLES\TOOLBELT directory contains an example of how to build a
       toolbelt onto a side status bar using a DCBROWSE and mouse-over
       highlighting.  This uses bitmaps, a custom handler, data tooltips,
       presentation parameters and other techniques to give a nice visual
       presentation.

 1020. Fixed problem of Validation getting subverted when a dialog is
       minimized and normalized more than one time in succession.

 1019. Fixed problem of EventSpy.Dll sometimes locking up the program when
       using DC_ReadGuiDebug(2).  Also added support for a new environment
       variable that can be used to invoke the event spy rather than changing
       source code: SET DC_READGUIDEBUG=Y

 1018. Added 2 new parameters to DC_MoveObject() - nGridRows, nGridCols.

 1017. Added new GETTEMPLATE clause to DCGETOPTIONS.  Gets are automatically
       sized to the number of characters in the associated variable.  This
       does not work as well for proportional fonts and for fixed fonts,
       therefore GETTEMPLATE sets the template character that is used to
       determine the size of a DCGET when using a proportional font.  The
       default is 'W'.

 1016. Fixed a bug in @..DCSAY. The SAYFONT can now be a code block.

 1015. Added new function: DC_DbRecordCompare().  This compares two record
       objects (create by DC_DbRecord()) for an exact match of the data in all
       fields.

 1014. Fixed a regression bug that sometimes caused DCGET .. POPUP to not set
       focus back to the Get object.

 1013. New function: DC_MsgBoxEscape().  This is a Get-Set function that
       determines the behavior of the ESCAPE key when using DC_MsgBox() or
       DCMSGBOX.  DC_MsgBoxEscape(.t.) always makes DC_MsgBox() return FALSE
       and CHOICE = 0.  Default is .f.

 1012. Fixed a few bugs in DC_MapDirections() - MICROSOFT, and added support
       for YAHOO and MAPQUEST maps.

 1011. Added support for the Bullzip PDF Printer driver when using the DCPRINT
       ACROBAT feature.  This is a free PDF driver that displays no annoying
       screens or embeds messages in the PDF file.  The FREE version of
       Bullzip can be acquired at http://www.bullzip.com.   It requires that
       GhostScript be installed on the workstation.  Ghostscript can be
       downloaded at http://www.bullzip.com/download/gsl/gslite.exe.

       The DCPRINT system uses the "Bullzip.PDFPrinterSettings" ActiveX COM
       object to control the behavior and redirect the output to a file that
       can work with the Acrobat preview system.

 1010. CutePDF driver for DCPRINT ACROBAT is NO LONGER supported.  This caused
       too many problems.  Resolving them would require users to spend money.
       BullZip was a much better solution.

 1009. Added a new command GETSETTHREADFUNCTION to DCDIALOG.CH.  This is
       similar to GETSETFUNCTION, except it is thread-safe.

 1008. The .\SAMPLES\WIZARD directory contains a sample program that is a
       basic object-oriented template for creating wizards.

 1007. Fixed a bug that causes a runtime error when using the DROP clause on a
       DCPUSHBUTTON.

           ---------------- New to 1.9 (build 248) ----------

 1006. Fixed a regression bug (introduced in build 246) that causes messages
       not to display correctly.  Item 993 below has been removed.

 1005. Fixed a regression bug (introduced in build 246) that causes the
       decimal key to function incorrectly in the International version of
       Xbase++.

           ---------------- New to 1.9 (build 247) ----------

 1004. Fixed a bug that could sometimes cause a validation to be ignored under
       very special cirmcumstances when clicking out of the application and
       then back into it again.

 1003. Greatly improved the performance of DCPRINT..EXCEL, DC_Array2Excel(),
       DC_AdsCursor2Excel() and DC_WorkArea2Excel(). Runs about 50 times faster
       (thanks to Steve Poore and Regan Calkwell).

 1002. Modified DC_GuiPopDate_2() to use DCSTATIC objects for the buttons
       instead of DCPUSHBUTTON..FANCY objects.  This reduced the number of
       objects on the screen and improved the speed of the calendar popup. It
       also fixed a problem with double-clicking a date not always selecting
       that date and exiting.

 1001. Fixed a bug. The DCGUI_PARENTHEIGHT and DCGUI_PARENTWIDTH manifests
       would not work for sizing an object unless using pixel coordinates.
       It now works with text-based coordinates.

 1000. Added new TAGGING feature to the DCBROWSE system.  This system provides
       tagging of records or array elements when using the mouse and the Ctrl
       or Shift key.

       Ex: @ .. DCBROWSE .. TAGENABLE TAGELEMENT 11 TAGCOLOR GRA_CLR_RED,
                GRA_CLR_YELLOW

       See the example in .\SAMPLES\TAGGING

  999. Fixed a bug that causes a tooltip to remain on the screen when a dialog
       is closed.

  998. Added a new NOBITMAPS clause to the DCMENUBAR and DCSUBMENU commands.
       This will suppress the 20-pixel space on the left side of each menu
       item reserved for bitmaps when using the OWNERDRAW option.

  997. Fixed a regression bug that causes DCSAY .. {||..} objects on a
       groupbox not to refresh correctly.

  996. Fixed a regression bug that sometimes causes a runtime error when a
       dialog window is minimized.

  995. Fixed a bug that causes the object in focus to be validated when the
       "main" dialog is minimized.  Restoring the window also restores focus
       to the object.


           ---------------- New to 1.9 (build 246) ----------

  994. Fixed a bug in @ DCPUSHBUTTON .. STATIC.  The FOCUSCOLOR clause would
       not reset the focus color when the mouse was moved off the object.

  993. Improved the message dispatch system to test that the message being
       sent is coming from the object that is in focus, otherwise it is not
       displayed. This prevents messages associated with a Browse column from
       being displayed when a different object has focus.

  992. Minimizing a window to the desktop now saves and restores the object in
       focus when the window is restored.

  991. The DC_AutoRestoreWindow() function now accepts a third array
       parameter.  If the 3rd array parameter is .TRUE., then the default for
       restoring windows will be ON, and the override clause of DCREAD GUI
       is NOAUTORESTORE. If the 3rd array parameter is .FALSE., then the
       default for restoring windows will be OFF, and the override clause of
       DCREAD GUI is AUTORESTORE.

  990. Added a new :asString() method to DC_XmlNode().  This returns an
       XML tree as a character string.  See sample SAFT.PRG program in
       .\SAMPLES\XML.

  989. Added support for the CutePDF driver when using the DCPRINT ACROBAT
       feature.  This is a free PDF driver that displays no annoying
       screens or embeds messages in the PDF file.  It requires that
       GhostScript be installed on the workstation.  To install, run the
       .\CUTEPDF\CuteWriter.Exe install program.  Ghostscript can be
       downloaded at http://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/current/.
       The install file is gs861w32.exe.

  988. Added a new SCROLLBARS clause to the DCGETOPTIONS command.  This
       will cause scrollbars to automatically appear in the drawingArea
       of the dialog window if a child object is displayed outside the
       drawing area.

       Ex: DCGETOPTIONS SCROLLBARS XBP_SCROLLBAR_VERT+XBP_SCROLLBAR_HORIZ

  987. Fixed a bug that causes the object in focus to be validated when the
       parent dialog is minimized.  Restoring the window also restores focus
       to the object.

  986. The .\SAMPLES\MOBILE directory contains a program designed to be used
       on a mobile device such as a PDA, Pocket PC, etc.

       The application is intended to run on a Terminal Server or Citrix
       server and the Mobile device uses the Terminal Server thin-client or the
       Citrix thin-client to connect to the remote server via a wireless
       connection.  Also supports scaling for different size PDAs or monitors.

  985. Added a new class: DC_MapDirections().  This class provides a simple
       interface for calling the Google or Microsoft Mapping website to
       provide driving directions.  See the sample program in the
       .\SAMPLES\MAPDIR directory.

  984. Fixed a bug in DCBROWSECOL TYPE XBPCOL_TYPE_BITMAP that causes a
       runtime error when using pixel coordinates.

  983. Added a new command: DCSPLITBAR.  This is used to create a vertical or
       horizontal bar to be used for proportionally resizing adjacent screen
       objects.  Look at the sample program in the .\SAMPLES\SPLITBAR
       directory.   Thanks to Terry Wolfe for helping with this.

  982. Added a new COLUMNBREAK clause to the DCSUBMENU and DCMENUITEM
       commands.  This causes successive menu items to appear in a new
       column of the drop-down or popup menu. Look at the sample program
       in the .\SAMPLES\MENU directory.

  981. The .\SAMPLES\SOAP directory contains a utility program that makes
       it easier to develop SOAP and Web Services client applications.

       It allows the developer to experiment with a SOAP Service or a WEB
       Service in an interactive dialog, rather than requiring lots of code
       changes to try to work through problems.

       Bobby Drakos says "I think any eXpress user dealing with SOAP should
       know about this."

  980. The .\SAMPLES\SERVICES directory now contains the source code and an
       example of a subsystem for managing up to 10 services that can be
       started, stopped or paused.  This is intended to be a seperate EXE that
       constantly runs and manages background tasks needed in applications.

       Examples of tasks would be:

       1. Send Email from records inserted into a database by main app.
       2. Check for orphan records in databases and remove them.
       3. Import data from external systems.
       4. Check POP servers for email and route the emails to a document
          management system.
       5. Send notifications when events are overdue.
       6. Find duplicate records and send a notification.

  979. Added a new RESIZECOLUMNS clause to the DCBROWSE command.  This causes
       columns to be resized proportionally as the browse width is resized.

  978. Added a new FIT clause to the DCTOOLBAR command.  This causes the
       toolbar to be resized to the sum of the width of all the child buttons.
       See the sample program in .\SAMPLES\TOOLBAR.

  977. Added a new ALIGN clause to the DCTOOLBAR command.  If the
       ALIGN DCGUI_ALIGN_RIGHT clause is used, then the column coordinate
       defines the right-most position of the toolbar.  If the ALIGN
       DCGUI_ALIGN_CENTER clause is used, then the column coordinate defines
       the center of the toolbar. See the sample program in .\SAMPLES\TOOLBAR.

  976. DC_RegWrite() and DC_RegQuery() now handle DWORD datatypes.
       Thanks to Markus Walter.

  975. Added 2 new parameters to the DC_GetWhen() function.   is an
       ID or array of IDs to evaluate the WHEN/HIDE clause.  
       is an GROUP or array of GROUPs to evaluate the WHEN/HIDE clause.
       Ex: DC_GetWhen( GetList,,,{'BUTTON1','BUTTON2'} )
           DC_GetWhen( GetList,,,,'GROUP1' )

  974. Added a new function: DC_BrowseColor().  This is a Get-Set function
       that is used to establish the default colors for alternate rows of all
       DCBROWSE objects.  These colors will be invoked only if the COLOR
       clause of DCBROWSE is not used.

       Ex: DC_BrowseColor( { nil, GRA_CLR_WHITE, nil, GRA_CLR_CYAN } )

  973. New manifest constants DCGUI_PARENTHEIGHT and DCGUI_PARENTWIDTH may be
       used with the SIZE clause of DC* commands.  This will set the size of
       the object to the size of the parent less any adjustment.  Example:

       @ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 200,300 OBJECT oStatic

       @ 10, 10 DCBROWSE oBrowse PARENT oStatic ;
                SIZE DCGUI_PARENTWIDTH - 20, DCGUI_PARENTHEIGHT - 20

  972. The .\SAMPLES\DOCUMENT directory now contains the source code and an
       example of a subsystem for attaching external documents in an
       application. Only about 8 lines of code are needed to add this
       document system to a parent object such as a tabpage.  This allows
       external documents of any type to be attached to any record of any
       database that has a field named RECORD_ID, C, 20.  Also supports
       recording of voice clips and scanning of documents. Third-party
       AudioCtl.Dll is required for voice recording and EzTw32.Dll is
       required for scanning.

  971. Created a new set of DC_Xbp*Super() classes in a new file named
       _DCSUPER.PRG.  All DC_Xbp*() classes now inherit from the super
       classes.  The purpose of this change is to provide eXpress++ users
       with the ability to make modifications to eXpress++ classes for
       adding additional iVars or methods.  The source code in
       _DCSUPER.PRG is intended to be maintained by the eXpress++ user,
       not Donnay Software.

  970. DCPUSHBUTTON .. FANCY now supports the color clause, however only
       the XbpStatic() portion of the fancy button will change color, not
       the XbpPushButton().

  969. DC_GetRefresh( oXbp ) will now refresh oXbp and all objects that
       are descendents of oXbp.

  968. Fixed regression problem from build 240.  Now can do a DCGET of a
       MEMVAR->myvariable.

  967. Improved behavior of descending sorting when using the SORT clause
       of DCBROWSECOL.

  966. Added new POPWHEN and POPHIDE sub-clauses to the POPUP clause of
       @..DCSAY..GET and @..DCGET.

  965. DC_Dbu(), Display Structure and other dot-prompt features now
       support the following field types:

       C - Character
       N - Numeric
       D - Date
       L - Logical
       M - Memo
       A - Array
       X - Binary C
       V - Binary M
       I - Integer
       T - TimeStamp
       Y - Currency
       F - Double
       Q - Character-Unicode/VarLen
       W - Character-Unicode/Fixed
       X - Binary V
       Z - Blob

  964. Fixed a bug in DCSUBMENU.  Caption may now be a code block.

  963. EZ-Twain support.  A set of TWAIN_* wrapper functions are now
       included in _DCFUNCT.PRG for using Twain devices.  The twain DLL
       is located in .\SAMPLES\TWAIN.  An example of how to use the
       TWAIN_* functions is in .\SAMPLES\DOCUMENT\DOCUMENT.PRG.

  962. The popup button on a GET now is disabled after being activated
       and then enabled again when returning from the code block.  This
       prevents problems when double-clicking the button.

  961. Added new function: DC_GetValidateOnChange().  This is a get-set
       function that is used to modify the behavior of GET validations.
       If .TRUE., then the validation code block will only be called if
       the value of the Get has changed.  The default is .FALSE.

  960. Added 2 new clauses to all DC* commands:
       DRAG  [DIALOG ]
       DROP  [CURSOR ]

       These clauses provide for a simple interface for dragging and
       dropping operations between objects in the same window or objects
       in windows of other threads.

       See the .\SAMPLES\DRAGDROP\DRAGDROP.PRG sample.

  959. Added new 2nd parameter to DC_BrowPres().  This is used to set the
       frame type for the hilighlight bar.  Thanks to Bobby Drakos for
       contributing this information and taking the time to figure out
       the constants needed.  Each frame type is defined in DCDIALOG.CH
       as a DCGUI_BROWSEFRAME_* constant.

       Example: @ DCBROWSE .. PRESENTATION ;
                    DC_BrowPres(,DCGUI_BROWSEFRAME_THICK_RECESSED)

  958. Fixed problem with DCPUSHBUTTON FANCY not displaying text
       correctly when using the ALIGNCAPTION clause.

  957. Eliminated flickering and child object display problems when
       clicking between tabpages that have a WHEN clause.

  956. DC_GetRefresh() now accepts a new type of inclusion/exclusion
       as the 3rd parameter as an array.

      ---------------- New to 1.9 (build 245) ----------

  955. Added new  parameter to DC_PopCalc() and
       DC_GuiPopCalc().  This removes the decimal point from the
       calculator.  Thanks to Bobby Drakos.

  954. Added new  parameter to DC_MsgBox().
       Added new ALWAYSONTOP clause to DCMSGBOX.
       Changed DCMSGBOX command to allow it to be used in a code block
       by wrapping it in parenthesis:
       Ex: {||(DCMSGBOX 'Do not do that' ALWAYSONTOP)}

  953. Fixed several regression errors in build 244.

      ---------------- New to 1.9 (build 244) ----------

  952. Added new Dot-Prompt command: SQLSELECT.  This command uses the
       function DC_AdsRunSQL() to execute an SQL SELECT statement in a
       new work area.   EXAMPLE: SQLSELECT * FROM XTEST

  951. Added new Dot-Prompt command: DUSE.  This command is similar to
       USE except the file is opened via an ADS connection to a
       data-dictionary.  For DUSE to work, an ADS dictionary connection
       must first be made and registered via DC_AdsSession().

  950. Added documentation for DC_Xml*() functions and classes.

  949. Added new function: DC_JPGSize().  This will return the size of a
       JPG file.  It is much faster than using the XbpBitMap() class to
       determine the size.  Thanks to Brian Wolfsohn.

  948. Improved UI of some dot-prompt commands: COPY, APPEND, COUNT, ;
       DELETE, etc.

  947. Fixed a bug in Data Tooltips.  Bitmaps will no longer be truncated
       if the browse is positioned close to the right or bottom of the
       screen.

  946. Fixed a bug with a valid on an EditProtected Get firing if it is
       the first Get in a GetList or if it somehow was able to
       temporarily get focus even if protected.

  945. Changed the default value for DC_ToolTipThread() to 2.  This will
       insure that there is only 1 tooltip thread running.

  944. Added new clauses to the DCTABPAGE command:

       MINIMIZEDCOLOR - Sets the color of tab when minimized
       MAXIMIZEDCOLOR - Sets the color of tab when maximized

       These clauses will override any settings of DC_TabPageColor().

  943. The BARFONT clause of DCSUBMENU now works when using the OWNERDRAW
       feature.  Added new FGCOLOR and ITEMFONT clauses to allow more
       visual options when using the OWNERDRAW feature.  Added more
       COLOR and FONT clauses to the DCMENUBAR command to set the default
       colors and fonts for submenus when using the OWNERDRAW feature.

  942. Added new function: DC_TabPageColor().  This is a Get-Set function
       that is used to automatically set the color of Maximized and
       Minimized Tabpages so that the currently selected tab may be a
       different color than unselected tabs.

  941. Fixed regression bug in DC_PopColor() when not using Safe mode.

  940. The Browse Footer now prints properly in DC_PrintBrowse().

  939. The BROWSE feature of DC_ArrayView() now allows sorting on any
       column.

  938. Removed the call to DC_GetWhen() when an xbeBRW_ItemMarked event
       is detected in the event loop.  This was causing lots of
       flickering on some applications when navigating the browse.

  937. Added a new WHEN  clause to the DCBDEBUG command.  This will
       cause the debug info to be displayed only when the codeblock
       returns .t.  Ex: DCBDEBUG i, oInfo WHEN {||i==16}

  936. Fixed a bug in DC_IsAppRunning() that caused it sometimes to fail
       to determine if an application is running.

  935. New function: DC_EditControlLastFocus(). This returns a pointer to
       the last edit control that had focus.  Handy for returning to a
       Get after hitting a hot key or clicking a pushbutton.

  934. DC_InspectObject() will now execute methods when double-clicking
       the method name in the browse.  The returned value will be
       displayed.

  933. Added support for ADT files and fields in Xdot.exe and basic
       eXpress++ functions when using the ADSDBE.  Run XDOT /? to see new
       options.

  932. Added new function: DC_KeyString2Num().  This is used to translate
       a string that defines a key to a numeric Xbase++ equivalent.  This
       is handy for data-driven applications.

       Ex: DC_KeyString2Num('Shift-F10') -> xbeK_SH_F10
       Ex: DC_KeyString2Num('Ctrl-F10') -> xbeK_CTRL_F10
       Ex: DC_KeyString2Num('Control-F10') -> xbeK_CTRL_F10

  931. Added new clauses to the DCSUBMENU command:
       BEGINMENU, ENDMENU, ITEMMARKED, ITEMSELECTED, SUBITEMFONT

  930. Added new clauses to the DCMENUBAR command:
       BEGINMENU, ENDMENU, ITEMMARKED, ITEMSELECTED, SUBITEMFONT

  929. Fixed a bug in DC_Resize() that caused corruption of the display
       after 2 windows are minimized and then normalized.

  928. Fixed a bug in @..DCPUSHBUTTON when using the BS_MULTILINE option
       of the ALIGN clause and also a WHEN block.  Caption would not
       format correctly.

  927. Added new clause to DCGETOPTIONS command: RESTOREDEFAULTSBUTTON.
       This will create a right-click area in the lower left corner of
       each dialog.  Clicking in this area will popup a message box
       allowing the user to restore the screen position and size to the
       defaults.  This is used in conjunction with
       DC_AutoRestoreWindow().

  926. Added new function: DC_AdsCursor2Excel().  This is used to create
       an Excel spread sheet from an Ads Cursor handle.  Also added an
       "Excel" button to DC_AdsSqlQuery() to output an SQL query to
       Excel.

  925. Fixed a bug in DC_GetDestroy().  It was not releasing some GC
       objects and thereby consuming memory.

  924. Added new DCPRINT commands to improve document control.
       (compatible only with Xbase++ 1.9 and later) :

       DCPRINT STARTPAGE - Starts a new page within a print job.
       DCPRINT ENDPAGE - Ends a page within a print job.
       DCPRINT ORIENTATION - Change orientation within a print job.
       DCPRINT PAPERBIN - Change paper bin within a print job.
       DCPRINT FIXED ON/OFF - Control fixed mode.

       See the example in .\samples\printer\document.prg

  923. Made improvements to the DCPRINT system to provide the ability to
       print documents that have "wrappable" text with imbedded
       merge-data and font changes.  See the example in
       \exp19\samples\printer\textwrap.prg

  922. Added new function: DC_ArrayTrim().  This is used to trim NIL rows
       and NIL columns from a 2-dimensional array.  Useful when
       converting a multidimensional array that contains a lot of NIL
       data into an array that can be sent to an Excel spreadsheet.

  921. Added new EXCEL clause to DCPRINT ON.  This will cause the print
       output to go to an Excel *.XLS file.  Note: this will work with
       any print job, however, the Excel data is relatively useless if
       the print job is not a columnar-style report.  Supported in
       Xbase++ 1.0 and above.  See the example in
       \exp19\samples\printer\excel.prg.

  920. Added new function: DC_Array2Excel().  This is used to create
       an Excel spreadsheet from the data in a 2-dimensional array.
       Supported in Xbase++ 1.9 and above.  See the examples in
       \exp19\samples\excel\test.prg and \exp19\samples\ads\adssql.prg.

  919. Added new function: DC_WorkArea2Excel().  This is used to create
       an Excel spreadsheet from the data in a workarea.  Supported in
       Xbase++ 1.9 and above.  See the examples in
       \exp19\samples\excel\test.prg and \exp19\samples\ads\adssql.prg.

  918. Added new function: DC_AdsSession().  This is used to create an
       ADSDBE DacSession for the current thread to be later used by
       DC_AdsStatement() or a regular dbUseArea().

  917. Added new class: DC_AdsStatement().  This is used to accept a SQL
       statement and create a SQL cursor that can be navigated with
       standard DBE navigation methods, like dbSkip(), dbGotop(),
       @ DCBROWSE, etc.  This uses a new feature of Xbase++ 1.9 that
       really simplifies the process of using SQL queries in an Xbase++
       application.  Nothing else is needed except the ADSDBE and
       Xbase++ 1.9.  Run the \exp19\samples\ads\adssql.exe program to see
       a demonstration of the simplicity and the power of this Xbase++
       1.9 feature.

  916. Fixed a regression error in DCBROWSECOL where Unselectable columns
       would not be colored properly when using the SORT clause.

  915. Fixed a regression error in DCPUSHBUTTON..STATIC that occurred
       starting in build 242 that was causing caption text to not align
       correctly.

       To clarify alignment options for DCPUSHBUTTON and DCADDBUTTON:

       You CANNOT use the BS_* alignment options with DCPUSHBUTTON STATIC
       buttons.  You CAN use the XBPSTATIC_TEXT_* alignment options with
       DCPUSHBUTTON STATIC but not with the standard DCPUSHBUTTON.

  914. DC_ArrayView() now has a pushbutton for displaying the array in
       Browse-Style format instead of Tree-View format.

  913. Fixed regression bug. ENTEREXIT will now work when the last GET is
       protected.

      ---------------- New to 1.9 (build 243) ----------

  912. Added new function: DC_BrowseGetList().  This aids in
       debugging dialog screens by providing a browse-view of a GetList.

  911. DCPRINT ON IMAGEWRITER and DCPRINT ON ACROBAT clauses now delete
       all *.$$$.MDI and *.$$$.PDF temp files.

  910. Added new IMAGEWRITER clause to the DCPRINT ON command.  This
       clause works similar to the ACROBAT clause except it uses the
       "Microsoft Office Document Image Writer" printer driver.  This
       driver is automatically installed when Microsoft Office is
       installed and automatically displays the print job in a preview
       window.  Run the SAMPLES\PRINTER\INVOICE.EXE sample and click on
       Print.  Added new DC_PrintPreviewImageWriterOpt() get-set function
       to set default options for this feature.

  909. Fixed a bug that prevented CARGO "CANCEL" from working on a
       DCPUSHBUTTON or DCADDBUTTON with the FANCY clause.

  908. Added new commands:

       DCSETRESIZE - Changes the default resize method.
       DCSETFONT - Changes the default font.
       DCSETCOLOR - Changes the default color.
       DCSETSAYOPTION - Changes the default DCSAY options.

       See the example(s) in SAMPLES\SET

  907. The DCPRINT system is now thread-safe.  This means that multiple
       print jobs can be run simultaneously in different threads.

  906. Array browser in DCBDEBUG now calls a browse-style browser/editor
       if the array is a symmetrical, multi-dimensional array.
       Double-Click headings to optimize columns.

  905. Improved DCPICKLIST to allow keyboard navigation.

  904. Added new DCRTF command to DCPRINT.CH.  This is used to imbed RTF
       in a print job.

  903. Added new ENTEREXIT clause to the DCGETOPTIONS command.  Added new
       NOENTEREXIT clause to the DCREAD GUI command.

  902. Fixed some commands in DCSTD.CH that would cause fatal errors on
       dot prompt commands.

  901. Added new function: DC_GetIDDefault().  This function will return
       an ID for an object based on the name of the variable passed.  It
       is used in DCDIALOG.CH to automatically assign a default ID when
       getting data that is an aliased field.

       Example 1 : @..DCGET MYFILE->name

       This will assign an ID of GET_MYFILE_NAME

       Example 2 : DCBROWSECOL FIELD MYFILE->name

       This will assign an ID of COL_MYFILE_NAME

  900. Added NORESIZE and NORESTORE clauses to @..DCDIALOG command.

  899. Fixed several regression errors from previous builds:

       a. DC_GetRefresh() did not repaint bitmaps created with DCBITMAP.
       b. Corrected Lastkey() problem in DC_DbEdit().
       c. Fixed a problem in DC_GrumpBrow() - Thanks to Stu Fraser.
       d. Corrected a problem with DCBROWSE objects blinking.
       e. Corrected problem with menus flickering.
       f. Refreshing a bitmap with DC_BitmapDraw() will now clear the
          screen if the bitmap does not exist.
       g. Datatooltips display correctly now if the data is a memo field.
       h. Fixed error that occurs occasionally in a DCTREEVIEW.
       i. Fixed bug where messages on DCMENUITEMs do not always display
          in message box.
       j. Fixed bug in DC_GetProgress() that could cause a divide by 0
          error.
       k. Fixed bug that could cause error if using @..DCGET..POPVALID in
          an object that is a cell editor.
       l. Fixed error that could occur in DC_AdsSqlQuery() if the
          ADSSQL.DBF file did not exist.
       m. Fixed bug in DC_RangeCheck() that would cause an error if the
          values passed are not numeric.



      ----------------  New to 1.9 (build 242) -----------

  898. Added a new 6th element to the DCGETOPTIONS .. SCALEFACTOR array.
       This is a logical element that determines whether windows that are
       Auto-Resized are also Auto-Scaled.  This means that a window that
       has been resized to 50% larger will be automatically re-scaled 50%
       larger the next time it is created.

  897. Added new NORESTORE clause to @..DCAPICK and 
       parameter to DC_APick().

  896. Fixed several bugs related to DCPUSHBUTTON .. STATIC.

  895. See new RMCHART sample submitted by Michael Rudrich:
       SAMPLES\RMCHART\RMCHART.PRG.  Requires free RMCHART ActiveX
       control to be installed.

  894. Added new parameter to DC_GetBitmap() to scale the bitmap to a
       specified percentage or size.

  893. Added new options SCALEBITMAP clause to the @..DCPUSHBUTTON and
       @..DCADDBUTTON commands.  This will shrink or enlarge a bitmap
       caption to fit exactly within the button size.  Note: bitmaps must
       be 24-bit (hi-color) for this to work correctly.

  892. Added new optional SCALEFONT clause to the RESIZE clause of all
       commands.  This will automatically scale the font size up or down
       when the object is resized.

       Run samples\resize\resize.exe.

  891. New sample programs:

       samples\activex\spellchk.prg - MS Word Spellchecking in a
       DCMULTILINE.

       samples\rtf\test.prg - DCRTF command.

  890. DC_PopColor() has been improved to display the color-safe palette
       in a better format - thanks to Brian Wolfsohn.

  889. Fixed a regression bug caused by Xbase++ 1.9.  Tooltips on browse
       columns now work correctly.

  888. Added new  parameter to DC_MsgBox().  This overrides
       the setting of DC_AutoRestoreWindow().  Also added new NORESTORE
       clause to the DCMSGBOX command.

  887. Added new function: DC_ZoomTransparent(). This function is used to
       cause a dialog window to go from 0% to 100% transparency or from
       100% to 0% transparency at a specified time period.  Run XDEMO.EXE
       to see the main window fade in.

  886. Added new function: DC_SetWindowTransparency().  This function
       will set a dialog window to any transparency from 0% to 100%.

  885. Added new function: DC_UNC2Drive.  This function returns the
       local mapped path from a UNC path.

  884. Added new function: DC_GetRefreshBlock().  This is a Get-Set
       function that is called inside DC_GetRefresh() to determine where
       in your application refreshes are being called.
       Example: DC_GetRefreshBlock( {|x|(dcbdebug x)} )

  883. Added new function: DC_IsDescendant().  This function determines
       if an object is a descendent of another object, ie a child, a
       grandchild, a great-grandchild, etc.

  882. Added new ONCLICK clause to the DCGETOPTIONS command.  This is
       used to assign a codeblock to evaluate any time the left mouse
       button is clicked in the dialog window.

  881. Added new command line parameters to XDOT.EXE.
       Run XDOT.EXE /? for help.

  880. Added new GOBOTTOM clause to @..DCMULTILINE.

  879. Added :setCaption() method to DC_XbpTabPage().

  878. Added support for the Danish Language. Thanks to Henrik Møllnitz.

  877. The DCBDEBUG window will now allow double-clicking in a stack
       column to go to the line of code in the default source editor.
       See the example in \exp19\samples\debug.

  876. Added new ALWAYSONTOP clause to the DCBDEBUG command.

  875. Fixed a bug in DC_RecSize().  It returned the wrong size.


      ----------------  New to 1.9 (build 241) -----------

  874. Includes demonstration version of eXpress++ Instant Messenger
       system.  Read \exp19\im\readme.txt.

       I eXpress myself ... therefore IM

  873. Tested with Xbase++ 1.9 (build 331).

  872. Added new ADDBUTTONS clause to DCPRINT ON.

  871. Added new DCSLE command.

      ----------------  New to 1.9 (build 240) -----------

  870. Added automatic record-locking when creating a DCGET that is
       aliased into a database.

       Ex: @ .. DCGET MYDATABASE->myfield ;
           VALID {||IIF(Empty(MYDATABASE->myfield), ;
                    MYDATABASE->myfield := 'xxx',nil), .t. }

       If the record is not already locked, then it will be locked and
       unlocked in the Get-Set code block and the Validation routine.

  869. Added new DCRTF command for creating windows that support RTF.

  868. Fixed regression bug that caused multiple problems involving
       navigation with the TAB key or Up/Down array keys.

  867. New function: DC_AvailableDrives()

  866. Fixed bug in DC_SendMailToDefault().

      ----------------  New to 1.9 (build 239) -----------

  865. Added new KEYDROP clause to @ .. DCGET .. COMBO.  This causes the
       combo box to drop down on pressing the first key in the GET.

  864. @ DCGUI_ROW, DCGUI_COL now works correctly after a @ .. DCSAY ..
       GRASTRING .. SAYSIZE 0.

  863. A MESSAGE clause on an EDITPROTECTED get now displays the message
       when clicking on the get with the mouse.

  862. The vertical bar text on OWNERDRAW submenus is no longer truncated
       if it does not fit the bar area, instead it is not displayed.
       This improves the visual effect of pulldown menus with long
       titles.

  861. Added new clauses to the DCMENUBAR and DCSUBMENU commands to
       support colors when using the OWNERDRAW feature.

       Added new parameters to DC_XbpMenuConfig() to control default
       colors and fonts.

  860. Added new function: DC_MoveCursorToObject().  This will position
       the mouse cursor in the center of an object.

  859. Tooltip system now works correctly with 2 monitors.  Thanks to
       Jack Duijf.

  858. Added three new parameters to the DC_GetPopupCaption() Get-Set
       function for controlling the defaults for POPUP buttons on
       DCSAY..GET and DCGET objects.

       Param 4 - Default width (in pixels)
       Param 5 - Default height (in pixels)
       Param 6 - Default hotkey

  857. The Magic Help tooltip system now includes two new functions:
       Thanks to Terry Wolfe.

       DC_AMagicHelp() - A Get-Set function that points to the magic help
       array.

       DC_KillMagicHelp() - Used to terminate the tooltip thread.

  856. Added 3 new parameters to DC_PopColor():

       1.  (default .FALSE.) presents only 216 colors to choose
          from.  This is the color-safe palette used in Web applications
          and Citrix/Terminal Server clients that choose only 256 colors.

       2.  (default .TRUE.) makes the dialog modal.
       3.  is the parent of the window.  Default is
          AppDeskTop().

  855. Included an example of a User-Definable Toolbar in XDEMO.EXE.
       This sample shows how to build a menu system that allows the user
       to pick any item from the menu and add it to the toolbar.  Click
       on the TreeView (first button) on the toolbar.

  854. Integrated Joe Carrick's MxPushButton class into eXpress as a new
       set of commands: DCMXPUSHBUTTON and DCMXADDBUTTON.  The support
       code is in DCMXBUTT.DLL.  The default DLL is crippled to allow the
       buttons to work for only 15 minutes.  To get full capability, it
       is necessary to purchase MxPushButton from Joe Carrick and then
       rebuild DCMXBUTT.DLL by running BUILD*.BAT in the SOURCE\DCMXBUTT
       directory.  MxPushButton provides a much improved pushbutton class
       including support for XP-Style buttons.  The price is very
       reasonable and includes source code.  This product adds value to
       every eXpress++ application.  Send an email to Joseph P. Carrick
       [ceo@youngdale.com] to order MxPushButton.  To see a demonstration
       of DCMX* commands, look at the MxPushButton sample in XDEMO.EXE -
       Sample Group 6.  Also select the TreeView button on the main menu
       of XDEMO.EXE and right click a tree item to build a custom
       toolbar.

  853. Fixed a bug that causes the TAB key to not properly evaluate WHEN
       clauses when pressed in a DCGET.

  852. Created a new RESTEST program in \exp19\samples\resize.  Use this
       program to test the behavior of resizing rules.

  851. Updated the MODIFY STRUCTURE command, DC_ModStru() and
       DC_StruUpdate() to no longer delete the associated .CDX file when
       updating a structure.  Instead, the .CDX is renamed to .CDK.

  850. Added new functions (thanks to Cliff Wiernik):

       DC_Dec2LongInt() - Converts a Long Integer (32 bits) TO binary
       character representation

       DC_XorBitsLong() - Performs an exclusive OR on 2 long integer (32
       bit values) values

       DC_Hex2Bin() - Converts Hexadecimal numbers to binary

  849. Added a 2nd parameter to DC_SpawnUrl().  This is a logical
       parameter (Default is .FALSE.) that is used to establish whether
       the spawned program is run in the background.

  848. Added an 11th parameter to DC_PrintPreviewAcrobatOpt().  This is a
       logical parameter (Default is .TRUE.) that is used to establish
       whether eXpress++ will automatically erase temporary PDF files.

  847. Improved @..DCPROGRESS to provide more options for the PERCENT
       text that is displayed in the progress bar.  Text no longer is
       displayed in a separate object.  Text font and color is now
       selectable via new FONT and PERCENTCOLOR clauses.  New RADIUS,
       OUTLINE and DYNAMIC parameters improve appearance.  Progress bar
       is automatically repainted when another dialog is moved over it.
       See the new Progress Bar example in XDEMO.EXE - Sample Group 6.

  846. Included a new sample of a Printer "Front-End" dialog that can be
       used with all print jobs.  This "standardized" dialog allows the
       user to select default print options including sending the print
       job to an email recipient.  Look at the INVOICE.PRG example in
       \exp19\samples\printer.

  845. Fixed a bug in DC_IsDir() to make it work correctly with UNCs.

  844. Fixed a bug in the Dot-prompt USE command that would not open
       files if the DEFAULT directory or PATH contained a UNC.

  843. Added new ACTIVATEITEM clause and NAME clause to the DCSUBMENU
       command.  ACTIVATEITEM  can be used to run an Indexed
       procedure in lieu of ACTION clauses on each DCMENUITEM command.
       NAME  is applied to the :setName() method of the menu
       object to be retrieved later.

       Example:

       bRunProc := {|nItem,nIndex,oXbp,nName|nName := oXbp:setName(), ;
                       RunProcedure( nName + nItem )}

       DCSUBMENU oMenu1 NAME 1000 ACTIVATEITEM bRunProc
       DCMENUITEM 'Item 1' PARENT oMenu1
       DCMENUITEM 'Item 2' PARENT oMenu1

       DCSUBMENU oMenu1 NAME 2000 ACTIVATEITEM bRunProc
       DCMENUITEM 'Item 1' PARENT oMenu2
       DCMENUITEM 'Item 2' PARENT oMenu2

  842. Added new function: DC_BitmapResourceFile( ncaResfile ).  This is
       a Get-Set function that is used to establish a list of resource
       DLLs for finding bitmaps.  All bitmaps in eXpress++ are loaded via
       the function DC_GetBitmap().  This function always returns a
       bitmap object of type XbpBitmap().  This function now runs through
       a loop to try to load resources from Dlls set with
       DC_BitmapResourceFile() if the named resource is not linked to
       the EXE, therefore bitmaps with a numeric resource ID can now be
       in multiple DLLs and do not need to be linked to the .EXE.

       Example:

       nResDll1 := DllLoad('MYBITMAPS.DLL') // load my custom bitmaps
       nResDll2 := DllLoad('DCRES.DLL')     // load eXpress++ bitmaps

       DC_BitmapResourceFile( { nResDll1, nResDll2 } )

       DCADDBUTTON CAPTION MYBITMAP_PERSON // defined in MYBITMAPS.DLL
       DCADDBUTTON CAPTION BITMAP_HELP_M   // defined in DCRES.DLL

       This eliminates the need to use the RESFILE clause when defined
       bitmap captions.  Also, if the RESTYPE clause is not used, then
       the resources must be of type BITMAP, GIF, JPEG, BMP or PNG in
       your resource DLLs.

       Run XDEMO.EXE to see that bitmaps are now loaded from DCRES.DLL.

  841. Included many new 25 x 25 bitmaps in sub-directories under
       BITMAPS\MOREBITMAPS.  These, and the bitmaps in BITMAPS are now
       all included in EXPRESS.RES and DCRES.DLL.  Thanks to Bobby
       Drakos.

  840. The DCSUBMENU and DCMENUITEM commands now allow for the parent to
       be a DCTREEITEM object, thus providing a means to build both
       pulldown menus and Treeview menus from the same source code.
       See the example in XDEMO.EXE.  Select File - Tree Menu from the
       main menu.  This demo program also includes a methodology for
       creating a custom toolbar from the Treeview menu and saving the
       settings to the Windows registry.

  839. Improved the DC_AdsSqlQuery() dialog to now allow for selecting
       data types.

  838. The CHECKWHEN clause of DCMENUITEM is now supported in OWNERDRAW
       menus.

  837. Added new function: DC_RecSize().  Use this in place of RecSize()
       to prevent "non-supported" errors when using the ADSDBE.  This
       appears to be a regression in Xbase++ 1.9

  836. Fixed regression problem that caused error when using sub-tabpages
       on tabpages.

           ----------------  New to 1.9 (build 238) -----------

 835. Added new GRAY  clause to the DCPRINT BOX command.  This
      causes boxes to be filled in grayed.  Thanks to Rick Dalzell.

 834. Fixed a bug in DC_DbGoPosition() that prevented a browse from
      navigating to the top record when moving the slider scroll bar to
      the top.

 833. Added new parameter to DC_Scrn2ClipBoard() to allow printing only
      the contents of an object, rather than the entire screen.

 832. Modified DC_XbpGet() class to allow for scoped dropdowns similar
      to Internet Explorer.  See XDEMO.EXE - Sample Group 6 for an
      example of how to use @ DCGET .. COMBO to invoke this feature.

 831. Added a new set of DC_SQL*() functions to improve support of
      eXpress++ applications that use SQLexpress.

      DC_SQLConnection() - Make a SQL connection
      DC_SQLCursor() - Create an SQL cursor
      DC_SQLGetSetBlock() - Create a Get-Set block for editing
      DC_SQLSortBlock() - Create a Sort block for a browse column.
      DC_SQLFieldBlock() - Create a Field block for browsing.
      DC_SQLDataSet() - Create a sub-set of an existing dataset.

 830. Dramatically improved performance of all Ads*() function wrappers
      that call ACE32.DLL.

 829. Added new ALWAYSONTOP clause to the DCGETOPTIONS command. This
      causes the dialog window to always display in front of all other
      dialog windows from all other applications.

 828. Added version info to all DC*.DLLs.  Now when viewing DLL info
      with operating system, version information will be displayed.

 827. Removed DCLIPS.DLL from system. Stub functions from this DLL were
      moved to DCLIP1.DLL.

 826. Added new functions: DC_HourGlassOn() and DC_HourGlassOff().

 825. Fixed a bug in OWNERDRAW menus.  Disabled menu items now are
      painted correctly.

 824. Added new function: DC_TagRecord().  This is used to tag/untag a
      record or group of records in a Browse.

 823. Added new function: DC_ConfigDialogButtons().  Thanks to Cliff
      Wiernik.  This allows the Maximize button to be disabled in an MDI
      window.

      Ex: DCREAD GUI EVAL ;
        {|o|DC_ConfigDialogButtons(o,DLG_BUTTON_DISABLEMAX)}

 822. Added a new Touch-screen example in \exp19\samples\touchscr that
      demonstrates a scalable touch-screen application.  Run PBUILD
      TOUCHSCR2.XPJ.

 821. Fixed a bug in DC_Purge().  Index key builder was not returning a
      value.

 820. Added new RESFILE clause to @..DCPUSHBUTTON, DCADDBUTTON, ;
      @..DCTABPAGE, @..DCSTATIC, @..DCDIALOG and DCPRINT BITMAP
      commands. This is used in conjunction with the RESTYPE clause.

     ----------------  New to 1.9 (build 237) -----------

 818. Tested with Xbase++ 1.9 beta (build 320).

 817. Added a new function: DC_PrintImage().  This is a WYSIWIG printing
      function that prints the screen image of an object.

      For an example, run XDEMO.EXE then place the mouse over any object
      and press the middle mouse button.

 816. Added new function: DC_IsDir().

 815. Conditional compiling has been inserted in the source code to
      replace ActiveX code, that previously used JazzAge, with new
      Xbase++ ActiveX code.  If the source is compiled with 1.8 or 1.82
      then Jazzage will be used, otherwise it is not required under 1.9.

 814. Added new function: DC_XbpMenuConfig().  This is a Get-Set
      function that is used to configure the default colors and fonts
      for the OwnerDraw menus.  Used only in Xbase++ 1.9.

 813. Added Xbase++ 1.9 OwnerDraw feature to eXpress++ menu system for
      more eye-appealling pulldown and popup menus.

      This feature is enabled only when compiled in Xbase++ 1.9.

      New clauses added to DCMENUBAR command:
        OWNERDRAW
        BGCOLOR
        BARFONT
        BARCOLOR

      New clauses added to DCSUBMENU command:
        OWNERDRAW
        BARTEXT
        BARFONT
        BARCOLOR
        BGCOLOR

      Example:

        DCSUBMENU oFileMenu PROMPT 'File' BARTEXT 'File' ;
          BARCOLOR GRA_CLR_RED, GRA_CLR_YELLOW PARENT oMenuBar ;
          BARFONT '14.Arial Bold'

      Run the XDEMO.EXE program in .\bin19 to see an example of
      this new menu.

 812. Added 2 new options to DC_PrintPreviewAcrobatOpt() configuration
      array:

      Element  Type  Description
      -------  ----  ---------------------------------------------
          9      C   Path to create temporary .PDF files
         10      L   .TRUE. if .PDF file is given same name as title.
                     .FALSE. if .PDF file is given a cryptic name.

 811. Modified the behavior of @..DCGET to automatically delete the
      marked text when pressing the Backspace key.  This is more
      standard behavior in Windows applications.  It also provides for
      special functionality such as "Autofill" to work correctly.  See
      the "Autofill Get" sample in XDEMO.EXE - Sample Group 6.

 810. Added new RESTYPE clause to @..DCPUSHBUTTON, DCADDBUTTON, ;
      @..DCTABPAGE, @..DCSTATIC and DCPRINT BITMAP commands.  This
      provides support for bitmap resources of type BMP, PNG, GIF and
      JPEG that have been linked into a .RES file to be used as the
      caption.

      Example:

      @ .. DCPUSHBUTTON CAPTION 2000 RESTYPE GIF

      // myres.arc
      USERDEF GIF
      2000 = FILE ".\GIFChart.GIF"

 809. Added new OPTIONS clause to the @..DCRADIOBUTTON command.
      This provides checkbox visual options such as "Push-Like".

      Example: @ .. DCRADIO n VALUE 1 PROMPT 'Selection;1'
                       OPTIONS BS_PUSHLIKE + BS_MULTILINE
               @ .. DCRADIO n VALUE 2 PROMPT 'Selection;2'
                       OPTIONS BS_PUSHLIKE + BS_MULTILINE

      See the example in XDEMO.EXE - Sample Group 6

 808. Added new OPTIONS clause to the @..DCCHECKBOX command.
      This provides checkbox visual options such as "Push-Like".

      Example: @ .. DCCHECKBOX PROMPT 'Check Me;First' ;
                       OPTIONS BS_PUSHLIKE + BS_MULTILINE

      See the example in XDEMO.EXE - Sample Group 6

 807. Added new ALIGNCAPTION clause to the @..DCPUSHBUTTON and
      DCADDBUTTON commands.  This provides alignment of button captions
      left, right, top, bottom, center, vcenter and multiline.

      Example: @ .. DCPUSHBUTTON CAPTION 'This is;a Test' ;
                       ALIGNCAPTION BS_MULTILINE + BS_LEFT

      See the example in XDEMO.EXE - Sample Group 6

 806. Added new function: DC_GetValidateDebugBlock(). This is a Get-Set
      function to aid in debugging VALID statements, particularly to
      debug how the environment may have changed after a validation and
      thus may cause errors later in the program.

 805. Added a replacement for the VALID clause: NOEXITVALID.  This is
      used when the VALID block is to be evaluated only during regular
      editing but not during EXITVALIDATE. - Thanks to Jack Djuif

 804. Added NOTABSTOP clause to DCGETOPTIONS.

 803. Improved DC_QueryBuild() to allow for improved integration with
      an existing application.  See example in samples\query.

 802. Added new command: DCHTMLVIEWER.  This is used to create a
      WebBrowser control that uses Internet Explorer.  Works only with
      Xbase++ 1.9.  See the example in SAMPLES\ACTIVEX\WEBBROW.PRG.

 801. Improved the RGB mode of DC_PopColor() to allow color choice by
      either clicking on the color bars or the spinbuttons.

 800. Added new ENDSPIN, DOWNSPIN and UPSPIN clauses to the DCSPINBUTTON
      command.

 799. DC_SetScopeArray() now accepts an optional multi-dimensional array
      as the record array.  The first element must be a numeric record
      number.

 798. Fixed a bug in DC_DataSave() that sometimes stored the wrong table
      name when using the function to pass workarea info to another
      thread.

 797. DCSUBMENU now accepts a code block as the caption.  The caption
      will be updated every time the menu is invoked.

 796. Added new Function: DC_Drive2UNC().  Thanks to Dian Ray.  This
      function returns the UNC from a mapped drive letter.

 795. Added new command: DCACTIVEXCONTROL.  This is used to embed an
      ActiveX Control onto another object.  See
      samples\activex\acrobat.prg.  Note: This command is functional
      only under Xbase++ 1.9 or later.

 794. Added new feature to DCBDEBUG.  Double-clicking on the stack
      column will now invoke the default editor to edit the code at the
      the proc and line number of the stack.

 793. Fixed a bug in DC_Num2Bin() and DC_BitTest().  A number of 255 was
      not converted correctly.

 792. Added new Get-Set function: DC_SetDateRange().  This is used to
      establish a valid date range for all date GETs.

 791. Fixed problem with DC_TestBof() causing Eof() to report an
      incorrect result under some conditions.

 790. DC_GetListValidate() now accepts new parameters.  Thanks to Jack
      Duijf.

 789. Added new  parameter to DC_PopFile() for choosing
      multiple files. - Thanks to Bobby Drakos.

 788. DC_AutoRestoreWindow() now restores the frame state of the window.

 787. Added new function: DC_BrowCellEditLastKey().


     ----------------  New to 1.8 (build 236) -----------

 786. Added a new ICON clause to DCMSGBOX command and an 
      parameter to DC_MsgBox().

 785. Fixed a bug in Cell-Editing that can eventually cause a stack
      overflow fatal error after a long period of cell-editing.

 784. Added new Get-Set Function: DC_ScopeAds().  This is used to enable
      or disable the ADSDBE scoping system.

 783. Added new SCALEFONT clause to the DCPRINT ON command.

 782. Fixed a bug related to the EVAL clause of DCGETOPTIONS and
      DC_GetOptDefault().  The EVAL clause will now be applied to all
      windows as the default EVAL clause.  ** CAUTION ** This may cause
      some applications to break if you are currently using the EVAL
      clause of DCGETOPTIONS followed by DC_GetOptDefault().  I
      recommend using the EVAL clause of DCREAD GUI for your main
      screen.

 781. The NODESCENDTOGGLE clause of @..DCBROWSE will now remove the
      arrow from the column headings that use the SORT clause.

 780. Added new function: DC_SpawnURL(). This is used to spawn the
      program associated with a file name or URL.

 779. Added new function: DC_SendMailToDefault().  This is used to send
      an email via the default email client on the current workstation.

 778. DC_BrowPres() now accepts a 2nd parameter - GetOptions.  This is
      the options array used by DCGETOPTIONS.  This should be passed
      when using scaling.

 777. DC_PrintPreviewAcrobatOpt() now accepts a 3 as the 8th element to
      cause Acrobat or any other registered .PDF viewer to be launched
      as the viewer.

 776. New function: DC_FormatMemoToWidth().  This function accepts a
      character string, a width and a Presentation Space object.  It
      returns a character string with Hard CRs.  It is used to create a
      memo that fits perfectly within a specified area based on the font
      used.

 775. Added a new DEFAULTRESIZE clause to the DCGETOPTIONS command.
      This clause accepts an array of two parameters:
      (1) A code block that returns an array of two values for
          repositioning.
      (2) A code block that returns an array of two values for resizing.

      See the DCGUI_RESIZE_* constants in DCDIALOG.CH.

 774. Added Automatic Font Scaling to the new SCALE clause of
      DCGETOPTIONS.  This eliminates the need to select a font that
      matches the scale setting.  See the examples in samples\scale.


     ----------------  New to 1.8 (build 235) -----------

 773. Tested with Xbase++ 1.9 beta (build 316).

      The DC_PrintPreviewAcrobat() and DC_Help() functions now use the
      Xbase++ 1.9 XbpActiveXObject() class instead of JazzAge when the
      source is compiled with Xbase++ 1.9.

 772. Added two new functions:

      DC_ComboGetSetBlock() is used to create a Get-Set code block for
      DCCOMBOBOX that allows for parallel arrays when using comboboxes.

      DC_ComboSelectedBlock() is used to create an Item-Selected code
      block that allows for parallel arrays when using comboboxes.

 771. Date type GETS are now incremented with the + (plus) key and
      decremented with the - (minus) key.

 770. Added new DC_Calendar() class in _DCCALEN.PRG.  See the example in
      samples\calendar.

 769. Added new ALIGNRIGHT clause to the DCSAY and DCSAY..GET commands.
      This causes the end of the SAY object to align with the column
      given rather than the start of the SAY object.  See the Align
      Right sample in Sample Group 6 of XDEMO.EXE.

 768. Added new DEFAULTFONT clause to the DCGETOPTIONS command.
      This is used to set the default font for all objects created
      by DC* commands.

 767. Added new SCALEFACTOR clause to the DCGETOPTIONS command.
      This is used to multiply X and Y coordinates by a factor which
      provides for enlarging or decreasing screen size.  See the
      examples in samples\scale.

 766. Added LINEWIDTH clauses to the @ DCPRINT BOX and @ DCPRINT LINE
      commands.

 765. Added COLOR clauses to the @ DCPRINT commands.

 764. Added a new Resizing system that makes it possible to define the
      rules for resizing and repositioning screen objects when the
      parent dialog window is resized.

      A new RESIZE clause has been added to DC* commands.  This clause
      accepts an array of two parameters:
      (1) A code block that returns an array of two values for
          repositioning.
      (2) A code block that returns an array of two values for resizing.

      A new RESIZE clause has been added to the DCGETOPTIONS command.
      This clause creates a resize callback to use DC_Resize() as the
      resizing function.

      A new DC_Resize() function is used in conjunction with the RESIZE
      clauses to perform the resizing and repositioning.

      See the example in samples\RESIZE

 763. Tooltips are now handled in a single thread, rather than a
      separate thread for each window.  Thanks to Jack Duijf.

 762. DC_AutoRestoreBrowse() now restores the font and height of the
      headers and footers.

 761. Added new clauses to DCBROWSECOL command:
      HFONT 
      HHEIGHT  (in pixels)
      FFONT 
      FHEIGHT  (in pixels)

 760. Added new class for putting an eXpress++ application icon
      on the Taskbar.  See the example in samples\calendar.

 759. COLOR and FONT clauses of DCDIRTREE now are supported.

     ----------------  New to 1.8 (build 234) -----------

 758. Added two new functions: DC_BusyOn() and DC_BusyOff().  These are
      a replacement for DC_WaitOn()/DC_Impl() that allow for a busy
      dialog to be embedded within a window while performing a process
      in a thread.  Build the PRINT.XPJ in samples\animgif.

 757. Added new options for the @ .. DCBROWSE .. EDIT clause.
      EDIT  may now be an optional 2-element array.  The
      first element is the event which will start cell-editing.  The
      second element is a code block to evaluate when a key is pressed
      in the browse.  The value of the key pressed is passed to the code
      block.  The code block must return a numeric value equivalent to
      the key to enter into the cell, or an array of numeric values to
      enter into the cell.  If a proper value is returned then cell
      editing will start.

      Example:

      @ .. DCBROWSE .. ;
        EDIT { xbeBRW_ItemSelected, {|n|_KeyEdit(n)} }

      STATIC FUNCTION _KeyEdit( mp1 )

      IF mp1 >= 65 .AND. mp1 <= 90  // A-Z
        RETURN mp1
      ELSEIF mp1 >= 97 .AND. mp1 <= 122 // a-z
        RETURN Asc(Upper(Chr(mp1)))
      ELSEIF mp1 == xbeK_SH_DOWN
        RETURN 0
      ENDIF

      RETURN nil

 756. Fixed bug in DCPUSHBUTTON .. STATIC where a window that is
      partially covering the button could activate the button when
      clicked in the window.

 755. Fixed bug in numeric Gets where occasionally the value typed in at
      the beginning of the get is concatenated with the existing value
      rather than replacing the existing value.

 754. Dialog windows now use an improved technique for managing the
      mouse cursor in a busy state.  The "wait" or "hourglass" cursor is
      now applied only to the parent dialog and the mouse is captured by
      the parent dialog.  This reduces the risk of IDSC errors.

 753. Added new "Script-Save" feature to dot-prompt window.  Click on
      the DOT button to open a window for saving and restoring scripts.
      Now you can write a script in the dot-prompt window and save it
      for later retrieval and execution.

 752. New function: DC_MoveParentWindow() is used to move the parent
      window with the mouse by clicking on a child object at any level.

      Example: oStatic:lbDown := {|a,b,c|DC_MoveParentWindow(a,b,c)}

      Clicking the left button on oStatic will allow movement of the
      entire window until the mouse is released.
      See example in samples\movewin.

 751. Fixed several dot-prompt and DBU bugs:
      a. Print List caused an error when no browse/edit window open.
      b. Deleting record in browse window didn't refresh browse
         correctly.
      c. Record number not always refreshed when moving thru browse.
      d. Error when deleting record in browse.
      e. DELETE REST caused fatal shutdown.
      f. Summing fields from Utilities caused wrong fields to be summed.

 750. Added ACE Wrappers for all AdsDD*() dictionary functions to
      _DCADS.PRG.

 749. Added support for ADS SQL cursors to the eXpress++ browse
      and cell-editing system. Now eXpress++ can be used with ADS to
      create SQL queries and render them in a DCBROWSE.  Also added new
      ADSFIELD clause to DCBROWSECOL.  See examples in
      \exp18\samples\ADSSQL.

      New functions:  DC_AdsSQLQuery() - A SQL Query builder
                      DC_AdsSkipper() - A Skipper for ADS cursors
                      DC_AdsGoPosition() - Used in GoPosition block
                      DC_AdsPosition() - Used in Position block
                      DC_AdsFieldBlock() - Creates Get-Set code block
                      DC_AdsDDCreate() - Creates a new Dictionary

      New Dot-prompt command: SQL QUERY -> Invokes query builder.

 748. Added new Get-Set function DC_GetComboImmediate(). The function
      changes the behavior of @..DCGET..COMBO.  A .TRUE. setting will
      cause the GET to update every time a new item is selected in the
      dropdown browse.  A .FALSE. setting will cause the GET to update
      only after double-clicking in the browse.

 747. Added 8th element to aFields array that is passed to
      DC_FindBrowse().  This is the picture clause for each column.

 746. New function: DC_PrinterPortToName() is used to return the name of
      a printer that is assigned to a specified port.

 745. New function: DC_CompleteEvents() is used to process events in
      special situations.

 744. Added new :writeXML() method to the DC_XmlNode() class.

 743. The SORT clause of DCBROWSECOL now looks at the value returned by
      the code block.  If the value is a logical .F., then the column
      header is not highlighted.  Non-sortable columns in
      @..DCFINDBROWSE are also not highlighted anymore after displaying
      the "No Index/Sort on this Column" message.

 742. Added a new :fitColumns() method to the DC_XbpBrowse() class.
      Calling this method will resize all columns to fit within the
      browse width.

 741. Fixed a bug in DCTREEITEM .. HELPCODE.  Help codes were not
      getting properly passed to the help system.

 740. Fixed a bug in @ .. DCGET .. PASSWORD.  The password option would
      not work correctly with the POPUP clause.

 739. Added new function to DCHELP.DLL: DC_HelpIcons().  This is a
      Get-Set function that is used to add custom icons to the help
      system.

 738. DCBROWSECOL .. DATATOOLTIP now supports SQLExpress objects.

 737. Fixed bug. The EXIT codeblock now works when using the DELETE
      feature of Browse cell-editing.

 736. Fixed a bug that caused a runtime error when using DCGRA* commands
      in conjunction with the DISABLEDCOLOR clause of DCGETOPTIONS.

 735. Fixed regression problem caused in build 232.  HCOLOR clause of
      DCBROWSECOL was broken.

 734. The captions of DCSUBMENU and DCMENUITEM may now be a code block
      that returns a character string.  The menu prompt will be changed
      to the eval of the code block when DC_GetRefresh() or DC_GetWhen()
      is called.

 733. Fixed regression problem in DC_GetValidate() when object is hidden
      or disabled.

 732. Clicking on the CANCEL button now aborts @ .. DCGET .. RANGE
      checking.


     ----------------  New to 1.8 (build 233) -----------

 731. DC_AutoRestoreBrowse() now restores column fonts.

 730. Improvements to DC_Dbu():

      (1) Now creates a new window for each workarea unless the /reuse
          option is used.

      (2) Scrolling in edit window improved.  Edit fields now resize
          properly when window is resized.

 729. Added a new 3rd parameter to DC_TokenArray().   is a
      logical parameter (default is .F.).  If  is .TRUE. then
      delimiters that exist within quotes "" are ignored and quotes are
      stripped.

      Example: cString := '"Donnay, Inc.",'"eXpress++"'
      DC_TokenArray(cString,',',.f.) ->
         returns {""Donnay", " Inc."", ""eXpress++""}
      DC_TokenArray(cString,',',.t.) ->
         returns {"Donnay, Inc.", "eXpress++"}

 728. @..DCTABPAGE now supports captions that are text, resources or
      images.

      Examples:

      @ .. DCTABPAGE .. CAPTION '\exp18\bitmaps\pencil.bmp'
      @ .. DCTABPAGE .. CAPTION 'Pencil'
      @ .. DCTABPAGE .. CAPTION BITMAP_PENCIL_S

 727. Added new function: DC_SetScopeArray(). This is used to create a
      "roll-your-own" style of scope on a database.  It is much better
      than filters or scopes when needing to browse a subset of a large
      database.  An "array" of record numbers is used to establish the
      scope and all DC_Db*() functions will respect the scope including
      @..DCBROWSE.

      Example:
      USE TICKETS INDEX TICKETS
      OrdSetFocus('DATE')
      dbSeek(Date())
      aRecords := {}
      DO WHILE TICKETS->date == Date()
        IF TICKETS->time = '10:00' .OR. TICKETS->time = '11:00'
          AAdd(aRecords,TICKETS->(RecNo())
        ENDIF
        SKIP
      ENDDO
      DC_SetScopeArray(aRecords)
      DC_DbGoTop()
      @ .. DCBROWSE ALIAS 'TICKET'

 726. Added new 8th option to DC_PrintPreviewAcrobatOpt().
      The 8th element is used to determine the ActiveX control which
      will be used for previewing with Acrobat:

      Element  Type   Description
      -------  ----   ------------------------------------------
         8      N     1 - Use Acrobat control (default)
                      2 - Use Universal Web Browser Control

      Using the Universal Web Browser Control will eliminate a memory
      leak in the AcroRd32.exe process that is spawned from the ActiveX
      control, however the window closes slower.

 725. Added new EXITAFTERPRINT clause to DCPRINT ON.  This will close
      the preview window after the print from preview is selected.

 724. Added new Get-Set function: DC_XbpGetPres().  This is used to set
      the default PRESENTATION parameters for the DC_XbpGet() class
      and all DCSAY..GETs and DCGETs.

 723. The Tracker now supports SMTP authentication (when using
      Marshallsoft library).

 722. DC_BitMapDraw() now supports .PNG files.

 721. Added new parameters to DC_BrowseSort() to allow changing the
      color of browse headings that are "sortable" but "unselected"
      columns.  Users can now see which column headers may be clicked on
      for resorting or reindexing.

      Example: LOCAL aSort := ;
          { GRA_CLR_WHITE, ;    // Sort Selected Color (Foreground)
            GRA_CLR_RED, ;      // Sort Selected Color (Background)
            GRA_CLR_WHITE, ;    // Sort Nonselectable Color (Foreground)
            GRA_CLR_DARKGRAY, ; // Sort Nonselectable Color (Background)
            nil, ;              // Sort UP Bitmap (no longer used)
            nil, ;              // Sort DOWN Bitmap (no longer used)
            GRA_CLR_WHITE, ;    // Sort Unselected Color (Foreground)
            GRA_CLR_BLUE }      // Sort Unselected Color (Background)

      NOTE: The bitmaps are no longer used to determine sort ascending
            or descending.  Instead, special Marlett characters are
            used.

 720. Fixed bug in DC_GetValidate() and DC_GetListValidate() that allows
      validation of an object that is disabled or hidden.

 719. Added new NORESTORE clause to the @..DCBROWSE command.  This is
      used to override the setting of DC_AutoRestoreBrowse().

 718. Added new  parameter to DC_PopFile().

 717. Added a new FILTER clause to the @..DCBROWSE command.  This is
      used to set a filter for browsing arrays.

      Example: @ .. DCBROWSE .. FILTER {|a|'.DBF'$Upper(a[1])}

 716. How to secure a web application: see the example in the
      \samples\stunnel directory.

 715. How to display animated GIFs: see the example in the
      \samples\animgif directory.

 714. Added new function: DC_RegDelete().  This is used to delete a key
      and it's values.

 713. Added a new NORESTORE clause to DCREAD GUI and a lNoRestore
      parameter to DC_ReadGui().  This will override
      DC_AutoRestoreWindow() and insure that the window coordinates and
      size are never saved and restored.

 712. DC_GetReadInsert() has been changed to accept either a logical
      value or a numeric value.  Some users did not want mode changed.

      DC_GetReadInsert( xMode )

      xMode  Description
      -----  ------------------------------------------
       .T.   Set Insert Mode ON
        2    Set Insert Mode ON
       .F.   Set Insert Mode OFF (Overstrike ON)
        1    Set Insert Mode OFF (overstrike ON)
        0    Do not change Insert/Overstrike mode

     ----------------  New to 1.8 (build 232) -----------

 711. Added \exp18\upx directory which includes program for packing EXEs
      and DLLs.

 710. Added two new functions: VScrollBarSize() and HScrollBarSize().
      Returns an array defining the size of scrollbars selected by the
      user.

 709. Added a new Get-Set function: DC_EnterExitMode()
      0 - Standard Enter-Exit (exits if ENTER is pressed on last Get)
      1 - ENTER pressed on last Get gives focus to OK button.
      2 - Exits if ENTER is pressed any time.

 708. A DCGET of type "Date" now supports the '@K' picture clause.

 707. DC_APick() and DCAPICK now support a new parameter:
      cAutoSeekPicture and AUTOSEEKPICTURE.  If a character string is
      passed then an autoseek window will be created above the
      picklist browse, using the passed picture.

 706. DC_AutoRestoreWindow() now only saves the window if it is in a
      normalized state.

 705. Fixed a bug caused by DC_GroupFix() that would not allow DCGROUP
      box objects to be overlayed using the HIDE clause.

 704. Fixed a bug in DC_Dbu() that was causing a fatal program exit when
      selecting ADSDBE from the File menu.


     ----------------  New to 1.8 (build 231) -----------

 703. Fixed a few bugs in the HTML framework classes.

 702. Fixed a visual regression caused by trying to implement fixes for
      the XP manifest anomoly in Xbase++.  There is now a new solution
      for the problem of DCRADIO buttons on DCGROUP boxes not displaying
      correctly when using manifest files.  See the new function
      DC_GroupBoxFix() and run the test program in \exp18\samples\xp.

 701. Fixed a regression bug in DCHOTKEY.  The PARENT clause now works
      again.

 700. Added new Get/Set function: DC_GetReadInsert().
      This is used to set the default insert mode when entering a new
      dialog.

     ----------------  New to 1.8 (build 230) -----------

 699. Updated DCDIALOG to add support for the CALCULATOR clause to
      @ .. DCSAY .. GET.

 698. Fixed regression bug in XDEMO.EXE that was causing runtime error
      if XDEMO.CFG did not exist.  Fixed visual problem in X_Sample_8().

 697. Added a new DC_XbpBrowse():restoreDefault() method.
      Call this method to restore browses to their default configuration
      when using the DC_AutoRestoreBrowse() feature.

 696. Corrected a regression bug in DC_XbpBrowse():destroy()



     ----------------  New to 1.8 (build 229) -----------

 695. Added a new library: DCXML.DLL.  This library contains functions,
      classes and methods for reading and parsing *.XML data in a way
      that is simple to use in Xbase++ applications.  For a sample
      program see SAMPLES\XML.  Requires the ASXML10.DLL from Alaska
      Software.

      New function: DC_Xml2ObjectTree() reads an XML file and creates an
      object tree.

      New class: DC_XmlNode() contains a set of methods for easily
      extracting the data from the object tree.

 694. Added example of how to build an SQL browse in SAMPLES\SQL.

 693. Added support for MarshallSoft EMAIL to the Tracker.  See the
      example in SAMPLES\TRACKER.

 692. Added support for Multiline Rows in DCBROWSEs. Run the sample
      MULTIROW.PRG program in SAMPLES\BROWSE for more information.

 691. Added DC_XBrowse() sample in samples\xbrowse directory.

 690. Added documentation to EXPRESS.HLP for the new functions added in
      build 228.

 689. Fixed several bugs in DC_AutoRestoreBrowse() and
      DC_AutoRestoreWindow().

 688. Fixed regression bug in DC_PopDir() that was causing drive
      selection box to not function.


     ----------------  New to 1.8 (build 228) -----------

 687. Added improvements to DCBDEBUG debugger window.

 686. Added support for XP Manifest files.  Allows for XP manifest files
      to be included in a .RES file or as a separate file to provide
      your application XP-style buttons with no recoding or recompiling.

 685. Added a new framework class: DC_XBrowse().  This is a class that
      allows for easy creation of data-driven browse/edit windows for
      databases.  Windows can be related to other windows either in
      the same thread or in other threads.  Full of handy
      user-configurable features for building browse/edit screens and
      saving configurations to an .INI file or registry.

      Example: USE customer
               oBrowse := DC_XBrowse():new()
               oBrowse:read()

 684. Added new function: DC_AutoRestoreBrowse().  This is a Get-Set
      function used to set the Registry directory for storing browse
      column sizes and order.  Data is saved to registry when a browse
      is destroyed and restored from the registry when a browse is
      created. The browse unique ID is used as the value name.

 683. Added new function: DC_AutoRestoreWindow().  This is a Get-Set
      function used to set the Registry directory for storing window
      sizes and coordinates.  Data is saved to registry when a window
      is closed and restored from the registry when a window is created.
      The window title is used as the value name.

 682. Added support for Turkish Language, thanks to Hakan šNAL.

 681. Added support for marker lines and dynamic colors to bar graph
      system.

 680. Added a  parameter to DC_PopFile().

 678. DC_PrintPreviewAcrobat() now uses the Internet Explorer OCX rather
      than the Acrobat OCX.  This prevents a memory leak in ACRORD32.EXE
      when viewing PDF files over and over again.

 677. @..DCBROWSE now supports SQLStatement and SQLDataSet objects
      created by SQLexpress.  eXpress++ can now be used for SQL Server
      projects with the same ease of programming as for DBF projects.

 676. Modified DC_ReadGuiEventLoop() to now handle calls to
      xbpHandleOcxEvents() from the Xbase++ OCX (ActiveX) system.  This
      will insure that ActiveX controls function properly in an
      eXpress++ dialog.  Must use the WAIT clause of DCREAD GUI when
      embedding OCXs in an eXpress++ dialog using the Xbase++ OCX
      system.  See the ANIMGIF example: \exp18\samples\animgif.

 675. Added two new button types to the DCREAD GUI BUTTONS clause:
      DCGUI_BUTTON_YES and DCGUI_BUTTON_NO.

 674. Added new function: DC_ToolTipTimeout().  This is a
      Get-Set function that is used to cause tooltip messages to
      timeout after a specified amount of mouse inactivity.  The default
      is 5 seconds.  This should fix the problem of tooltips bleeding
      through other windows.

 673. Fixed bug.  MODIFY STRUCTURE would cause dialog to constantly stay
      in append mode when the STATUS BAR of the dot prompt was enabled.

 672. Added new HYPERLINK clause to @ .. DCSAY and @ .. DCSAY .. GET
      commands.  This will underline the say text and perform an action
      when the say text is clicked with the mouse.

      Ex: @ 1,1 DCSAY 'http://www.donnay-software.com' ;
          COLOR GRA_CLR_BLUE ;
          SAYSIZE 0 ;
          HYPERLINK ;
            {|p,c|p := 'url.dll,FileProtocolHandler ' + ;
                  'http://www.donnay-software.com', ;
                  c := 'Rundll32.exe', ;
                  RunShell(p,c,.t.,.t.)}

 671. Added new function: DC_PrinterName().  This is a Get-Set function
      used to store the last printer name selected by the user from the
      printer dialog.

 670. Fixed bug in DCGETOPTIONS .. BUTTONS clause.  The buttons would
      not be created if there was no ADDBUTTONS or BUTTONS clause in
      DCREAD GUI.

 669. Fixed bug in DC_StruUpdate() and MODIFY STRUCTURE (XDOT.EXE).
      If you modified the structure of a file, and change a field name
      to something else, the resulting action brings back any DELETED
      records as UNDELETED.

 668. Added a 7th parameter to DC_PrintPreviewAcrobatOpt().
      This parameter is used to Get/Set the default PDF printer driver.

 667. Added a new CALCULATOR clause to the @..DCSAY..GET and @..DCGET
      commands.  This causes inputting into a numeric GET to function
      exactly like the CalcSle() example of Xbase++.  The CalcSLE class
      displays calculator-type entry fields for numeric values. The
      display of entered data is right aligned, the number of decimal
      places is unknown and the largest number to be entered is limited
      by the width of the entry field.

 666. Added 1 new class and 2 new functions:

      oRecord := DC_dbRecord():new() - Create a database record object.
      DC_dbScatter( oRecord ) - Scatter fields into iVars.
      DC_dbGather( oRecord ) - Write iVars to database fields.

 665. Added new function: DC_AddButtonConfig().  This function is used
      to configure the captions and sizes of buttons which are
      automatically created by the ADDBUTTONS or BUTTONS clauses of
      DCREAD GUI.

 664. Corrected a bug in DC_PrintBrowse(). Fonts were not being printed
      correctly.

 663. Added a second parameter to DC_TabActivate().  If this is a
      logical .TRUE. then a call to DC_CompleteEvents() will be made
      after activating the Tab.

 662. Fixed a bug in DCSETPARENT. Object coordinates would be incorrect
      after using a DCSETPARENT command followed by a command that
      includes a PARENT clause, then followed by a command with no
      PARENT clause.

 661. Added two new functions: DC_Var2HexString() and
      DC_HexString2Var().  Used to convert binary strings to hex
      equivalent for storing in .TXT files or in memo fields that do not
      accept binary data.

 660. Corrected long-standing bug.  MDI child windows using the
      AUTORESIZE feature would be corrupted if they were minimized and
      then the parent window was minimized.

 659. Fixed a few more regression bugs created in build 226.