What's New in FWH 26.08

Highlights of FiveWin for Harbour/xHarbour version 26.08 (August 2026). See also whatsnew.txt in the FWH root for the full day-by-day log.

TXBrowse footers in resource dialogs

New sample samples/ui/xbrowse/brwfooter.prg (+ brwfooter.rc) shows how to place a TXBrowse with footer totals inside a dialog created from a binary resource (CreateFromResource()): enable the footer row with oBrw:lFooter := .T., set nFooterType := AGGR_SUM on each numeric column, load the data with SetArray( aData, .T. ) before configuring the columns (SetArray with .T. regenerates aCols) and call MakeTotals().

Two pitfalls are documented: the control in the .rc must use window class "TXBrowse" (registered by CreateFromResource()); classes like RichEdit20W whose DLL is not loaded make DialogBox() fail with "Cannot create Dialog Box". And column data blocks should use oBrw:nArrayAt — not oBrw:nAt — because nAt calls ColAtPos() before ::aDisplay exists during INITIATE/ADJUST.

Linking FWH 26.08 with xHarbour Commercial failed with Unresolved external _HB_FUN_FW_PALBMPREGISTER / _HB_FUN_FW_PALBMPUNREGISTER (referenced from Fivehmx.lib(bitmap.obj)) and _HB_FUN_WEBVIEW2_SETBACKGROUNDCOLOR (Fivehmx.lib(twebview2.obj)).

lib\Fivehcm.lib (the xHB Commercial C lib, VC98) was stale: it predated source/internal/fwpalctl.c (FW_PalBmpRegister / FW_PalBmpUnregister, used by the palette-aware TBitmap) and the new WebView2_SetBackgroundColor() in source/winapi/webview2.c. The lib has been rebuilt with makes/build_fivehcm.ps1. Two bugs that had been blocking the rebuild are fixed as well: include/xhbcompat.h used HB_EXTERN_BEGIN and long long although it is force-included before hbapi.h (VC98, C89), and source/internal/twebview/cwebview.cpp used INVALID_FILE_ATTRIBUTES, which the VC98 SDK does not define. Verified: makes/xhb_commercial/go.bat links test.exe with zero unresolved externals.

TOpenCode — free models (OpenCode Zen)

New class TOpenCode (source/classes/topencode.prg) calls https://opencode.ai/zen/v1/chat/completions with Authorization: Bearer public — no API key. Free models include hy3-free, mimo-v2.5-free and deepseek-v4-flash-free. Sync Send / SendWithSystem; async SendAsync / SendWithSystemAsync via hb_threadStart (build with mt so the linker uses hbvmmt). Rate-limit answers retry another free model. Concurrent async calls use unique oc_<ms>_<seq>.json names and write through a .part file then rename.

cd samples\ai
build_new.bat opencode1 hb32 mt
build_new.bat opencode2 hb32 mt
:: run from samples\ai (libcurl.dll)

See TOpenCode.

Static libcurl + opencode2 team agents

TOpenCode now talks HTTP through hbcurl with a static libcurl (Schannel) — no libcurl.dll to ship. The 3rdparty/ folder keeps the curl sources (curl.tgz, curl-src/) and the batch scripts that build lib/libcurl_static*.{lib,a} for bcc32, bcc64, msvc32, msvc64 and gcc.

samples/ai/opencode2.prg grew into a team-of-agents sample: "New team" designs a specialized team from the activity; agents consult each other with [[ASK:Name]] tags and run a greet → topic → talk → proposal protocol. Retries use backoff with cooldown and adaptive fallback (last good model first); when the Zen free chain is exhausted it falls back to a local model via Ollama (ollama:<model> at 127.0.0.1:11434). Pending sends are persisted to opencode2.json and resumed on restart.

FWH64: TC5ImgList / TVMenu in Five64.a

TC5ImgList, TVMenu and TVItem were added to fwh.hbp on 20 June 2026 (32-bit and MSVC64) but never to makes/hb_bcc64/prg_list.txt. FWH64 (Five64.a / Fivexh64.a) therefore linked without those classes: VMenu failed with “Class TC5ImgList not found” while 32-bit was fine.

The three PRGs are now in the BCC64 list. Sample samples/test/vmenu_test.prg builds and runs with build_new.bat vmenu_test hb64. Older June/July FWH64 work-around: compile source/classes/tc5imglst.prg into the app. See TVMenu.

TXBrowse:bLClicked after BookMark

TXBrowse:LButtonDown() now evaluates bLClicked once, after the row change (Skip() / BookMark). The April 2026 double-fire fix had run the block before the move, so oBrw:BookMark was still the previous record. Radio-style SetCheck() columns that assign nSelectedRow := oBrw:BookMark in bLClicked therefore checked the old current row instead of the clicked one.

bLClicked is still niled around Super:LButtonDown() so TControl / TWindow do not evaluate it a second time. Sample: samples/system/xbrwin7c.prg. See TXBrowse bLClicked.

samples/test/testblur.prg — blur with JPG/PNG

samples/test/testblur.prg demonstrates the FWH library Blur( hBitmap, nRadius ) effect (box blur, 0–100, implemented in source/internal/ribbon.c). It previously loaded only BMP via PalBmpRead and carried a duplicate C #pragma BEGINDUMP. It now loads common image files, shows a visible horizontal slider under the image, and links Blur() from the FiveHC / FiveC libs (pure PRG sample; Win32 uses hb_retnl, Win64 hb_retnll).

cd samples\test
build_new.bat testblur hb32
testblur.exe
:: or: testblur.exe C:\path\to\photo.jpg

Related: FW_ReadImage() / PalBmpDraw(), source/internal/ribbon.c (HB_FUNC( BLUR )), and sample samples\test\testblu2.prg (blur over an XBrowse background).