New FTDN April/Abril 2025 (FWH 25.04)

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 44508
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 717 times
Been thanked: 311 times
Contact:

New FTDN April/Abril 2025 (FWH 25.04)

Post by Antonio Linares »

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:
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:

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
User avatar
Antonio Linares
Site Admin
Posts: 44508
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 717 times
Been thanked: 311 times
Contact:

Re: New FTDN April/Abril 2025 (FWH 25.04)

Post by Antonio Linares »

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: 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:

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 !!!

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
Post Reply