Features and Fixes
Oct 19, 2010
Upgraded Navigator’s file list to support searching for
a file using an incremental search instead of a first character
Enhanced the stability and resource management of dBASE Plus
by fixing several memory and resource leaks and by fixing some potential
causes of instability within dBASE Plus.
Fixed the following issues that made it difficult to upgrade
older DOS and 16 bit dBASE applications to dBASE Plus in:
- SET RELATION, SET SKIP, and BROWSE commands
- USE … EXCLUSIVE command
Fixed some crashes that occurred when opening the Source Editor
on Vista 64 bit or Windows 7 64 bit. A complete fix is
expected in the next release of dBASE Plus.
Added events to make it easier to code custom forms and custom
controls and perform any needed cleanup:
- Added onOpen event to components that did not yet have it (Container
- Added onDesignOpen event to component that did not yet have it
- Added onClose event to all Form and Report components that did
not already have it
- FIxed bug that prevented firing onClose() event in components
contained within Container and Notebook objects
- Added new beforeRelease() event to Form, Report and component
objects allowing a developer to more easily implement and manage
cleanup for their subclassed forms and form components. BeforeRelease()
fires when an object is about to be destroyed.
For example, if a form issues any SET PROCEDURE commands in its
constructor to make various functions and/or classes available for
use, you can now add a beforeRelease() event to the form in order
to issue any needed CLOSE PROCEDURE commands to either close or
decrement the reference count of those procedure files.
Added new function procRefCount() – allows you to check
the reference count of any open procedure file (See details below).
Improved opening speed and fixed flashing of Notebook components
Fixed several Grid bugs that could cause flashing or which
prevented grid cell events from firing while opening a form.
Fixed some long standing bugs in the ListBox that could cause
it to crash and to ignore its current font and color settings after
its datasoruce is reset.
Upgraded Project Manager to fully support using relative file
paths for files added to a project.
Also now supports using Source Aliases or Full Paths based on property
Changed default for auto-starting dQuery on a new install of
dBASE Plus so that dQuery will not auto start unless the user chooses
to enable it.
Upgraded dQuery as follows:
- added support for the use of beforeRelease() events within a datamodule
- fixed several potential sources of instability that could lead
to Memory Access Violations
- removed requirement that user save datamodule before opening it
in the Source Editor
- fixed problem where Multi-Table View definition and custom report
list were lost if datamodule was opened in Source Editor
Implemented incremental search in Navigator file list.
Instead of allowing searches for just the first character of
a filename, the Navigator now supports multiple character searches
allowing you to type as many characters as needed to pinpoint
a file. After each character is typed the Navigator will add the
most recent character to its internal search string and search
for the first file matching the string. If backspace is pressed,
the last character in the search string is removed and a search
is repeated for the updated search string.
The search is NOT case sensitive.
The search string will be cleared when the following occurs:
- When Navigator is created
- When Navigator file list window receives focus
- When Left or Right mouse down event occurs on Navigator file
- If more than 1.5 seconds have elapsed since the last search
character or backspace has been pressed.
- If you press backspace enough times to remove all characters
in the search string.
||Modified command line processing logic for the -C switch to check
for leading and trailing double quotes in order to support long
path names and embedded spaces in the specified .ini file path when
launching plus.exe or plusrun.exe
Also added new error message:
Error #404 "Unbalanced quotes in path for .ini file"
This error will be triggered if a leading double quote is detected
after the -C switch but no trailing double quote is found.
||Added onOpen() event to Container
||Added OnClose() events to all Form Components.
Added OnOpen() and OnDesignOpen() and OnClose() events to ReportViewer
Added OnClose() event to following form objects:
Added OnOpen() and OnDesignOpen() events to the ReportViewer
||Added OnClose() event to Container class
||Added OnClose() event to PushButton Class
||Added code to fire OnClose() events for report components. Note
that Report's OnClose() events only fire when report's Close() method
is run explictly.
||Added event beforeRelease() to most built-in classes including
Form, Subform, Report, Label and components.
BeforeRelease() can be used to perform cleanup tasks prior to
a form or subform being destroyed.
Added event beforeRelease() to the following classes:
All Form Components:
||Added function ProcRefCount() to dBASE Plus. ProcRefCount() returns
the number of references to a procedure file.
Added function ProcRefCount() to dBASE Plus.
ProcRefCount() returns the number of references to a procedure
ProcRefCount(<procedure file expC>)
procedure file expC - The filename or the path and filename of
a procedure file
Use PROCREFCOUNT( ) to find the number of references
to a procedure file.
PROCREFCOUNT( ) accepts a single parameter which is the name of
the Procedure file or the full path and name of the procedure
file for which you want the count returned.
The returned value is numeric.
Each time a procedure file is loaded its reference count is incremented
Each time a procedure file is closed its reference count is decremented
When a procedure file's reference count reaches zero, the procedure
file is removed from memory and its contents are no longer accessible.
Use SET PROCEDURE TO <procedure file expC> to load a procedure
Use CLOSE PROCEDURE <procedure file expC> to close a procedure
||Increased number of dbase program files that can be open simultaneously
(via SET PROCEDURE or via DO <program>) from 512 to 2048 to
reduce the occurrence of inaccurate "Not Enough Memory"
errors due to attempting to load more that 512 program files.
||Changed default for auto-starting dQuery from True to False so
that dQuery is not automatically started unless the user chooses
to enable it.
|| Modified dBASE ActiveX Control so it triggers an the Show() event
of any activex control hosted within it. This fixed a problem with
the GD Viewer Pro ActiveX which expects to be notified when to activate
its user interface (UI) and when to show itself. Previously, dBASE
only notified an ActiveX to activate its UI.
||Fixed bug found in MSVC build that caused custom column headings
browse object to display as gibberish.
Custom column heading were specified via the FIELDS clause'
\H="headerstring" option, for example:
BROWSE FIELDS name\H="My Name"
The cause of the problem was due to a buffer containing the column
heading being released too soon.
This has been fixed for both builds (BC5 and MSVC).
||Fixed regression that caused this.value to return an incorrect
value within a columnComboBox's onChange event. Modified fix so
that it does not break this.value when accessed in beforeCellPaint()
||Fixed flicker when painting columnComboBox that occurred when
scrolling vertically through a grid column. The columnComboBox is
now created invisibly to hide several initial repaints until it
is sized to grid cell and its systemTheme has been set to match
||Fixed Container and Notebook classes so that the OnClose() event
of any contained controls will fire when form is closed.
||Fixed Internal Error that occurred when using a shared datamodule
via datamodref's on multiple forms and then switching between forms.
Fixed Internal Error that occurred when using a datamodref on 2
forms with the datamodule shared between the datamodrefs and then
running one form and then closing it and switching to the second
form, and then closing the second form and switching back to the
When the first form was closed the shared datamodule was left parented
to the first datamodref which was released after the second form
opened. When attempting to switch back to the first form, an internal
routine attempted to access the datamodule's parent object which
no longer exists.
||Fixed the following resource leaks:
- When setting a form's icon property and then repeatedly issuing:
do someform.wfm and then closing the form.
- In Notebook object when its systemTheme property is set to true
and form containing notebook is opened and closed.
||Fixed flash during form opening that was caused by erasing and
repainting the form's contents after all controls have been initialized
and displayed, but before the form's onOpen events have fired.
Flash was most pronounced in form's containing large notebook controls
that contained may components and with Visual Styles enabled.
||Fixed potential source of instability. Fixed internal function
signature used for form and subform onMove() event. Parameter and
return count was incorrectly set to 4 instead of 3.
||Fixed autoCenter property on form and subform so that it doesn't
make a form (or subform) visible when visible is set to false.
||Improved algorithm used to decide where to automatically scroll
a form or subform when a component receives focus and the component
is outside the visible area of the form or subform.
||Fixed crash due to a recursive release sequence that occured if
form.release() is called on a form that is open and whose onClose()
handler calls form.release().
||In dBASE Runtime fixed firing of events while closing last open
form in application. This fix allows canClose() and onClose() events
to fire during form closing sequence (as well as new beforeRelease()
||Fixed potential source of MAV. Changed code to return a pointer
to the string contained in the internal m_procedureNameList array
(which is allocated on the heap) instead of a pointer to the string
within a locally allocated CString (which goes out of scope when
this method returns). This routine is called when changing the Form
Designer's base form class and when streaming a form's code when
saving within the Form Designer.
||Fixed regression which prevented grid cell's from displaying as
selected when grid first receives focus, such as when form opens,
or when user tabs into grid.
Note that some grid property settings that are made after initial
grid construction may prevent highlight from displaying in grid
cell. In those cases call grid's refresh() method in grid's onOpen()
event to fix display of cell's highlight.
(Regression occurred in fix for QAID: 6349 in build 2067)
||Fixed firing of beforeCellPaint() and onCellPaint() when grid
is first created during form opening. Events were not firing until
form fully opened due to the form turning off event firing while
creating each component. Modified column controls to temporarily
turn on the form's event firing while painting each grid cell (except
when form is opened in the Form Designer).
||Fixed flicker of entire Windows desktop that occurred when changing
a grid's datalink. The flicker occurred when the grid's hScrollbar
property was set to 2 - Auto and the Grid's datalink was changed
from Null to a valid rowset object.
||Fixed source of GPF in ListBox which was due to ListBox not using
the correct mechanism to notify its underlying grid of changes to
its datasource and font properties when the datasource is a field
object. This also fixed ListBox's Font and Color Properties so that
they worked properly especially after changing or restating ListBox's
||Fixed a listbox bug where the last item in the list is displayed
as selected and at the top of the listbox when the listbox is first
opened. The other items in the list are scrolled above the top of
the listbox. This problem became apparent after the b1992 updates
for QAID:5461, which fixed the grid auto vertical scroll bar mode
so the vertical scroll bar doesn't display for a grid or listbox
if the number of rows or items fits within the defined vertical
||Fixed double firing of ListBox OnSelChange() when datasource is
a field in a table.
||Fixed pushbutton so it correctly sets its text color to use the
foreground portion of its colorNormal property when its systemTheme
property is set to True and version 6 common controls are available
(on Win XP, Vista, Win 7)
||Fixed MAV that occurred when dragging field onto report from table
open in a workarea.
||Fixed report.elements property so all report components are added
to the elements array. (Does not include Bands, Groups, Streamsource,
or PageTemplate objects)
||Fixed text object with variableHeight=true, to ensure that no
lines of memo are dropped when wrapped to next page of report.
||Some rowset methods were not ensuring that the current rowset
is synchronized with its parent rowset when the current rowset is
setup as a child in a parent/child relationship. Fixed the following
rowset methods: first() last() count() next().
||Fixed 2 bugs preventing SKIP and BROWSE from working properly
with parent->child->grandchild relationship setup via SET
RELATION and SET SKIP setup to move child and grandchild tables
in sync with the parent table.
When parent was skipped to a row without any matching child or
grandchild rows, dBASE was not loading the child and grandchild
row buffers with empty data. Instead data matching the previous
parent row was left in the child and grandchild row buffers.
Fixed BROWSE command so it correctly displays and moves through
rows from parent, child, and grandchild tables in a parent->child->grandchild
Previously, data would initially display correctly, but when scrolling
downward in the BROWSE (by pressing the down arrow key) past the
last visible row the child and grandchild tables would not remain
synchronized with the current parent row.
||Fixed Memory Access Violation that occurred when opening the Source
Editor while running dBASE Plus on Windows Vista 64 bit or Windows
7 64 bit
||Fixed possible source of crash when comparing numeric values.
Crash was found via QA automated testing. Found that internal buffer
used when converting a number to a string of digits was sometimes
too small for resulting value. Modified buffer size to ensure that
it is always large enough for dBASE floating point values.
||Fixed source of some memory access violations that occurred when
Query objects were notified recursively during release of their
parent object (form or datamodule).
||Fixed bug that allowed USE sometable EXCLUSIVE to open table in
shared mode instead of throwing an exception or displaying an error
message (when table was already open by another user or another
session in shared mode)
Modified error message to include the table name when a USE ...
EXCLUSIVE command fails due to the table already being in use in