March 2016
==========
* New: FWH 64 is fully compatible with Borland BCC 7.0 and 7.1 64 bits
* Fix: ButtonBmp (buttonb.prg ): Backward compatibility issue fixed
viewtopic.php?f=6&t=32036&p=187463#p187463
* Fix: gdiplus.cpp: HB_FUNC( GDIPLUSCREATECOLOR )
Color clr = Color( hb_parnl( 1 ), hb_parnl( 2 ), hb_parnl( 3 ), hb_parnl( 4 ) );
* Improvement: gdiplus.cpp: HB_FUNC( GDIPLUSIMAGEPIXTOGRAYCOLOR )
Now Alpha incorporate
* Fix: Resize() method of GdiBmp class was wrongly calculating width,
when paramter width is nil. Fixed.
* New: gdiplus.cpp: HB_FUNC( GDIPLUSPENSETLINEJOIN )
* New: gdiplus.cpp: HB_FUNC( GDIPLUSDRAWTEXT )
* New: gdiplus.cpp: HB_FUNC( GDIPLUSDRAWTEXTFONT )
* New: gdiplus.cpp: HB_FUNC( GDIPLUSFONTCREATEFROMHDC )
* New: gdiplus.cpp: HB_FUNC( GDIPLUSPATHADDELLIPSE )
* New: gdiplus.cpp: HB_FUNC( GDIPLUSTEXTTOBMP )
* New: gdiplus.cpp: HB_FUNC( GDIPLUSBMPFROMTXTCENTER )
* Improvement: gdiplus.cpp: HB_FUNC( GDIPLUSIMAGESAVE )
Fix name of file
* Improvements: Class Graphics
METHOD DrawText
now allowed to pass as a parameter the name of the font or object
* New: Class Graphics
METHOD DrawTextLFont
Use LOGFONT of font object actual
* New: Class Pen
METHOD SetLineJoin
* New: Class Path
DATA lNoHighQuality
METHOD AddString( cText, cFont, nStyle, eMSize, nTop, nLeft, nRight, nBottom )
METHOD FillPath( oGraphics, oBrush, oWnd )
METHOD DrawPath( oGraphics, oPen, oWnd )
* Unicode:
- GDIP_ImageFromFile() now accepts Unicode filename also
* Fix: There was a bug in Class TDde. Now it is ok:
viewtopic.php?p=188030#p188030
* Fix: DLL FUNCTION ... for FWH 64 bits was not properly supporting the
parameters supplied by reference. Now it is ok:
viewtopic.php?p=188063#p188063
* New color conversion functions:
- RGBTOHSL( nRGB ) --> { hue, saturation, luminence }
or RGBTOHSL( { r, g, b } )
or RGBTOHSL( R, G, B )
- HSLTORGB( { h, s, l } ) --> { R, G, B, nRGB }
* New: Class TToast implements Windows desktop notifications,
with header, footer, bitmap, settings menu, button close, and possibility of
add controls of notification.
Also, It can be used to create a standard tooltip control with the same
properties as notifications.
viewtopic.php?f=3&t=32059&hilit=toast#p187571
Please review samples\toastest.prg for a working example.
* XBROWSE:
(a) Fix: Veritcal resizing of row height with mouse at runtime
stopped working from ver.15.12. Fixed
(b) Enhancement: SetCheck() was required to be called only before the
Adjust() method of xbrowse was executed. Now SetCheck() can be called
at anytime, including runtime.
- SetCheck() also centers header.
Note: When XBrowse is created in a Window, Adjust() is called during
execution of CreateFromCode(). In case of dialogs, Adjust() method is
executed during Init of the Dialog.
(c) Enhancement: AutoFit() can be called at anytime now:
AutoFit( [aColsToFit], [lVisibleOrNumRows], [lDataOnly], [nMaxWidth] )
aColsToFit: Optional array of columns to fit.
Defaults to all columns, if called after Adjust() method
Defaults to only those columns to which nWidth is not expressly
assigned (and EDIT_LISTBOX), if called before Adjust() method.
lVisibleOrnumRows: When .T. is specified during runtime, only visible
rows are adjusted. If a number is specifed, only the first specified
of rows are adjusted.
Default is all rows. This may be slow for large disk based datas sources.
lDataOnly: Default .f. If .t. width is adjusted to fit data only and header
and footer widths are not considered.
nMaxWidth: If specified the width of any column is limited to this maximum.
(d) New data lDrawBorder (default .f.)
If set to .t., draws a single line border around the browse. Useful when
not having recordselector, headers, or scrollbars.
* New Class TArrayData:
Can be used with multi-dimentional arrays the same way as TDatabase and
TRecset.
Usage:
oData := TArrayData():New( aArrayData, aStructure )
aStructure is similar to dbf structure.
Method SetArray( aData ) can be used to set / reset array data.
- Fields can be accessed and assigned simlar to TDatabase like
oData:Salary := 2500
- All navigational methods similar to DBF and also RecordSet can be used
(eg. gotop(), gobottom(), movefirst(), movelast(), etc )
- While it is desriable to initialize with multi-dim array conforming to
the data structure provided, single dimentional and ragged arrays are
converted as multidimentional arrays of the required number of columns
initially by the class.
- Datatypes not matching with the types in the aStrcture are converted
suitably while accessing and assignment.
- Expressions like "QUANTITY * PRICE" can be used. Eg:
? oData:FieldGet( "QUANTITY * PRICE" )
- Sorting: Method SetOrder( fieldname, nil, lDescend )
- SetOrder is possible only with single fieldname.
- :SetOrder( 0 ) restores natural order. The same order at the time of
creation of the object
- oData:Sort := "SALARY DESC" also is possbile like a RecordSet.
- Filtering: Method SetFilter( <expression> )
eg: oData:SetFilter( "QUANTITY > 2000 .AND. YEAR(INVDATE) == 2016" )
oData:SetFilter( "" ) clears filter.
oData:Filter := "STATE == 'NY'" also is possible