May 2025
========
* New: Class THorzScroll for display panels and new samples\hrzscr1.prg and samples\hrzscr2.prg and samples\hrzscr2.rc
A Horizontal Scroll class created by Silvio Falconi!
Command Syntax:
@ <nRow>, <nCol> HORZSCROLL [<oScroll>] ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ SIZE <nWidth>, <nHeight> ] ;
[ COLOR <nClrPane> ] ;
[ <hscroll: HSCROLL> ] ;
[ SPACE <nBetween> ] ;
[ <border: BORDER> ] ;
[ COLORBORDER <nClrBorder> ]
AddPanel(( nWidth, nClrBack ) to insert a panel
RemovePanel(nItem) to remove a panel
* Fixed: A bug for xHarbour commercial was introduced on changes from 2024 October 10. Now it is fixed.
samples\xhbgdi.prg shows how to overcome the GDI+ limitations for xHarbour commercial.
* New: Class TScrollImg for display images and new samples\Testscrimg.prg and samples\testscrimg1.prg
A Scroll Image class created by Silvio Falconi!
Command Syntax:
@ <nRow>, <nCol> SCROLLIMG [<oScroll>] ;
[ BANNERS <aBanners> ] ;
[ SPEED <nSpeed> ] ;
[ MODE <nMode> ] ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ SIZE <nWidth>, <nHeight> ] ;
[ SPACE <nSpaceimage> ] ;
[ <border: BORDER> ] ;
[ COLORBORDER <nClrBorder> ] ;
[ <ldesign: DESIGN> ] ;
[ <lpixels: PIXELS> ]
In the examples, small banners of size 130X40 were used which were downloaded from the following website
https://brandlogos.net/brand-logos/electric-logos/
The aBanners array defines the images to display. It can be in 4 formats:
Simple (images only) sample: aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
With URLs (images and links) sample: aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
With codeblock (images and codeblock) sample:
aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}
with all type+ texts sample: aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F., "Computers" },;
{ "Brother.png", "www.brother.it", .F., "printers" },;
{ "Canon.png", {|| MsgInfo("text") }, .T., "printers" }}
For animation use nMode= 1 from right to left, nMode= 2 from left to right,
nMode= 3 from top to bottom, nMode= 4 from bottom to top,
to activate Speed 脭脟茂脭脟茂脭脟茂脭脟茂control via interface you must set lUseSpace:=.t. to activate space
lChangeSpeed:= .t. 脭脟茂脭脟茂to activate +/- numeric keypad or +/- in keyboard
lMouseWheel:= .t. to activate speed change with mouse wheel
You can save the state to an ini file with SaveState() and load it with LoadState()
April 2025
==========
* New Functions: Added some XTRANSLATE commands for "Clean Code".
Lines 58 to 79 in Fivewin.ch
XBROWSE ( in memory of Mr.Rao )
* New METHOD ResetState()
Returns the oBrw object to its raw state when created
Usage: oBrw:ResetState()
* Enhancement: oBrw:SaveState() value support JSON compatible now
* Fix: oBrw:RClick Event already works once time. Second not works. Fixed
* Enhancement: New DATA bTimer in TMsgBar
Example:
::oMsgBar:bTimer := ;
<||
if SubStr( Time(), 4, 2 ) == "00" .and. SubStr( Time(), 7, 2 ) == "00"
SndPlaySound( "\fwh\sounds\info.wav", SND_NOSTOP )
endif
return nil
>
* Enhancement: New DATA oKeyScr in TMsgBar
Insert Scroll Lock in "Caps Num Scrl Ins"
* Fix: Caps Num action(lights) was not works. Fixed
* Fix: TBTNBMP DEFAULT clause does not work correctly on TWindow. Fixed
* Enhancement: Added year, month, day support for Function TimefromStart()
* New Function GetWndTitleHeight( oWnd or hWnd ) -> nHeight(Pixel) of Window
Include TitleBar height, top and bottom frame heights (Except WndClient Area)
* New Function GetUsedClass()
Usage: GetUsedClass() -> Array of used ClassName(s)
GetUsedClass( "MyClass" ) -> .t./.f. Check ClassName is already used
* Enhancement: For TWindow() "CLASS MyApp FROM TMdiFrame" was unavailable. Support Now
* Enhancement: For TWindow() METHOD End() for IDCANCEL
Example: for CloseAll() childs
while Len( aChilds ) > 0 .and. IsLogic( ATail( aChilds ):End() ) // if return IDCANCEL loop is ended
...
...
end
* Fix: TMdiChild:Center() not correctly works. Fixed
* Fix: TMdiChild:GotFocus() not correctly works. Fixed
* Enhancement: TMdiChild:lValid() for IDCANCEL
Example for in oChild:bValid
nChoice := ;
MessageBox( GetActiveWindow(), "Save to changes?", "Attention", ;
nOR( MB_ICONQUESTION, MB_YESNOCANCEL ) )
if nChoice == IDYES // Save changes
return Eval( ::oBarData:aControls[ BTN_SAVE ]:bAction )
elseif nChoice == IDNO // Undo changes
return ::oRec:Undo()
else
return IDCANCEL
endif
* Fix: TMdiClient lRegistered variable exist but not ::register()ed. Fixed
( may affect event management )
* New: samples\game2.prg
Using extended code blocks and writing class code.
February 2025
=============
* New: samples\gmail\testgmail.prg
A new example demonstrating how to use the TGmail and TOAuth classes to connect to Gmail via OAuth for sending emails.
Please check `samples\gmail\README.md` for instructions on creating the `client_id`, `secret_id`, and `redirect_uri`.
Video demo: https://www.youtube.com/watch?v=bX0YFNlYowQ
* Enhancement: source\classes\tsocket.prg
* Fix: There was a memory leak in function GDIP_SAVEIMAGE(). Now it is ok. Many thanks to Dutch for his feedback:
https://forums.fivetechsupport.com/viewtopic.php?t=45488
* Fix: Drag&Drop issue long time reported by Dutch. It has been finally fixed!
* Fix: Class TRbtn bug reported by Elmoiquique thanks to Cristobal Navarro:
https://forums.fivetechsupport.com/viewtopic.php?t=45483
* Enhancement: Class TOllama DATA cPrompt as in Class TOpenAI.
* New: samples\zebraqr.prg new example showing how to create a QR code using the FWZEBRA FWH code.
* New: samples\agents.prg new example showing how to use an enhanced Class TOllama with Agents support.
Please download and install Ollama before testing this example. Also do from a cmd window: ollama pull gemma3
* Enhancement: Class FWPDF Method SetCopies( nCopies ) as VIRTUAL. It solves a compatibility issue
with HaruPDF.
* Enhancement: Class TOllama added Harbour Agents support and unified Method Send(). Please review
samples\agents.prg
* Enhancement: samples\fwfuncs.prg enhanced to support MSVC 32 bits.
========
* New: Class THorzScroll for display panels and new samples\hrzscr1.prg and samples\hrzscr2.prg and samples\hrzscr2.rc
A Horizontal Scroll class created by Silvio Falconi!
Command Syntax:
@ <nRow>, <nCol> HORZSCROLL [<oScroll>] ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ SIZE <nWidth>, <nHeight> ] ;
[ COLOR <nClrPane> ] ;
[ <hscroll: HSCROLL> ] ;
[ SPACE <nBetween> ] ;
[ <border: BORDER> ] ;
[ COLORBORDER <nClrBorder> ]
AddPanel(( nWidth, nClrBack ) to insert a panel
RemovePanel(nItem) to remove a panel
* Fixed: A bug for xHarbour commercial was introduced on changes from 2024 October 10. Now it is fixed.
samples\xhbgdi.prg shows how to overcome the GDI+ limitations for xHarbour commercial.
* New: Class TScrollImg for display images and new samples\Testscrimg.prg and samples\testscrimg1.prg
A Scroll Image class created by Silvio Falconi!
Command Syntax:
@ <nRow>, <nCol> SCROLLIMG [<oScroll>] ;
[ BANNERS <aBanners> ] ;
[ SPEED <nSpeed> ] ;
[ MODE <nMode> ] ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ SIZE <nWidth>, <nHeight> ] ;
[ SPACE <nSpaceimage> ] ;
[ <border: BORDER> ] ;
[ COLORBORDER <nClrBorder> ] ;
[ <ldesign: DESIGN> ] ;
[ <lpixels: PIXELS> ]
In the examples, small banners of size 130X40 were used which were downloaded from the following website
https://brandlogos.net/brand-logos/electric-logos/
The aBanners array defines the images to display. It can be in 4 formats:
Simple (images only) sample: aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
With URLs (images and links) sample: aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
With codeblock (images and codeblock) sample:
aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}
with all type+ texts sample: aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F., "Computers" },;
{ "Brother.png", "www.brother.it", .F., "printers" },;
{ "Canon.png", {|| MsgInfo("text") }, .T., "printers" }}
For animation use nMode= 1 from right to left, nMode= 2 from left to right,
nMode= 3 from top to bottom, nMode= 4 from bottom to top,
to activate Speed 脭脟茂脭脟茂脭脟茂脭脟茂control via interface you must set lUseSpace:=.t. to activate space
lChangeSpeed:= .t. 脭脟茂脭脟茂to activate +/- numeric keypad or +/- in keyboard
lMouseWheel:= .t. to activate speed change with mouse wheel
You can save the state to an ini file with SaveState() and load it with LoadState()
April 2025
==========
* New Functions: Added some XTRANSLATE commands for "Clean Code".
Lines 58 to 79 in Fivewin.ch
XBROWSE ( in memory of Mr.Rao )
* New METHOD ResetState()
Returns the oBrw object to its raw state when created
Usage: oBrw:ResetState()
* Enhancement: oBrw:SaveState() value support JSON compatible now
* Fix: oBrw:RClick Event already works once time. Second not works. Fixed
* Enhancement: New DATA bTimer in TMsgBar
Example:
::oMsgBar:bTimer := ;
<||
if SubStr( Time(), 4, 2 ) == "00" .and. SubStr( Time(), 7, 2 ) == "00"
SndPlaySound( "\fwh\sounds\info.wav", SND_NOSTOP )
endif
return nil
>
* Enhancement: New DATA oKeyScr in TMsgBar
Insert Scroll Lock in "Caps Num Scrl Ins"
* Fix: Caps Num action(lights) was not works. Fixed
* Fix: TBTNBMP DEFAULT clause does not work correctly on TWindow. Fixed
* Enhancement: Added year, month, day support for Function TimefromStart()
* New Function GetWndTitleHeight( oWnd or hWnd ) -> nHeight(Pixel) of Window
Include TitleBar height, top and bottom frame heights (Except WndClient Area)
* New Function GetUsedClass()
Usage: GetUsedClass() -> Array of used ClassName(s)
GetUsedClass( "MyClass" ) -> .t./.f. Check ClassName is already used
* Enhancement: For TWindow() "CLASS MyApp FROM TMdiFrame" was unavailable. Support Now
* Enhancement: For TWindow() METHOD End() for IDCANCEL
Example: for CloseAll() childs
while Len( aChilds ) > 0 .and. IsLogic( ATail( aChilds ):End() ) // if return IDCANCEL loop is ended
...
...
end
* Fix: TMdiChild:Center() not correctly works. Fixed
* Fix: TMdiChild:GotFocus() not correctly works. Fixed
* Enhancement: TMdiChild:lValid() for IDCANCEL
Example for in oChild:bValid
nChoice := ;
MessageBox( GetActiveWindow(), "Save to changes?", "Attention", ;
nOR( MB_ICONQUESTION, MB_YESNOCANCEL ) )
if nChoice == IDYES // Save changes
return Eval( ::oBarData:aControls[ BTN_SAVE ]:bAction )
elseif nChoice == IDNO // Undo changes
return ::oRec:Undo()
else
return IDCANCEL
endif
* Fix: TMdiClient lRegistered variable exist but not ::register()ed. Fixed
( may affect event management )
* New: samples\game2.prg
Using extended code blocks and writing class code.
February 2025
=============
* New: samples\gmail\testgmail.prg
A new example demonstrating how to use the TGmail and TOAuth classes to connect to Gmail via OAuth for sending emails.
Please check `samples\gmail\README.md` for instructions on creating the `client_id`, `secret_id`, and `redirect_uri`.
Video demo: https://www.youtube.com/watch?v=bX0YFNlYowQ
* Enhancement: source\classes\tsocket.prg
* Fix: There was a memory leak in function GDIP_SAVEIMAGE(). Now it is ok. Many thanks to Dutch for his feedback:
https://forums.fivetechsupport.com/viewtopic.php?t=45488
* Fix: Drag&Drop issue long time reported by Dutch. It has been finally fixed!
* Fix: Class TRbtn bug reported by Elmoiquique thanks to Cristobal Navarro:
https://forums.fivetechsupport.com/viewtopic.php?t=45483
* Enhancement: Class TOllama DATA cPrompt as in Class TOpenAI.
* New: samples\zebraqr.prg new example showing how to create a QR code using the FWZEBRA FWH code.
* New: samples\agents.prg new example showing how to use an enhanced Class TOllama with Agents support.
Please download and install Ollama before testing this example. Also do from a cmd window: ollama pull gemma3
* Enhancement: Class FWPDF Method SetCopies( nCopies ) as VIRTUAL. It solves a compatibility issue
with HaruPDF.
* Enhancement: Class TOllama added Harbour Agents support and unified Method Send(). Please review
samples\agents.prg
* Enhancement: samples\fwfuncs.prg enhanced to support MSVC 32 bits.