TO: All TD8 Users
DT: August 29, 2014
RE: #8-199 Top-Down 9.0 and Alaska News
Dear Top-Down Users,
I am pleased to announce that Top-Down 9.0 is now ready for download
and can be ordered at this web page
http://www.cjcom.net/tdUpg8.htm
Version 9.0 contains a long list of changes (see below), but the most important thing for the moment, with Xbase++ 2.0 being released next
month, is that the TD browse routines will by default preserve the
original xbpBrowse behavior without any special coding on your part.
The new navigation mode can be easily switched on if it is wanted, but
the original mode is the default.
What I'm referring to here is the major behavior change added to
XbpBrowse which allows the highlighted row to be scrolled out of sight with the vertical scroll bar, without moving the record pointer. This
is radically different behavior and it is now the default mode of
XbpBrowse. It required some changes to the TD browse classes and they were done in such a way as to make the old mode the default, so as not to force everyone to make code changes if the new mode is not wanted (which I think will be the case for many users). The new TD classes
are also backward compatible with previous language versions.
In other news from Alaska, it was stated by Alaska's Frank G. in the
news group last week that the problem with browses not working with
active indexes with PGDBE (the infamous dbGoPosition() error), and the filtering issues, will not be solvable until version 9.4 of PGSql is released, which will be some time after Xbase++ 2.0 is released at the
end of September. So that means that using browses with active
indexes, and setting filters, will not be possible with PGDBE for the
time being. Everything else seems to be working ok.
Because of this I have withheld the PGSql code that I had planned to put into the TD Demo program. When these issues are resolved I will
release a TD 9.1 update with all of that added back in and
documentation added to the Help file.
Back to TD9, we have had excellent input from TD users since the last
update. My thanks to everyone for all the good ideas and
suggestions.
Here is the TD 9.0 Honor Roll:
Karl Bleuler in Switzerland
Greg Doran in Ireland (R.I.P.)
Silvano Ferraro in Italy
Anand Gupta in India
Richard Hankins in USA
Don Keating in USA
Jonathan Leeming in Canada
Markus Ratzesberger in Austria
Richard Shaw in USA
Frankie Yap in Maylaysia
Moshe Yarden in Israel
As always, I ask your forgiveness if I left out anyone. I try hard
to keep careful notes.
There is a long list of new things below. One of my favorites is that all of the Modal message popups (tdMsg, tdYesNo, P2/P3box, Qmsg) can
now display rows of text with different fonts, colors and spacing.
This opens up a huge range of design possibilities, including
emulating some of the Win7/win8 styles. Another is that tdImgBtn()
can now scale its images to match application scaling levels. Some
very nice new things for SQLExpress users, including a dedicated DE
window class, Isearch and TabView functions. Lots of neat stuff.
Enjoy.
Best Regards,
Clayton
From the history.txt file...
**********************************************************************
************** New Classes, Methods, Functions, Prgs
*****************
**********************************************************************
- tdcSqlDEwin.prg, subclass of tdcDEwin. Demo app now has an
SQL DE Window, in demSqlDEwin.prg (for use with SqlExpress).
- tmpSqlDEsys.prg - a new DE window template file (for use with
SqlExpress).
- tdcSqlBrow.prg (for use with SqlExpress)
- added :tdSqlBRfieldBlock() method, for use with CellGets
instead of tdSqlFieldblock(). It holds oBrow instead of
just the cursor. Is needed for SQLSelect sorting, which
changes the cursor.
- added overloaded method :tdmJump(), to implement "down" and
"nextrow" jumping with auto-edit.
- tdSqlTabView.prg, adds an SQL Tab View function, tdSqlTabView().
Can be seen in the new SQL DE Window in the Demo App (for use
with SqlExpress).
- tdSqlIsearch.prg, adds an SQL incremental search function,
tdSqlIsearch(). Can be seen in the new SQL DE Window in the
Demo App (for use with SqlExpress).
- tdSqlDEfieldBlock() - new function, returns a Get/Set codeblock
suitable for the datalink of a DE Get object or other DE
component in a TD SQL DE window (for use with SqlExpress).
- tdSqlAutoForm.prg (for use with SqlExpress) - a parameter driven
form view edit window for use with tdSqlBrow().
- tdXspin() and tdXchk() - added :currentVal() method to match
tdXget(). Allows greater consistency in handling of all the X
components.
**********************************************************************
************** New Features in Existing Code
*************************
**********************************************************************
- Top-Down Form Designer/IDE
- now has Application Scaling.
- tdImgBtn()
- added ivar :nBorderClr to give us control over the color
of the 1-pixel wide border by assigning a numeric color value.
- added ability to display icons as well as bmp/gif/jpg.
- added ability to scale images to match application scaling.
- tdSay(), tdSayCenter() - added param nRowHt to allow heights
greater than 1 row.
- tdSay(),tdSayCenter(), tdMsay() - added two params
lBox - to draw a border line around the static
nBoxClr - to control the border color
- tdMsg(), tdP2box(), tdP3box(), tdYesNo(), tdQmsg() - added feature
to accept array of custom tdSay definitions. Allows different
colors, fonts, vertical spacing for each row of text.
- tdYesNo() - added new param lTimeoutVal to give user control over
timeout return value.
- tdFcopy() - added lSuppress param for error msg display
- improved error handling logic
- tdStat() - added "flat" as a type (TEXT) that responds to nBGclr
- tdGet2str.prg - added cInitFocus param to specify which object has
initial focus.
- tdNameOnly() - added param lExt.
- tdHiBrow()
- added code to expand and enhance the handling of FOXDBE
numeric fields.
- tdHiBrow(), tdArBrow(), tdSqlBrow() and tdBrowse()
- added new param lNavMode2, to give control over the new
navigation mode introduced in Xbase++ 2.0. Has no effect in
1.9
or older (see also the docs for the parameter lSofTrak, as it
may be affected by this).
- code added to handle the new things introduced in Xbase++ 2.0
and still work in 1.9 or older.
- tdGenBrow()
- added params lNavMode2 and lSofTrak to control the new navigation
mode introduced in Xbase++ 2.0.
- added param aMemoBox to allow control over tdPopMemo() for memo
fields.
- tdGenABrow()
- added params lNavMode2 and lSofTrak
- tdcSqlBrow.prg (for use with SqlExpress)
- added ivar :cargo2, for users. No TD code uses it.
- expanded the number of SQL data types that can be handled.
- tdSqlBrow() - added parameters oConn, cSortBtn
- added ability to work with SQLSelect cursor with sort order
changing.
- added :tdSqlBRfieldBlock() method, for use with CellGets
instead of tdSqlFieldblock(). It holds oBrow instead of
just the cursor. Is needed for SQLSelect sorting, which
changes the cursor.
- added ivar
![Surprised :o](./images/smilies/surprised.gif)
- added overloaded method :tdmJump(), to implement "down" and
"nextrow" jumping with auto-edit.
- in :sortBrowse()
- added cursor test to call :sort() only for SQLDataSet.
Also evals bSortblock for SQLSelect section, where
custom sorting code can be placed.
- added oConn param to calling function. Is assigned to
![Surprised :o](./images/smilies/surprised.gif)
- demSqlAllBrow.prg - expanded to work with SQLSelect as well as
SQLdataSet (for use with SqlExpress).
- tdSqlAppend() (for use with SqlExpress)
- added param lUpdate - If True the cursor methods :UpdateRow() and
:Refresh() will be called.
- moved :refresh() into lUpdate logic. It now happens only when
updateRow is called. Allows it to work with SQLSelect cursor.
- added param aSkipName - Array of field names to be skipped when
loading fields with blank data. Typically used for
auto-increment
fields.
- tdAutoForm1()
- added code to omit FOXDBE non-editable flds 'SOTRVZ'
S=Sequence, O=Generic, T=Timestamp, R=VarChar, V= MemoBin,
Z=VarBin
- added code to include FOXDBE Double, Currency, LongInt flds for
auto numeric Picture masks
- the parameter nHiliteClr (BG color) changed to aHiliteClr
({FG,BG}
color). Will still work the old way.
- tdcDEwin.prg
- added ivars nSaveKey and nMleSaveKey, default to xbeK_PGDN and
xbeK_CTRL_PGDN. Allows using a keystroke other than PgDn to Save
data in Edit mode. All DEsys templates have been changed to test
for these keystrokes.
- added ivars lBeep, cWavFile, nFreq and nDur, to allow control
over
the end-of-file beep tone.
- See docs for tdDEwin() for details.
- tdTabView() - added lCloseOnly param. When True, a single "Close"
button is displayed.
- tdPaneDlg() - added "3V" style for three vertical panes.
- tdSetVal.prg - added 3 Courier New default font sizes to the fonts
array.
- tdFilePick() - added new param lPathChkBox, allows removal of the
PathOnly checkbox.
- in tdViewUserLog() - optimized scaling code.
- in tdSEE32.prg - added new param lSuppress in tdEMconnect(). It
allows suppression of the MarshallSoft X-OEM and X-MAILER header
strings. See docs for details.
- tdMultiGet1() - added :setInputFocus codeblock to put focus back on
active Get when focus leaves the window and returns.
- tdcCalendar.prg and tdCal.ch - revised size values to have better
appearance at different scale levels and DPI settings.
- DbeSys() in appMain.prg - added commented out section for loading
PGDBE.
**********************************************************************
*************************** Bug Fixes
********************************
**********************************************************************
- tdcArBrow.prg - in tdmJump(), added code to correct improper jump
behavior when bWhen codeblocks are used.
- tdcDEchk.prg and tdcXchk.prg - in :receiveFocus(), added code to
toggle the buffer on the first mouse click.
- tdMsg(), tdP2box(), tdP3box(), tdYesNo(), tdColorPick() - added
code
to force focus dots to appear when triggered by a mouse event.
- tdP2box() - changed button spacing code to calc for 2 btns instead
of 3.
- tdImgBtn() - added compiler directives to IsThemeActive() calls.
- tdcMenuMgr.prg - added compiler directives to IsThemeActive()
calls.
- in tdcSqlBrow.prg
- added code to prevent runtime error in :sortBrowse()on a
logical
field and aCols is empty.
- in :sortbrowse(), added test for cursor type (SQLSelect doesn't
have the :sort() method). Does nothing in this case.
- in tdmEditCell()
- added code to test for Datetime fld as character type, and
prevent creating a calendar object for the Get.
- tdcPrv4.prg
- in PWinKeys() - fixed the ALT+ keytrap for the Con~Tinue button.
It was trapping for the ~Close button hotkey
- in OpenPwin() - where oClose button caption is changed, added
code
to also change the :activate codeblock to send the proper hotkey
value. Was previously fixed to the ClKey value, so the Con~Tinue
button wouldn't respond to a mouse click.
- tdcDEget.prg, tdcXget.prg, tdcCellGet.prg, tdcAget.prg
- Modified keystroke handling for xbeK_END to position the cursor
differently depending the _SET_INSERT mode.