FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index WhatsNew / Novedades New FTDN April/Abril 2025 (FWH 25.04)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
New FTDN April/Abril 2025 (FWH 25.04)
Posted: Mon May 19, 2025 02:30 AM
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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: New FTDN April/Abril 2025 (FWH 25.04)
Posted: Wed May 21, 2025 07:15 PM
Mayo 2025
=========

* Nueva: Clase THorzScroll para mostrar paneles.Ejemplos en samples\hrzscr1.prg, samples\hrzscr2.prg y samples\hrzscr2.rc.
Clase creada por Silvio Falconi !!!

Sintaxis de comandos:

@ <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 ) - Para a帽adir un panel
RemovePanel(nItem) - Para eliminar un panel

* Correcci贸n: Un bug para xHarbour comercial fue introducido en los cambios del 10 de octubre de 2024. Ahora est谩 corregido.
El ejemplo samples\xhbgdi.prg muestra como superar las limitaciones de GDI+ para su uso en xHarbour Comercial.

* Nueva: Clase TScrollImg para mostrar im谩genes. Ejemplos en samples\Testscrimg.prg y samples\testscrimg1.prg.
Clase creada por Silvio Falconi !!!

Sintaxis de comandos:

@ <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> ]

En los ejemplos se utilizaron peque帽os banners de tama帽o 130X40 que se descargaron del siguiente sitio web:

https://brandlogos.net/brand-logos/electric-logos/

El array aBanners define las im谩genes a mostrar. Puede estar en 4 formatos:

Simple (s贸lo im谩genes). Ejemplo: aBanners := {"Bosch.png", "Brother.png", "Canon.png"}

Con URLs (im谩genes y enlaces). Ejemplo: aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}

Con bloques de c贸digo (im谩genes y bloques de c贸digo). Ejemplo:
aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}

Con todos los tipos m谩s texto. Ejemplo: aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F., "Computers" },;
{ "Brother.png", "www.brother.it", .F., "printers" },;
{ "Canon.png", {|| MsgInfo("text") }, .T., "printers" }}

Para la animaci贸n use nMode = 1 de derecha a izquierda, nMode = 2 de izquierda a derecha, nMod e= 3 de arriba a abajo,
nMode = 4 de abajo a arriba.
Para activar el control de velocidad a trav茅s de la interfaz debe establecer lUseSpace:=.T. para activar la barra
espaciadora lChangeSpeed:= .T.
Para activar el teclado num茅rico +/- o +/- en el teclado.
lMouseWheel:= .T. para activar el cambio de velocidad con la rueda del rat贸n.
Puede guardar el estado en un archivo ini con SaveState() y cargarlo con LoadState().

M谩s informaci贸n: https://forums.fivetechsupport.com/viewtopic.php?t=45634

Abril 2025
==========

* Nuevas funciones: A帽adidos comandos XTRANSLATE para "C贸digo Limpio".
L铆neas 58 a 79 en Fivewin.ch

XBROWSE ( en memoria de nuestro compa帽ero Mr.Rao )
* Nuevo m茅todo ResetState()
Devuelve el objeto oBrw a su estado original cuando fue creado.
Uso: oBrw:ResetState()

* Mejora: oBrw:SaveState() ahora compatibles con valores JSON.

* Correcci贸n: oBrw:RClick El evento funciona la primera vez, la segunda no. Solucionado.

* Mejora: Nueva DATA bTimer en TMsgBar.

Ejemplo:

::oMsgBar:bTimer := ;
<||
if SubStr( Time(), 4, 2 ) == "00" .and. SubStr( Time(), 7, 2 ) == "00"
SndPlaySound( "\fwh\sounds\info.wav", SND_NOSTOP )
endif
return nil
>

* Mejora: Nueva DATA oKeyScr en TMsgBar
Insertar Bloq Despl en 芦May煤s Num Despl Ins禄

* Correcci贸n: La acci贸n de may煤sculas y min煤sculas no funcionaba. Corregido.

