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.
xHarbour Commercial: unresolved externals fixed
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.
samples/ai/opencode1.prg— three agents in parallelsamples/ai/opencode2.prg+opencode2.html— TWebView2 WhatsApp-style designer (agents left, chat right, add/edit roles)
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).
- Formats: BMP, JPG/JPEG, PNG (and other types supported by
FW_ReadImage/ FreeImage / GDI+ fallbacks) - UI: code-created
DEFINE DIALOGwithPIXEL TRUEPIXELso the image and controls share the same pixel grid; withoutTRUEPIXEL, PIXEL controls can land outside the dialog template and disappear - Slider: horizontal TSlider under the bitmap (0–100); value shown next to the label “Blur:”
- API:
Blur( hBmp, nRadius )from the FWH C library — no embedded C in the sample - CLI:
testblur.exe path\to\image.jpgskips the file dialog when the path exists
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).