New FTDN December/Diciembre 2009 (9.12)
Posted: Sun Dec 27, 2009 9:39 am
December 2009
=============
* Fix: Class TWBrowse Methods EditCol() and lEditCol(), the properties nWeight, lItalic, lUnderline
and lStrikeOut of the browse font are now respected.
* Improvement: Class TBtnBmp, the color of the prompt of disabled buttons can now be left unchanged.
Just set the new DATA lDisColor to .f.
* Fix: Class TFolder Method Destroy() ends its DATA oImageList if defined.
* Fix: Minor fix in Class TWBrowse Method LButtonDown()
* Fix: Class TFont Method cGenPrg(), 'SIZE' clause not correctly generated. Now fixed
* New: Function aGetFiles( cFileMask, cTitle, nDefaultMask, cInitDir ) --> aFiles, for selection of multiple files.
Please review FWH\source\winapi\getfiles.prg
* Fix: Class TReport method New(), didn't return Self on empty ::oDevice:hDC.
* Improvement: Class TBtnBmp: Improved alignment of prompts on button bar.
* Fix: Modified FWH source\function\ErrSysW.prg to avoid the calls to GetCPU() and GetCPUSpeed() when using
FWH 64 bits.
* Enhancement: Class TMGet method LimitText: Now number of characters to limit the length of text can be specified as paramter to LimitText. oMGet:LimitText( nChars ) limits the length of text to nChars and oMGet:LimitText() without parameters allows edit without any limit.
* Enhancement: CLASS TScrollBar METHOD SetPage( nSize, lReDraw ) has been reenabled and enhanced.
* New: documented functions RoundRect() and RoundBox() in FiveTech's wiki:
http://wiki.fivetechsoft.com/doku.php?i ... _roundrect
http://wiki.fivetechsoft.com/doku.php?i ... n_roundbox
http://wiki.fivetechsoft.com/doku.php?i ... _roundrect
http://wiki.fivetechsoft.com/doku.php?i ... n_roundbox
* New: functions CREATEELLIPTICRGN() and CREATEELLIPTICRGNINDIRECT(), added in a new module
FWH\source\winapi\regions.c Documented in FiveTech's wiki:
http://wiki.fivetechsoft.com/doku.php?i ... llipticrgn
http://wiki.fivetechsoft.com/doku.php?i ... gnindirect
* New: Class TBtnBmp, Round buttons style implementation. Please review FWH\samples\TestBtn3.prg and
TestBtn4.prg
* Fix: Class TBtnBmp DATA hRgn (GDI object) was not released in Method Destroy(). Now it is ok.
* Improvement: Class TBtnBmp: If bitmaps for pressed, disabled and mouse hover states are not provided, appropriate default bitmaps derived from the first bitmap are provided.
* Fix: Pasted texts in GETs properly respect the used GET's PICTURE. Bug reported By Enrico in the forums.
* Fix: Class TTrayIcon finally closes an open popup menu if clicking outside of it or if Esc is pressed !
Please review FWH\samples\TestTray.prg. It took a long time to solve this pending bug
* New: FWH\samples\TestDscr_.prg and TestDscr_.rc shows how to implement a scrollable dialogbox from resources
with mouse wheel support too. Its a very nice and usefull example. Don't miss to review it. Thanks to Rossine and
Ramesh!
* Enhancement: FWH\samples\TestDscr.prg, added support for mouse wheel events.
* Fix: Some internal changes in RichEdit management functions that were failing due to recent changes
in Harbour extend API compatibility support for both Harbour and xHarbour.
* Enhancement: Added support for hb_storvnd() in source\function\harbour.prg for xHarbour.
* Enhancement: toolhelp.c was not included in previous FWH builds by mistake. Now it is included again.
* Enhancement: Class TGif has been greatly enhanced supporting now much more different GIF internal formats.
Please review FWH\samples\TestGif.prg and TestGif2.prg
* Enhancement: Class TGet DATA lDisColors has been changed into a CLASSDATA, so now if one single instance of a TGet modifies lDisColors, it affects all the application GETs. Many thanks to William!
* Enhancement: Class TXBrowse removed some not needed logical checkings, i.e.: "if lTransparent == .T.", where it
is enough to do "if lTransparent".
* Enhancement: FWH\samples\mallorca.prg enhanced to show pajama painting with arrays and Class TXBrowse.
* New: New Method EraseBkGnd() in Class TGroup. It properly implements the clause TRANSPARENT and also uses
its container bitmapped brush if defined, with the proper origin coordinates.
* Fix: function GetNetCardId() for Harbour is properly adapted to the new Harbour extend system.
* Enhancement: Class TRbGroup (Groups in RibbonBar) Method PopupGroup() activated. Please review samples\Ribbon.prg
* Enhancement: Added drop shadow support to Ribbon Popup Groups. Please review samples\Ribbon.prg
* New: Windows API functions SetClassLong() and GetClassLong().
XBROWSE:
--------
NEW FEATURES:
1) Gradient painting of rows and cells:
By specifying a Gradient Array as the second color in bClrStd, bClrSel, bClrSelFocus, bClrRowFocus, instead of a
solid color, the rows/cells are painted with gradient.
Example:
aGrad := { { 1, RGB( 220, 235, 252 ), RGB( 193, 219, 252 ) } }
oBrw:bClrSelFocus := { || { CLR_BLACK, aGrad } }
This will paint the row/cell with aGrad as the gradient background.
Sample: \fwh\samples\xbrowgrd.prg
2) Method BrwFitSize( lReSize (default .f. ) ) --> { nRequiredWidth, nRequiredHeight }
This method can be called during INIT of the container dialog/ window or at runtime, but not before the dialog
is initiated. If called without parameter:
Return values:
nRequiredWidth : Total width needs to be set for the browse to display all the columns. The result may even
exceed the width of the container window/dialog or even the screen width. Programmer should use this information
appropriately.
nRequiredHeight: Required height to show all the rows, if it is smaller than the height already set.
If called with parameter as .T.
The browse is actually resized to fit the columns and rows to the extent possible. Width is either reduced or
stretched ( but not exceeding the width of the container window ).
Height is reduced if lesser height is enough to show all rows.
If oBrw:nRightMargin is specified, oBrw:nLeft is adjusted or oBrw:nRight is adjusted.
If oBrw:nBottomMargin is specified, oBrw:nTop is adjusted or oBrw:nBottom is adjusted.
In this case the acutal new width and height are returned.
3) Group Headers:
Though this is an existing feature, the logic is replaced with totally revised logic and it is made extremely
easy for the programmer to specify the group headers and with some new features.
Multiline and bitmap support provided for group headers.
Calling the method oBrw:SetGroupHeader( cGroupHeader, [nFromCol], [nUptoCol], [oFont] ) is all that is required to set a group heading.
If nFromCol and/or nUptoCol default to 1 and last column, if not specified.
XBrowse automtically computes the required header height to display group and column headers and decides the ideal value for oBrw:nHeaderHeight. It is recommended not to set the header height manually in the program.
Alternatively groups can also be specified by assigning same group header to oCol:cGrpHdr. All consecutive
columns having the same :cGrpHdr are grouped under the same heading.
Other data relevant for GroupHeaders:
oCol:oGrpFont
oCol:nGrpBmpNo ( bitmap support for group headings )
Backward compatibility is retained for the documented syntax, but the programmers are advised to use the new
methods in future.
Following data are now Obsolete, but retained only for backward comapatibilty:
oBrw:nHeader
oBrw:aHeaderTop
oCol:nHeaderType
Sample: \fwh\samples\testhead.prg is revised to show the use of the new syntax.
Dynamic Grouping at Runtime: SetGroupHeader(...) method can be called even at runtime to create or change the groupings. Right-Click on the browse in the above sample demonstrates this feature.
New Data: lAllowColReGroup is .f. by default. When this data is set to .f. and lAllColSwapping is true, columns
can be swapped but within same group and withing ungrouped columns. If lAllowColReGroup is set to .t. moving
columns at runtime changes the columns group to the new group.
IMPROVEMENS AND FIXES:
* Improvement: Where header has CRLFs, data nHeaderLines is automatically computed by the xbrowse. It is desirable not to specify the data nHeaderLines manually, unless required for other reasons.
* Fix: Class TXBrowse Method SelFont(), new font is set to the browse and all columns correctly.
* Modification: Class TXBrowse Method MoveCol(). While user can not drag a column in to and out of freezed columns area, programmer can move without restriction.
* Improvement: XBrowse, EDIT_LISTBOX now uses colors and font specified in oCol:bClrEdit and oCol:oEditFont
* Improvement: XBrowse: EDIT_LIST_BOX behavior is now consistent with EDIT_GETs. In fastedit mode, key pressed to invoke edit is passed on as the initial key to the listbox control and after edit cursor moves to the next editable column.
* Fix: TXBrowse Method SetRDD. bSeek codeblock automatically generated raises runtime error when the workarea is not indexed. Now fixed.
* Improvement: Class TXBrowse: New DATA lKineticBrw ( default .t. ). While CLASSDATA lKinetic can be set to enable or disable Kinetic browse globally,
lKineticBrw can be set to enable or disable Kineti browse for the specific browse overriding the global setting.
* Improvement: Class TXBrowse: Method PageDown. When bottom of the table is reached by pressing pagedown key the data is fully painted in the browse, in conformity with the painting on Refresh
* Fix: Class TXBrowse Method EraseData: When oBrw:lTransparent is .t. and no background is specified blank rows are painted with browse colors instead of parent window/dialog brush. Fixed.
* New: Xbrowse.ch. New constant DATAYPE_USER. If user defines xbrowse for any data source not one of the pre-defined datatypes, oBrw:nDataType should be specified as DATATYPE_USER.
* Fix: Class TXBrowse Method Initiate: Initiate method was resetting the colors already set by user. Now fixed.
* Improved: Class TXBrowse Method ColStretch: Improved columns stretching method. Also fixed runtime error in some cases.
* New: samples\xbrwin7.prg shows how to use Windows 7 selected row colors in xbrowse.
* New: Class TXBrwColumn SETGET method nWidthChr. Width of column in number of characters. Used to provide
appropriate size of columns to Report method.
* Improved: Class TXBrowse: When column width is narrower to display full character value, the value is shown in
multiple lines if the user increases the row height even if nDatalines is not assigned with higher number.
* Improvement: Class TXBrowse Methods ToExcel() and ToCalc(). While exporting decimal numbers, the number of
decimal places was set to 2 irrespective of the number of decimal places in the picture format of the column.
Now the exported numeric values are formatted with the actual number of decimal places in the column's picture
format.
* XBrowse: Improvement in Array Sort: XBrowse handles browing arrays containing different datatypes in the same
column and varying array lengths in different rows.
- The array sort algorithms were limited to handle only arrays containing same datatypes in the same column.
Now array sort handles different datatypes in the same column as well as rows with varying lengths.
- Sorting of character values were case sensitive. Now new DATA oCol:lCaseSenstive ( default .f. ) is used
by the array sort. When this data is false, the sort is case insensitive, that is more useful in many cases
and if the data is set to .t., the sort is case sensitive.
* XBrowse: Improvement in Incremental Seek on Array browse: Incremental seek on array browse was limited to
arrays with rows containing same datatypes in the same column. Arrays with different datatypes in the same
column or having different array lengths in different rows would result in runtime errors.
- Now incremental seek functionality is extended to work on all kinds of arrays.
- Incremental seek honors the oCol:lCaseSensitive setting.
- WildSeek functionality is not extended to Arrays also. If oBrw:lSeekWild is set to .t. ( default .f. ),
Wildseek is performed.
* function XBrowse() and command XBROWSER: oSeek and WildSeek controls were not displayed even when autosort was specified unless bselect also was specified. Now oSeek and wildseek controls are displayed if autosort is specified even if bselect is not specified.
* Function XBrowse() moved to independant module \fwh\source\function\xbrowser.prg. This enables implementation of programmers own version of xbrowse() function without altering the main xbrowse.prg and still taking benefit of XBROWSER command.
* Improvement: function XBrowse(), Command XBROWSER: Programmer can now specify the code to be executed by assigning codeblock to oBrw:oWnd:bInit and/or oBrw:bInit, while executing the bSetUp code block. If specified, these codeblocks oBrw:oWnd:bInit is executed with oDlg as parameter and oBrw:bInit is executed with oBrw as parameter during executing of the xbrowsers own init routine. This feature allows the programmer to excercise more control on the browse and dialog setup, which were not possible earlier.
* function XBrowse(): Modified to use oBrw:BrwFitSize() method.
=============
* Fix: Class TWBrowse Methods EditCol() and lEditCol(), the properties nWeight, lItalic, lUnderline
and lStrikeOut of the browse font are now respected.
* Improvement: Class TBtnBmp, the color of the prompt of disabled buttons can now be left unchanged.
Just set the new DATA lDisColor to .f.
* Fix: Class TFolder Method Destroy() ends its DATA oImageList if defined.
* Fix: Minor fix in Class TWBrowse Method LButtonDown()
* Fix: Class TFont Method cGenPrg(), 'SIZE' clause not correctly generated. Now fixed
* New: Function aGetFiles( cFileMask, cTitle, nDefaultMask, cInitDir ) --> aFiles, for selection of multiple files.
Please review FWH\source\winapi\getfiles.prg
* Fix: Class TReport method New(), didn't return Self on empty ::oDevice:hDC.
* Improvement: Class TBtnBmp: Improved alignment of prompts on button bar.
* Fix: Modified FWH source\function\ErrSysW.prg to avoid the calls to GetCPU() and GetCPUSpeed() when using
FWH 64 bits.
* Enhancement: Class TMGet method LimitText: Now number of characters to limit the length of text can be specified as paramter to LimitText. oMGet:LimitText( nChars ) limits the length of text to nChars and oMGet:LimitText() without parameters allows edit without any limit.
* Enhancement: CLASS TScrollBar METHOD SetPage( nSize, lReDraw ) has been reenabled and enhanced.
* New: documented functions RoundRect() and RoundBox() in FiveTech's wiki:
http://wiki.fivetechsoft.com/doku.php?i ... _roundrect
http://wiki.fivetechsoft.com/doku.php?i ... n_roundbox
http://wiki.fivetechsoft.com/doku.php?i ... _roundrect
http://wiki.fivetechsoft.com/doku.php?i ... n_roundbox
* New: functions CREATEELLIPTICRGN() and CREATEELLIPTICRGNINDIRECT(), added in a new module
FWH\source\winapi\regions.c Documented in FiveTech's wiki:
http://wiki.fivetechsoft.com/doku.php?i ... llipticrgn
http://wiki.fivetechsoft.com/doku.php?i ... gnindirect
* New: Class TBtnBmp, Round buttons style implementation. Please review FWH\samples\TestBtn3.prg and
TestBtn4.prg
* Fix: Class TBtnBmp DATA hRgn (GDI object) was not released in Method Destroy(). Now it is ok.
* Improvement: Class TBtnBmp: If bitmaps for pressed, disabled and mouse hover states are not provided, appropriate default bitmaps derived from the first bitmap are provided.
* Fix: Pasted texts in GETs properly respect the used GET's PICTURE. Bug reported By Enrico in the forums.
* Fix: Class TTrayIcon finally closes an open popup menu if clicking outside of it or if Esc is pressed !
Please review FWH\samples\TestTray.prg. It took a long time to solve this pending bug
* New: FWH\samples\TestDscr_.prg and TestDscr_.rc shows how to implement a scrollable dialogbox from resources
with mouse wheel support too. Its a very nice and usefull example. Don't miss to review it. Thanks to Rossine and
Ramesh!
* Enhancement: FWH\samples\TestDscr.prg, added support for mouse wheel events.
* Fix: Some internal changes in RichEdit management functions that were failing due to recent changes
in Harbour extend API compatibility support for both Harbour and xHarbour.
* Enhancement: Added support for hb_storvnd() in source\function\harbour.prg for xHarbour.
* Enhancement: toolhelp.c was not included in previous FWH builds by mistake. Now it is included again.
* Enhancement: Class TGif has been greatly enhanced supporting now much more different GIF internal formats.
Please review FWH\samples\TestGif.prg and TestGif2.prg
* Enhancement: Class TGet DATA lDisColors has been changed into a CLASSDATA, so now if one single instance of a TGet modifies lDisColors, it affects all the application GETs. Many thanks to William!
* Enhancement: Class TXBrowse removed some not needed logical checkings, i.e.: "if lTransparent == .T.", where it
is enough to do "if lTransparent".
* Enhancement: FWH\samples\mallorca.prg enhanced to show pajama painting with arrays and Class TXBrowse.
* New: New Method EraseBkGnd() in Class TGroup. It properly implements the clause TRANSPARENT and also uses
its container bitmapped brush if defined, with the proper origin coordinates.
* Fix: function GetNetCardId() for Harbour is properly adapted to the new Harbour extend system.
* Enhancement: Class TRbGroup (Groups in RibbonBar) Method PopupGroup() activated. Please review samples\Ribbon.prg
* Enhancement: Added drop shadow support to Ribbon Popup Groups. Please review samples\Ribbon.prg
* New: Windows API functions SetClassLong() and GetClassLong().
XBROWSE:
--------
NEW FEATURES:
1) Gradient painting of rows and cells:
By specifying a Gradient Array as the second color in bClrStd, bClrSel, bClrSelFocus, bClrRowFocus, instead of a
solid color, the rows/cells are painted with gradient.
Example:
aGrad := { { 1, RGB( 220, 235, 252 ), RGB( 193, 219, 252 ) } }
oBrw:bClrSelFocus := { || { CLR_BLACK, aGrad } }
This will paint the row/cell with aGrad as the gradient background.
Sample: \fwh\samples\xbrowgrd.prg
2) Method BrwFitSize( lReSize (default .f. ) ) --> { nRequiredWidth, nRequiredHeight }
This method can be called during INIT of the container dialog/ window or at runtime, but not before the dialog
is initiated. If called without parameter:
Return values:
nRequiredWidth : Total width needs to be set for the browse to display all the columns. The result may even
exceed the width of the container window/dialog or even the screen width. Programmer should use this information
appropriately.
nRequiredHeight: Required height to show all the rows, if it is smaller than the height already set.
If called with parameter as .T.
The browse is actually resized to fit the columns and rows to the extent possible. Width is either reduced or
stretched ( but not exceeding the width of the container window ).
Height is reduced if lesser height is enough to show all rows.
If oBrw:nRightMargin is specified, oBrw:nLeft is adjusted or oBrw:nRight is adjusted.
If oBrw:nBottomMargin is specified, oBrw:nTop is adjusted or oBrw:nBottom is adjusted.
In this case the acutal new width and height are returned.
3) Group Headers:
Though this is an existing feature, the logic is replaced with totally revised logic and it is made extremely
easy for the programmer to specify the group headers and with some new features.
Multiline and bitmap support provided for group headers.
Calling the method oBrw:SetGroupHeader( cGroupHeader, [nFromCol], [nUptoCol], [oFont] ) is all that is required to set a group heading.
If nFromCol and/or nUptoCol default to 1 and last column, if not specified.
XBrowse automtically computes the required header height to display group and column headers and decides the ideal value for oBrw:nHeaderHeight. It is recommended not to set the header height manually in the program.
Alternatively groups can also be specified by assigning same group header to oCol:cGrpHdr. All consecutive
columns having the same :cGrpHdr are grouped under the same heading.
Other data relevant for GroupHeaders:
oCol:oGrpFont
oCol:nGrpBmpNo ( bitmap support for group headings )
Backward compatibility is retained for the documented syntax, but the programmers are advised to use the new
methods in future.
Following data are now Obsolete, but retained only for backward comapatibilty:
oBrw:nHeader
oBrw:aHeaderTop
oCol:nHeaderType
Sample: \fwh\samples\testhead.prg is revised to show the use of the new syntax.
Dynamic Grouping at Runtime: SetGroupHeader(...) method can be called even at runtime to create or change the groupings. Right-Click on the browse in the above sample demonstrates this feature.
New Data: lAllowColReGroup is .f. by default. When this data is set to .f. and lAllColSwapping is true, columns
can be swapped but within same group and withing ungrouped columns. If lAllowColReGroup is set to .t. moving
columns at runtime changes the columns group to the new group.
IMPROVEMENS AND FIXES:
* Improvement: Where header has CRLFs, data nHeaderLines is automatically computed by the xbrowse. It is desirable not to specify the data nHeaderLines manually, unless required for other reasons.
* Fix: Class TXBrowse Method SelFont(), new font is set to the browse and all columns correctly.
* Modification: Class TXBrowse Method MoveCol(). While user can not drag a column in to and out of freezed columns area, programmer can move without restriction.
* Improvement: XBrowse, EDIT_LISTBOX now uses colors and font specified in oCol:bClrEdit and oCol:oEditFont
* Improvement: XBrowse: EDIT_LIST_BOX behavior is now consistent with EDIT_GETs. In fastedit mode, key pressed to invoke edit is passed on as the initial key to the listbox control and after edit cursor moves to the next editable column.
* Fix: TXBrowse Method SetRDD. bSeek codeblock automatically generated raises runtime error when the workarea is not indexed. Now fixed.
* Improvement: Class TXBrowse: New DATA lKineticBrw ( default .t. ). While CLASSDATA lKinetic can be set to enable or disable Kinetic browse globally,
lKineticBrw can be set to enable or disable Kineti browse for the specific browse overriding the global setting.
* Improvement: Class TXBrowse: Method PageDown. When bottom of the table is reached by pressing pagedown key the data is fully painted in the browse, in conformity with the painting on Refresh
* Fix: Class TXBrowse Method EraseData: When oBrw:lTransparent is .t. and no background is specified blank rows are painted with browse colors instead of parent window/dialog brush. Fixed.
* New: Xbrowse.ch. New constant DATAYPE_USER. If user defines xbrowse for any data source not one of the pre-defined datatypes, oBrw:nDataType should be specified as DATATYPE_USER.
* Fix: Class TXBrowse Method Initiate: Initiate method was resetting the colors already set by user. Now fixed.
* Improved: Class TXBrowse Method ColStretch: Improved columns stretching method. Also fixed runtime error in some cases.
* New: samples\xbrwin7.prg shows how to use Windows 7 selected row colors in xbrowse.
* New: Class TXBrwColumn SETGET method nWidthChr. Width of column in number of characters. Used to provide
appropriate size of columns to Report method.
* Improved: Class TXBrowse: When column width is narrower to display full character value, the value is shown in
multiple lines if the user increases the row height even if nDatalines is not assigned with higher number.
* Improvement: Class TXBrowse Methods ToExcel() and ToCalc(). While exporting decimal numbers, the number of
decimal places was set to 2 irrespective of the number of decimal places in the picture format of the column.
Now the exported numeric values are formatted with the actual number of decimal places in the column's picture
format.
* XBrowse: Improvement in Array Sort: XBrowse handles browing arrays containing different datatypes in the same
column and varying array lengths in different rows.
- The array sort algorithms were limited to handle only arrays containing same datatypes in the same column.
Now array sort handles different datatypes in the same column as well as rows with varying lengths.
- Sorting of character values were case sensitive. Now new DATA oCol:lCaseSenstive ( default .f. ) is used
by the array sort. When this data is false, the sort is case insensitive, that is more useful in many cases
and if the data is set to .t., the sort is case sensitive.
* XBrowse: Improvement in Incremental Seek on Array browse: Incremental seek on array browse was limited to
arrays with rows containing same datatypes in the same column. Arrays with different datatypes in the same
column or having different array lengths in different rows would result in runtime errors.
- Now incremental seek functionality is extended to work on all kinds of arrays.
- Incremental seek honors the oCol:lCaseSensitive setting.
- WildSeek functionality is not extended to Arrays also. If oBrw:lSeekWild is set to .t. ( default .f. ),
Wildseek is performed.
* function XBrowse() and command XBROWSER: oSeek and WildSeek controls were not displayed even when autosort was specified unless bselect also was specified. Now oSeek and wildseek controls are displayed if autosort is specified even if bselect is not specified.
* Function XBrowse() moved to independant module \fwh\source\function\xbrowser.prg. This enables implementation of programmers own version of xbrowse() function without altering the main xbrowse.prg and still taking benefit of XBROWSER command.
* Improvement: function XBrowse(), Command XBROWSER: Programmer can now specify the code to be executed by assigning codeblock to oBrw:oWnd:bInit and/or oBrw:bInit, while executing the bSetUp code block. If specified, these codeblocks oBrw:oWnd:bInit is executed with oDlg as parameter and oBrw:bInit is executed with oBrw as parameter during executing of the xbrowsers own init routine. This feature allows the programmer to excercise more control on the browse and dialog setup, which were not possible earlier.
* function XBrowse(): Modified to use oBrw:BrwFitSize() method.