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.
TGraph auto-refresh + sample KPI com browse
O TGraph se repinta sozinho quando os dados mudam
(source/classes/tgraph.prg): novo DATA
lAutoRefresh (.T. por defeito). Qualquer alteração via
AddSerie, SetYVals, SelSerie,
SelPeriod, aTable, ResizeSerie,
SetValue, SetSerieValues,
SetData, SetXYValue, SetXYData,
DelSerie ou ClearSeries dispara
DoRefresh() automaticamente. Agrupa alterações em massa com
BeginUpdate() ... EndUpdate() para um único
repintado, ou define lAutoRefresh := .F. e refresca à mão
com Update(). As atribuições diretas a ::aData
/ ::aSeries não podem ser interceptadas — usa os métodos
Set*() ou chama Refresh() depois.
Docs: en/es/pt ui/tgraph.html#auto-refresh.
Novo sample samples/graphics/graphkpi.prg: dois controles
TXBrowse (contextos + prompts) com colunas KPI e totais no rodapé, uma
buttonbar ancorada no topo, uma barra de estado com os KPIs
selecionados e um TGraph redimensionável com splitters que acompanha a
navegação e as mudanças de métricas sem refazer o controle.
Lembra-te: os browses criados por código precisam de
oBrw:CreateFromCode().
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.
Formatação numérica: não defina bStrData nas
colunas numéricas de array. O bStrData padrão
(ArrCell) aplica oCol:cEditPicture às células
de dados; um bloco próprio que devolva o número bruto é exibido com
Str() e o picture é ignorado. Os totais não são afetados,
pois MakeTotals() lê o valor bruto via
bEditValue (::Value), não via
bStrData. Use cEditPicture := "999,999,999"
para as células, cFooterPicture para o total do rodapé e
nFootStrAlign := AL_RIGHT para alinhá-lo à direita.
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).