Novidades no FWH 26.08
Destaques do FiveWin for Harbour/xHarbour versão 26.08 (agosto 2026).
Veja também whatsnew.txt na raiz do FWH para o log dia a dia.
Totais do TXBrowse em diálogos de recurso
Novo sample samples/ui/xbrowse/brwfooter.prg (+
brwfooter.rc): mostra como colocar um TXBrowse com totais no
rodapé dentro de um diálogo criado a partir de um recurso binário
(CreateFromResource()): ativar a linha de totais com
oBrw:lFooter := .T., definir nFooterType := AGGR_SUM
em cada coluna numérica, carregar os dados com
SetArray( aData, .T. ) antes de configurar as colunas
(SetArray com .T. regenera aCols) e chamar MakeTotals().
Duas armadilhas documentadas: o controle do .rc deve usar a classe de
janela "TXBrowse" (registrada por
CreateFromResource()); classes como RichEdit20W
cuja DLL não está carregada fazem DialogBox() falhar com
"Cannot create Dialog Box". E os blocos bStrData devem usar
oBrw:nArrayAt — não oBrw:nAt — porque nAt chama
ColAtPos() antes de ::aDisplay existir durante
INITIATE/ADJUST.
xHarbour Commercial: externos não resolvidos corrigidos
Ao linkar o FWH 26.08 com xHarbour Commercial falhava com
Unresolved external _HB_FUN_FW_PALBMPREGISTER /
_HB_FUN_FW_PALBMPUNREGISTER (referenciados de
Fivehmx.lib(bitmap.obj)) e
_HB_FUN_WEBVIEW2_SETBACKGROUNDCOLOR
(Fivehmx.lib(twebview2.obj)).
lib\Fivehcm.lib (a lib C para xHB Commercial, VC98) estava
desatualizada: era anterior a source/internal/fwpalctl.c
(FW_PalBmpRegister / FW_PalBmpUnregister, usados
pelo TBitmap com paleta) e ao novo
WebView2_SetBackgroundColor() em
source/winapi/webview2.c. A lib foi reconstruída com
makes/build_fivehcm.ps1. Também foram corrigidos dois bugs
que bloqueavam essa reconstrução: include/xhbcompat.h usava
HB_EXTERN_BEGIN e long long embora seja incluído
forçadamente (-FI) antes de hbapi.h (VC98, C89), e
source/internal/twebview/cwebview.cpp usava
INVALID_FILE_ATTRIBUTES, que o SDK do VC98 não define.
Verificado: makes/xhb_commercial/go.bat linka
test.exe sem externos não resolvidos.
TOpenCode — modelos free (OpenCode Zen)
Nova classe TOpenCode (source/classes/topencode.prg):
API Zen sem chave (Bearer public). Modelos
hy3-free, mimo-v2.5-free,
deepseek-v4-flash-free, etc. Send /
SendWithSystem síncronos; SendAsync /
SendWithSystemAsync com hb_threadStart
(compilar com mt). Em rate limit tenta outro modelo.
Ficheiros temp únicos e escrita atómica para vários agentes ao mesmo tempo.
samples/ai/opencode1.prg— 3 agentes em paralelosamples/ai/opencode2.prg+opencode2.html— TWebView2 estilo WhatsApp (agentes à esquerda, chat à direita)
cd samples\ai
build_new.bat opencode2 hb32 mt
Ver TOpenCode.
libcurl estático + equipes de agentes no opencode2
TOpenCode fala HTTP com hbcurl e um
libcurl estático (Schannel): não é preciso distribuir o
libcurl.dll. A pasta 3rdparty/ guarda os
fontes do curl (curl.tgz, curl-src/) e os
scripts .bat que constroem lib/libcurl_static*.{lib,a}
para bcc32, bcc64, msvc32, msvc64 e gcc.
samples/ai/opencode2.prg agora é uma equipe de agentes:
"New team" desenha uma equipe especializada a partir da atividade; os
agentes se consultam entre si com etiquetas [[ASK:Nome]]
e seguem o protocolo saudação → tema → rodadas →
proposta. As retentativas usam backoff com cooldown e fallback
adaptativo (primeiro o último modelo que respondeu); se a cadeia Zen
se esgota, cai para um modelo local via Ollama
(ollama:<modelo> em 127.0.0.1:11434). Os envios em
curso são gravados em opencode2.json e retomados ao
reiniciar.
FWH64: TC5ImgList / TVMenu em Five64.a
TC5ImgList, TVMenu e TVItem
entraram em fwh.hbp em 20 de junho de 2026 (32 bits e
MSVC64) mas nunca em makes/hb_bcc64/prg_list.txt. O FWH64
(Five64.a / Fivexh64.a) ligava sem essas
classes: VMenu falhava com “Class TC5ImgList not found” e no 32 bits
funcionava.
Os três PRGs estão agora na lista BCC64. O sample
samples/test/vmenu_test.prg compila e corre com
build_new.bat vmenu_test hb64. No FWH64 de junho/julho:
compile source/classes/tc5imglst.prg na aplicação.
Ver TVMenu.
TXBrowse:bLClicked depois de BookMark
TXBrowse:LButtonDown() avalia bLClicked
uma vez, depois da mudança de linha
(Skip() / BookMark). A correção de abril 2026
do disparo duplo executava o bloco antes do movimento, então
oBrw:BookMark ainda era o registro anterior. Colunas
SetCheck() no estilo rádio que fazem
nSelectedRow := oBrw:BookMark em bLClicked
marcavam a linha atual antiga, não a clicada.
bLClicked continua anulado em volta de
Super:LButtonDown() para TControl / TWindow não o
avaliarem de novo. Sample: samples/system/xbrwin7c.prg. Ver
TXBrowse bLClicked.
samples/test/testblur.prg — blur com JPG/PNG
samples/test/testblur.prg demonstra o efeito da biblioteca FWH
Blur( hBitmap, nRadius ) (box blur, 0–100, em
source/internal/ribbon.c). Antes carregava apenas BMP via
PalBmpRead e duplicava o C num #pragma BEGINDUMP.
Agora carrega imagens comuns, mostra um slider horizontal visível sob a imagem
e liga Blur() a partir das libs FiveHC / FiveC (sample só PRG;
Win32 hb_retnl, Win64 hb_retnll).
- Formatos: BMP, JPG/JPEG, PNG (e outros suportados por
FW_ReadImage/ FreeImage / GDI+) - UI:
DEFINE DIALOGcomPIXEL TRUEPIXELpara imagem e controles no mesmo grid em pixels; semTRUEPIXEL, controles PIXEL podem ficar fora do template do diálogo e sumir - Slider: TSlider horizontal sob o bitmap (0–100); valor ao lado do rótulo “Blur:”
- API:
Blur( hBmp, nRadius )da biblioteca C FWH — sem C embutido no sample - CLI:
testblur.exe caminho\para\imagem.jpgignora o diálogo de arquivo se o caminho existir
cd samples\test
build_new.bat testblur hb32
testblur.exe
:: ou: testblur.exe C:\caminho\foto.jpg
Relacionado: FW_ReadImage() / PalBmpDraw(),
source/internal/ribbon.c (HB_FUNC( BLUR )), e o sample
samples\test\testblu2.prg (blur sobre fundo de XBrowse).