May 2017
========
* Enhancement: samples\rbdesign.prg now allows to edit the colors of the buttons.
* Enhancement: Improved integration of datarow with fwmariarowset.
* Enhancement: bar.prg: Painting of group labels now work well with dialogs
and buttonbars created from source code as well as resources.
* New: \samples\mariainv.prg: A sample invoicing program using FWMARIADB
adapted from yunus.prg
* FWMARIADB:
- Enhancement: Now CHECK constraint is supported by methods CreateTable().
Useful for MariaDB servers version 10.2.1 and above.
i.e, when oCn:IsMariaDB() is .T. and oCn:nVersion >= 10.21
This constraint is ignored on other servers without producing any errors.
- RowSet: Update() and Delete() operations fail, when the rowset does not
contain a primary/unique key and the values of the current row are not
unique. Now this is raised as an error. The error can be viewed if
:lShowErrors is .t. or :lLogErr is set to .t.
- New method: oCn:TableStructure( cTable ) --> aStructure
cTable should be a table in the curreent db. We can query the
structure of a table without opening the table. The result is
identical to oRs:aStructure. oCn:ListColumns( [db.]cTable ) gives
more information about the columns.
- New method; oCn:CopyStructure( [dbsrc.]srctable, [dbdst.]dsttable )
--> lSuccess
For creating a new table in the same or other database with the
same structure as the source table. This function fails if
(a) srctable does not exist or (b) dsttable already exits or
(c) the table has a foreign key and the referred table is not
availble in the destination db.
- New method:
oCn:CopyTable( [dbsrc.]srctable, [dbdst.]dsttable, ;
[cSrcFieldList], [cDstFieldList], [cSrcWhere], ;
["update/ignore'] ) --> lSuccess
Copies contents of all fields or specified fields from srctable to
dsttable for all rows or for selected rows with where condition.
If the destination table does not exist, it is created.
(See CopyStructure)
By default if the dsttable already contains the primary/unique
keys the entire operation fails.
If 6th parameter is "ignore", only non-duplicate values are
copied/inserted.
If 6th parameter is "update", non-duplicate values are inserted
and duplicate rows are updated with the values in the source table.
- RowSet: New method:
oRs:ResyncWhere( cWhere ) or
oRs:ResyncWhere( cField, uVal )
Resyncs only one record satisfying the condition. if the record is
not already in the rowset, it is appended to the rowset.
- RowSet: oRs:WhereLikeCurrentRow() --> cWhere
* Enhancement: function MsgRun() now supports a fourth parameter to specify
a parent window where to center the message:
viewtopic.php?p=201302#p201302
* Fix: There was a bug in function DialogBoxIndirect() used from Class TDialog:
viewtopic.php?p=201380
Luis example is working fine now
* Fix: function ADrives() reported fix by Enrico was not included in FWH 17.04:
viewtopic.php?p=200545#p200545
Now it is ok. Many thanks to Enrico!
* Fix: Fixed bug in Class TGet when using right alignment:
viewtopic.php?p=195256#p195256
* Fix: Width items with bitmaps in items of menu principal and popups
* Enhancement: CLASS TMENU, allow resource of file image to menuitems in methods
METHOD AddEdit( aColors, cFile, cRes )
METHOD AddFile( aColors, cFile, cRes )
METHOD AddHelp( cAbout, cCopyRight, aColors, cFile, cRes )
METHOD AddMdi( aColors, cFile, cRes )
* New function GetClipContentFormat( [aFormats] ) --> nFormat
This function can be used to find if clipboard is empty and if not
the format of the clipboard contents, eg. CF_TEXT (1), CF_BITMAP(2)
Optional parameter aFormats can be either an array of list of
formats queried. If aFormats is specified, format number is returned
only if clipboard contains any of the formats in the array.
If clipboard is empty return value is 0.
If clipboard has contents but not of any format in the aFormats parameter.
the return value is -1.
Once the format of contents is ascertained with this function, the
format can be set to the TClipboard class the retrieve the contents.
* Class TClipboard: New method GetFiles(). It is possible to get the list
of files copied from file explorer by setting nformat to 15 (CF_HDROP)
* MemoEdit and TMultiGet.
For pasting contents of a text file, till now, we need to open it in an
editor copy the contents and then paste into MemoEdit/TMultiGet.
Now, we can copy the file in file explorer and paste the contents
at the cursor position by clicking Ctlr-V or calling aste()
* XBrowse - Pasting of text and images:
As always pasting of text of images into xbrowse is possible only
when oBrw:lCanPaste is set to .t.
Till now, for pasting text/image from a file on the disk, we needed
to first open the file in a text/image editor, copy and then paste
into xbrowse.
Now, we can copy the file in the file explorer and paste the contents
into xbrowse by Ctrl-V or oBrw:Paste().
As always, any content that is pasted into xbrowse is also immediately
written into the database.
This makes it easy to assign the contents of text/binary/image files to
memo fields of database.
* New function cNumToChar( nVar ) --> cVar
This is similar to cValToChar( u ) but preserves the full accuracy
of the number unlike cValToChar()
Example:
n := 35/16 // the value is 2.1875
? n, Str( n ), cValToChar( n ) // show 2.19
? cNumToChar( n ) // show 2.1875
Str( n, 6, 4 ) shows full value, but while programming we always do
not know what values to use for length and decimals.
cNumToChar() returns the full accurate value as string.
* FW_ValToSQL() and oCn:ValToSQL() now use cNumToChar( n )
* samples\testage5.prg revised: using autoget with DBFs
* New function: FTranslate
Function for Translate text to others languages
// Params..: Source Text, Language Source, Language Target, .T. if target language is UTF8
// List languages supported
// https://ctrlq.org/code/19899-google-translate-languages
* Add TestTrans.prg to samples folder ( Test FTranslate() function )