June 2008
=======
* Enhancement: Class TActiveX improved used functions OleGetProperty(), OleSetProperty() and OleInvoke(). Please review source\classes\TActiveX.prg
* Fix: Minor change in Class TWBrowse function WBrwLine().
* Enhancement: Class TControl Method HandleEvent() message WM_UPDATEUISTATE, added support for controls TBtnBmp when placed on button bars.
* Enhancement: CLASS TTrayIcon new DATA lSuccess to check if the tray icon was properly set. This allows to perform an oTray:SetIcon() from time to time. If oTray:lSuccess is .F., then I can oTray:End() and oTray:New() again to have the icon reappearing. Thanks to Davide!
* Fix: Class TWindow Method Move( nRow, nCol ) was not properly receiving nRow and nCol parameters. Now it is ok.
* Fix: Shift + Tab is properly working with dropdown comboboxes.
Please test samples\combos.prg
* Enhancement: new Class TTreeView Method GoTop().
* New: Class TRichEdit new methods:
GetIndent() -> It returns an array with left indentation, right indentation and first line indentation referenced to the left margin.
SetIndent( nLeft, nRight, nFirst ) -> Sets the left indentation, right indentation and first line indentation referenced to the left margin.
GetParagraph() -> It returns an array with prior and post spacing of the selected paragraph
SetParagraph( nBefore, nAfter ) -> It sets the prior and post spacing of the selected paragraph
* Fix: Class TBtnBmp, prompts without bitmap in the buttons in button bar are not being vertically centered. Now it is ok.
* Enhancement: Class TXBrowse, minor changes in ArraySort.
* New: samples\EnumChild.prg shows how to implement and use Windows API EnumChildWindows().
* Fix: Class TCBrowse, proper use of codeblocks for colors in DATAs nClrForeFocus and nClrBackFocus.
* Class TXBrowse:
a) Support for inherited classes from commands. XBROWSE commands were invoking TXBrowse():New. As a result, if a programmer implements a derived class, he has to modify the xbrowsenew function in the xbrowse.prg and recompile, if he wants to use the commands.
Now, if he wants his derived class to be used instead of the FWH's original TXBrowse class, he may call the function TXBrows function at the beginning of the program.
Example:
if TXBrwChild is the name of the derived class, the program should begin with TXBrows( {|| TXBrwChild() } ).
Then the commands will invoke the derived class, instead of the parent class.
Also new instances of derived browse class can be instantiated with TXBrows():New() ( not TXBrowse():new() ).
b) xbrowse.ch. Constants DATATTYPE_* are moved from XBrowse.Prg to XBrowse.Ch.
c) Added FOOTERS and FASTEDIT clauses to XBROWSE create command.
d) It is observed from the forums that most users are using horizontal and vertical lines in the browses. The default behaviour of xbrowse is no lines. To facilitate the programmers who use lines and celled browse, two new clauses LINES and CELL are added.
LINES clause draws horizontal lines and vertical lines complete. CELL clause sets the browse Celled browse mode.
e) ADD COLUMN command:
BITMAP clause in command to ADD TO <oBrw> was not working earlier. Now is working fine.
(i) If BITMAP clause is used the expression in the DATA <udata> clause is used as bBmpData instead of bEditValue and bStrData. It is the responsibility of the programmer to ensure the expression evaluates to valid ordinal number in the bitmap array of the column
(ii) BITMAP BMPDATA <expr> ( or column number for arrays ): This expression is used as bBmpData and DATA <expr>/<elem> is treated as bEditValue and bStrData
(iii) BITMAP [BMPDATA <x>] IN <bmp1>, <bmp2>, ... <bmp2> loads bitmaps or resources specified in the command without the need to use the methods AddBmpFile or AddResource.
HIDDEN clause creates the column but hides in when the browse is invoked.
FOOTER <uFooter> clause defines bFooter
TOTAL <nTotal> clause allows <nTotal> to be shown in footers and also lets auto recalculation of totals when the cells in the column are modified by inline edit.
f) System bitmaps to indicate column sort order in the header are now loaded once for the browse instead of loading for each column. This avoids any possibility of confusion in the assignment of ordinal numbers for the bitmaps added by the programmer.
g) Array Sorting: Possible to sort one array column in the order of any other column. After sort, the pointer is positioned again on the same logical array row ( works satisfactorily with unique values in the highlighed column).
h) xbraddcolumn function moved to TXBrowse class as a method. This method is meant only to support command syntax and is not meant to be used directly in the application program.
i) Added support for automatic recalculation and refresh of totals shown in footers for numeric columns. If the column is numeric and bFooter is like { |o,dx| If( dx == nil, nTotal, nTotal += dx ) } or oCol:nFooter is numeric, then when a cell in the column is edited inline, the total in the footer is recalculated and footer refreshed automatically, without any additional code.
When a column is defined with command syntax ( XBROWSE COLUMNS <fiedlnames,...> for RDD, ADO, Array, Objects like TDatabase, or ADD TO oBrw DATA <bSetGet> ) the XBrowse automatically constructs bEditValue, cEditPicture ( except for Objects ) and bOnPostEdit
blocks. The default values serve most purposes, but can be overridden if desired. Either assigning EDIT_GET to oCol:nEditType or EDITBALE clause in ADD TO oBrw command is enough to enable inline edit. If bFooter is defined in the above manner. even display of recomputed totals is automatic.
j) testxbrw3.prg in the samples folder is revised using some of the new command syntax.
k) New Method oCol:SetProgBar( [<nLimt>], [<nWidtj>], [<bClrProgBar>] ) : It is now possible to show percentage of the cell value as a bar. See example xbrprogb.prg in the samples folder.
l) Support for single line Vertical text ( escapements 900 and 2700 ) in headers
m) TXBrwColumn New Data bPaintText: It is observed from the forums that at times programmers would like to paint the data with different features and it may not be possible to provide all of them at the time they need. In such cases, the only choice for the programmer is to hard code the changes in the xbrowse.prg. To facilitate the programmers to quickly implement different ways of painting data bPaintText is provided. If this codeblock is provided, xbrowse calls this codeblock after doing all the preliminary setup and drawing bitmaps if any, After the codeblock is excecuted, xbrowse does the rest of work.
The codeblock is called with the following parameters:
( oCol, hDC, cText, { nTop, nLeft, nBottom, nRight } )
The programmer can paint the data in any manner he prefers within the coordinates provided, using the hDC.
New: aJustify SETGET method is provided.
xbrjustify also remains for backward compatibility
* New: Harbour and xHarbour builds, updated with the most recent svn and cvs files. Important: There are many libraries names changed in Harbour, please review fwh\samples\buildh.bat and update your batch and makefiles.