* Correcci贸n: La cl谩usula TBTNBMP DEFAULT no funciona correctamente en TWindow. Corregido.

* Mejora: Se agreg贸 compatibilidad con a帽o, mes y d铆a para la funci贸n TimefromStart()

* Nueva funci贸n GetWndTitleHeight(oWnd o hWnd) -> nHeight(n潞 pixeles) de la ventana.
Incluye la altura de la barra de t铆tulo y las alturas de los marcos superior e inferior (Excepto el 谩rea WndClient)

* Nueva funci贸n GetUsedClass()
Uso: GetUsedClass() -> Array con los nombres de las clases utilizadas.
GetUsedClass( "MyClass" ) -> .T./.F. Comprueba si el nombre de la clase est谩 en uso.

* Mejora: Para TWindow() "CLASS MyApp FROM TMdiFrame" no estaba disponible. Ahora es soportado.

* Mejora: Para TWindow() METHOD End() para IDCANCEL.

Ejemplo: Para finalizar todos los procesos hijos / for CloseAll() childs

While Len( aChilds ) > 0 .and. IsLogic( ATail( aChilds ):End() ) // Si devuelve IDCANCEL, el bucle ha finalizado
...
...
End

* Correcci贸n: TMdiChild:Center() no funcionaba correctamente. Solucionado.
* Correcci贸n: TMdiChild:GotFocus() no funcionaba correctamente. Solucionado.

* Mejora: TMdiChild:lValid() for IDCANCEL

Ejemplo for en 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

* Correcci贸n: La variable TMdiClient lRegistered existe pero no ::register(). Corregido
( puede afectar a la gesti贸n de eventos )

* Nuevo: samples\game2.prg
Usando bloques de c贸digo ampliados y escribir c贸digo de clase.


Febrero 2025
============

* Nuevo: samples\gmail\testgmail.prg

Un nuevo ejemplo demostrando como usar las clases TGMail y TOAuth para conectar con GMail via OAuth para el envio
de mensajes de correo.
Por favor, revisa el fichero samples\gmail\README.md para ver las instrucciones y crear los datos: "client_id", "secret_id" y
"redirect_uri".

Video demostrativo: https://www.youtube.com/watch?v=bX0YFNlYowQ

* Mejora: source\classes\tsocket.prg

* Correcci贸n: Hab铆a una p茅rdida de memoria en la funci贸n GDIP_SAVEIMAGE(). Solucionado. Muchas gracias a Dutch por sus comentarios:

https://forums.fivetechsupport.com/viewtopic.php?t=45488

* Correcci贸n: Problema de arrastrar y soltar reportado hace tiempo por Dutch. 隆Por fin se ha solucionado!

* Correcci贸n: Error en la clase TRbtn reportado por Elmoiquique. Gracias a Cristobal Navarro !!!

https://forums.fivetechsupport.com/viewtopic.php?t=45483

* Mejora: En la clase TOllama DATA cPrompt como en la clase TOpenAI.

* Nuevo: Ejemplo samples\zebraqr.prg. Nuevo ejemplo mostrando como crear c贸digos QR usando FWZEBRA de FWH.

* Nuevo: Ejemplo samples\agents.prg. Nuevo ejemplo mostrando como usar una clase TOllama con soporte de agentes.
Por favor, descarga e instala Ollama antes de probar este ejemplo.
Ejecuta tambi茅n desde la l铆nea de comandos de Windows: ollama pull gemma3

* Mejora: En la clase FWPDF en el m茅todo SetCopies( nCopies ) como VIRTUAL. Resuelve un problema de compatibilidad con HaruPDF.

* Mejora: En la clase TOllama se ha a帽adido soorte para agentes Harbour y se ha unificado el m茅todo Send().
Por favor, revisa samples\agents.prg

* Mejora: samples\fwfuncs.prg mejorado para soportar MSVC 32 bits.
regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion