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.
