FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index WhatsNew / Novedades New FTDN September 2026 (FWH 26.09)
Posts: 150
Joined: Fri Sep 25, 2026 01:40 AM

New FTDN September 2026 (FWH 26.09)

Posted: Fri Sep 25, 2026 02:12 AM

September 2026

 

  • Fixed: TScrollPanel horizontal scroll (source\classes\scrlpanl.prg). The bGotFocus handler that SetRange() assigns to tab-stop controls called ::ControlIntoView() after a horizontal scroll, pulling the panel back to the focused control. It already skipped this after a vertical scroll; it now skips it after a horizontal scroll too (lHScrolled). No changes required in user code.

 

  • Fixed: IsWindows10() now reads the build number, the same way IsWindows11() does, instead of the registry product name, which says "Windows Server" on server editions: IsWindows10() wrongly returned .F. on Windows Server 2016/2019/2022.

 

  • More tests: the fwunit console suite also covers the credential cipher Encrypt()/Decrypt() (source\internal\encript.c, used by FWMaria connections and FiveDBU) with fixed vectors that pin the algorithm, and the MAPI address-fill toggle SetMapiAddrFill(). The build check now runs the console test suites (fwunit and the offline FWMariaConnection tests) on more build variants, not only on the 32-bit MSVC one.

 

  • Fixed: samples\misc\UTestmnu.prg started with a UTF-8 byte-order mark that the xHarbour compiler rejects (error E0016 at line 1). The BOM is gone; the file stays UTF-8 and builds with Harbour and xHarbour again.

 

  • New: samples\menus\vistamenu.prg, a minimal TVistaMenu example (lateral menu with three items): this class had no sample to build. It joins the build-check sample set, built per variant with samples\build_new.bat: database\fivedbu, fwmaria_ut.prg, test\testmail.prg, web\webview.prg, RemoteView\testrv.prg, database\fivedburv.prg, misc\UTestmnu.prg and menus\vistamenu.prg. For runtime checks, samples\test\fwunit\run_all.bat builds and runs the console test suites, and samples\run_fwmaria_ut.bat offline runs the FWMariaConnection tests with no server.

 

  • Fixed: xHarbour + BCC 64 (xb64). Fivexh64.a was missing everything in source\function\harbour.prg: ASend(), OSend(), OClone(), ParamCount(), GetLocal(), MemUsed(), nStatics(), OleInvoke(), hb_oleParam(), hb_extIsNil() and more, so xHarbour 64-bit apps failed to link with errors like "Unresolved external 'HB_FUN_ASEND'". TVistaMenu (source\classes\vistamnu.prg) was missing from it too. Both now compile with BCC 64, and mfwh_new.bat xb64 now lists any source that fails to compile and stops, instead of leaving it out of Fivexh64.a without a word.

 

  • Fixed: FiveWin libs build again with MinGW 32 (source\internal\remoteview\capture.c defines SM_CXPADDEDBORDER when the SDK headers lack it), and FWMariaDB apps link with xHarbour + MSVC 32 (source\internal\fwmaria.prg uses its own nxs_crypt there, since the xHarbour MSVC lib exports it with C++ linkage: "unresolved _nxs_crypt", plus a local Adler-32 because xHarbour has no hb_adler32()).

 

  • Fixed: MAPISendMail() / DEFINE MAIL when TO is given with a single parameter (TO cEmail): the 26.07 fallback copied the bare display name into lpszAddress (no type prefix), which made Outlook build a one-off recipient and Exchange Online never deliver the attachment ("attachment never downloads, try again later"). mapi.c now fills with the typed form SMTP:user@domain and only when the name contains '@' (looks like an e-mail); the bare name is left alone otherwise. New optional SetMapiAddrFill( .F. ) restores the pre-26.07 behaviour of leaving lpszAddress empty for the client to resolve (also disables the typed fill). Dual form TO cName, cAddress is unchanged. Self-registers in Harbour dynsym so hb_IsFunction( "SETMAPIADDRFILL" ) detects it.
    Verified with spy mapi32.dll (samples\test\testmapiaddr\):

    CaseResult
    single[SMTP:someone@example.com]
    dual[someone@example.com] untouched
    SetMapiAddrFill(.F.)address=<NULL>

    Thanks for the detailed report.

 

  • Enhanced: TWebView2 (source\classes\twebview2.prg, source\internal\twebview\cwebview.cpp, source\winapi\webview2.c, include\WebView2.ch) grows from 10 to 40+ natives.
  • New methods: NavigateEx( cUrl, cMethod, cHeaders, cBody ) (native POST), GoBack/GoForward/Reload/Stop, CanGoBack/CanGoForward, GetSource, GetDocumentTitle, GetBrowserVersion, Print, SetZoomFactor/GetZoomFactor, SetDefaultScriptDialogs, SetDefaultContextMenus/SetContextMenuExclude, CapturePreview (async PNG) / PrintToPdf (async PDF), Add/RemoveWebResourceRequestedFilter (block with .T.), ClearSession/ClearBrowsingData, EnableConsole (console.* interception), CloseWebView, Reinitialize, SetSizeRatio, Diag/Reregister diagnostics.
  • New bOn* events: NavigationStarting (cancelable), SourceChanged, HistoryChanged, DocumentTitleChanged, NewWindow, Permission (allow/deny), FullScreen, ProcessFailed, FrameNavStarting/Completed, Console.
  • Fixed End() registry leak. Default user data folder %LOCALAPPDATA%\FWH_webview2_UserData. New sample samples\webview2\ (external pulse.html, unattended AUTO mode). Fully backward compatible.
  • Known limits: AddHostObject() needs IDispatch; per-item menu filtering and full-profile wipe need a newer WebView2 SDK.

 

  • Enhanced: TProlog C core in source\function\prolog.c (trail + owned term heap). TProlog.prg is the Harbour facade (PL_New / PL_Consult / PL_Query / PL_Queens). Same 11/11 examples. hb32 vs the previous Harbour interpreter:

    BenchmarkPrevious interpreterC coreSpeedup
    8-queens all 92 sols10.77 s0.047 s~230x
    sudoku 4x40.99 s~0.01 s

    Rebuild FiveHC.lib and FiveH.lib.

 

  • New: class TProlog (source\classes\tprolog.prg) - Prolog engine embedded in Harbour/FiveWin. Facts + rules with backtracking, unification (optional occurs-check), cut (!), negation (not/\+), findall/3, arithmetics (is/2, =:=/2, =\=/2, </2 ...) and fast native list builtins (member, append, length, select, permutation, numlist, alldiff, sort, between, functor, arg, copy_term, =..) aimed at the hard problems: SolveNQueens(), zebra/Einstein, Sudoku, graph paths with cycle control. Query() returns an array of hashes { VarName => "term" }.
    Samples: samples\ai\tprolog.prg (demo) and samples\ai\tprologbench.prg (baseline). hb32 baseline, two clocks (GetTickCount / Seconds):

    BenchmarkTime
    8-queens first0.58 s (3129 steps, ~184 us/step)
    8-queens all 92 sols10.77 s
    zebra0.13-0.16 s
    sudoku 4x40.99 s

    Rebuild libs with mfwh_new.bat <variant>.

 

  • Fixed: TProlog plRootsUser treated aRestChain goal lists as variable ids, crashing SolveNQueens (HB_HHASKEY with an array key).

 

  • Fixed: TProlog bench SEND+MORE loads samples\prolog\money.pl (embedded "//" and "=\=" in .prg strings broke Consult). Demo QueryOne() no longer indexes a NIL hash.

 

  • New: sample samples\ai\plpad.prg — paste or open a .pl, Consult with TProlog, Query/QueryOne. Default source is Jung's synchronicity concept graph (CRLF-formatted). Consult uses TMultiGet:cText (Assign() does not exist on memo GETs).

 

  • Enhanced: samples\ai\plpad.prg - TWindow + TScintilla (Prolog highlighting), TWebView2/three.js graph of node()/edge() with click-to-select both ways, vertical splitter and resize. samples\ai\plpad_graph.html. File is CP1252.

 

  • Enhanced: samples\ai\plpad.prg - click on edge()/labeled_edge() highlights the 3D edge (and vice versa). Query is an editable combobox with the usual graph queries.

 

  • Enhanced: samples\ai\plpad.prg - Explicar button (TOpenCode) describes the query: problem, meaning and solution. File is CP1252, not UTF-8.

 

  • Fixed: class TOpenCode (source\classes\topencode.prg) talks to Zen again: x-opencode-session: public header (was MissingSessionID), live free-model catalog (ling-3.0-flash-fin-free default; dead x-preview/hy3/laguna ids removed), nHttpCode fallback via return value, success on parsed choices.
    Verified: Send()+GetValue() returns "4" (samples\ai\test_oc_class.prg). Rebuild FiveH.lib.

August 2026

 

  • Fixed: TGraph compiles with xHarbour 0.82 again (source\classes\tgraph.prg). Replaced Harbour-only constructs with portable ones: TRY/CATCH/END -> BEGIN SEQUENCE/RECOVER/END SEQUENCE, STATIC array initializer with RGB() calls -> runtime init under __XHARBOUR__ (GraphInitColors()), and the <|hDC|... multi-statement block with RETURN in Save2Bmp() -> {|hDC|...} helper (GraphPaintToDC()). Harbour path unchanged.

 

  • New: TGraph auto-refresh (source\classes\tgraph.prg). New lAutoRefresh DATA (.T. by default): any data change through AddSerie, SetYVals, SelSerie, SelPeriod, aTable, ResizeSerie, SetValue, SetSerieValues, SetData, SetXYValue, SetXYData, DelSerie or ClearSeries repaints the chart automatically via DoRefresh(). Group batch updates with BeginUpdate() ... EndUpdate() for a single repaint at the end, or set lAutoRefresh := .F. and refresh manually with Update()/DoRefresh().
    Note: direct assignments to ::aData / ::aSeries cannot be intercepted — use the Set*() methods or call Refresh() afterwards. New sample: samples\graphics\graphkpi.prg — two TXBrowse controls (contexts + prompts, call CreateFromCode() on code-created browses) with KPI columns and footer totals, a docked buttonbar on top, a statusbar showing the selected KPIs, and a splitter-resizable TGraph that follows navigation and metric changes without rebuilding the control.
    Docs: en/es/pt ui/tgraph.html.

 

  • Enhanced: xHarbour compat shims in include\fwhxhb.h (hb_parldef with default, hb_retclen_buffer) and sample build banners bumped to 26.08; all compiler-variant libs rebuilt.

 

  • New: TXBrowse cell chart type "GAUGE" (TXBrwColumn:DrawChartInRect, source\classes\xbrowse.prg). Additive mode meant for a cell with a single numeric value, where the classic "BAR" rendering (several side-by-side series) looks like a solid block filling the whole cell. GAUGE draws a thin CLR_HGRAY track with 4px side padding centered vertically (30% insets top/bottom), a proportional fill bar in the series color and a "NN.N%" label painted over it with transparent background. The scale is oCol:nChartMaxVal, automatically raised to the greatest value found. Usage:
    oCol:aChartCols   := { {|| nPct } }
    oCol:cChartType   := "GAUGE"
    oCol:aChartColors := { CLR_HBLUE }
    "LINE" and "BAR" renderings are unchanged.
    Docs: en/es/pt ui/txbrowse.html#cell-charts.

 

  • New sample: samples\ui\xbrowse\brwfooter.prg + .rc — 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 the numeric columns, load the data with SetArray( aData, .T. ) BEFORE configuring the columns (SetArray with .T. regenerates aCols) and call MakeTotals(). Two pitfalls 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. Numeric cell + footer formatting: do NOT set bStrData on numeric array columns. The default bStrData (ArrCell) applies oCol:cEditPicture to data cells; a custom bStrData returning the raw number is shown with plain Str() and the picture is ignored. Totals are unaffected either way because MakeTotals() reads the raw value via bEditValue (::Value), not via bStrData. Use cEditPicture for the cells, cFooterPicture for the footer total (it drops the ".00") and nFootStrAlign to right align it (default is left):
    oCol:cEditPicture   := "999,999,999"
    oCol:cFooterPicture := "999,999,999"
    oCol:nFootStrAlign  := AL_RIGHT

 

  • Enhanced: FW_SetDarkMode() now themes plain TWindow apps too, not only TDialog. New TWindow:SetDarkMode() (source\classes\window.prg) cascades the theme to all controls and to the buttonbar (TBar:SetDarkMode), and TWindow:Activate() auto-applies the global dark mode to new windows via FW_WndDarkMode() (source\classes\dialog.prg), mirroring TDialog:Initiate.
    Sample: samples\ai\opencode3.prg (3 TOpenCode agents talking, MT).

 

  • Fixed: STATIC declaration follows executable statement error in FIVEWIN.CH — moved static aFwStack/_fwhtmp_ declarations to the top of the header (before any preprocessor-generated code).

 

  • Fixed: xHarbour Commercial link errors with FWH 26.08: "Unresolved external _HB_FUN_FW_PALBMPREGISTER / _HB_FUN_FW_PALBMPUNREGISTER (referenced from Fivehmx.lib bitmap.obj) and _HB_FUN_WEBVIEW2_SETBACKGROUNDCOLOR (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, both already referenced by the PRG lib. Fivehcm.lib has been rebuilt with makes\build_fivehcm.ps1. Two build bugs that had been blocking that rebuild are fixed too: include\xhbcompat.h used HB_EXTERN_BEGIN / HB_EXTERN_END and "long long" although it is force-included (-FI) before hbapi.h, which VC98 (C89) rejects — now plain extern "C" guards and HB_LONGLONG; and source\internal\twebview\cwebview.cpp used INVALID_FILE_ATTRIBUTES, undefined in the VC98 SDK — now guarded with #ifndef.
    Verified: makes\xhb_commercial\go.bat compiles and links test.exe with 0 unresolved externals.
    Docs: en/es/pt getting-started/whatsnew-26.08.html#xhb-commercial-link.

 

  • New: Class TOpenCode — free AI models via the OpenCode Zen API (https://opencode.ai/zen/v1/chat/completions). No API key: Authorization Bearer public. Models: hy3-free, mimo-v2.5-free, deepseek-v4-flash-free, nemotron-3-ultra-free, nemotron-3.5-lightning-free, laguna-s-2.1-free. Send / SendWithSystem (sync) and SendAsync / SendWithSystemAsync (hb_threadStart, requires MT VM). Rate-limit fallback to another free model. Concurrent SendAsync uses unique temp names and write-to-.part + rename so IsRunning() never reads a partial file.
    Samples: samples\ai\opencode1.prg (3 agents in parallel), samples\ai\opencode2.prg + opencode2.html (TWebView2 WhatsApp-style project agents: list left, chat right, add/edit roles). Build:
    build_new.bat opencode1 hb32 mt
    build_new.bat opencode2 hb32 mt
    (mt required: hbvmmt). Run from samples\ai so libcurl.dll is found.
    Source: source\classes\topencode.prg (also in fwh.hbp and makes\hb_bcc64\prg_list.txt).
    Docs: en/es/pt getting-started/whatsnew-26.08.html#topencode, internet/topencode.html, samples-guide.html.

 

  • New: opencode2 — project agent teams that talk to each other; static libcurl build workspace in 3rdparty\.
  • TOpenCode transport is now hbcurl with a static libcurl (Schannel), 90 s timeouts: no libcurl.dll to ship. (WinHTTP COM killed MT apps on the second POST; curl does not.)
  • samples\ai\opencode2.prg: "New team" analyzes the activity and designs a specialized team (leader level 1 + reports/leads hierarchy). Agents consult each other with [[ASK:Name]]...[[/ASK]] tags and run a greet -> topic -> talk rounds -> proposal protocol. Retry backoff with cooldown and UI waitstat; adaptive fallback (last good model first, 3 retries); when the Zen free chain is exhausted it falls back to a local model via Ollama (ollama:<model> at 127.0.0.1:11434, OpenAI-compatible endpoint). In-flight sends are persisted to opencode2.json on every launch / retry and resumed on the next start (ResumePending): nothing is lost. Domain knowledge (oc2_knowledge.txt): CFO authorizes POs with its CMF (CMI is strategic) and seeks financing (other people's money); ISO 9001 + ISO 28000 with per-company process maps; business roles validate and certify in SANDBOX; normalized job titles (never "Jefe").
  • 3rdparty\: curl sources (curl.tgz, curl-src\) and the batch scripts (bld32/bld_bcc/bld_msvc, cfg32/cfg64, tlib_*, smoke_*) that build lib\libcurl_static*.{lib,a} for bcc32/bcc64/msvc32/msvc64/gcc. Build outputs (curl-build-*) are git-ignored.

 

  • Fixed: FWH64 (Harbour/xHarbour + BCC64) Five64.a / Fivexh64.a did not contain TC5ImgList, TVMenu or TVItem. They were in fwh.hbp (32-bit and MSVC64) since June 20 but never added to makes/hb_bcc64/prg_list.txt. VMenu on FWH64 therefore failed with "Class TC5ImgList not found" while 32-bit was fine.
    Workaround for June/July FWH64: compile source\classes\tc5imglst.prg into the app (or upgrade).
    Verified: samples\test\vmenu_test.prg builds and runs with hb64 (TC5ImgList pulled from Five64.a).
    Build: build_new.bat vmenu_test hb64.
    Docs: en/es/pt getting-started/whatsnew-26.08.html#fwh64-tc5imglst, reference/tvmenu.html.

 

  • Fixed: TXBrowse:bLClicked ran before the row change (April 2026 double-fire fix), so oBrw:BookMark was still the previous record. Check columns that assign nSelectedRow := oBrw:BookMark in bLClicked therefore checked the old current row instead of the clicked one. bLClicked is now evaluated once AFTER Skip()/BookMark update, still niled around Super:LButtonDown so it does not fire twice.
    Sample: samples\system\xbrwin7c.prg.
    Auto-test: xbrchkbm.prg.
    Docs: en/es/pt getting-started/whatsnew-26.08.html#xbrowse-blclicked, ui/txbrowse.html#blclicked.

 

  • Enhanced: samples\test\testblur.prg — load BMP/JPG/JPEG/PNG (not BMP-only). Uses FW_ReadImage() with FreeImage/GDI+ fallbacks; DEFINE DIALOG + TRUEPIXEL so the image and horizontal blur slider (0–100) stay visible.
    Optional CLI: testblur.exe path\to\image.jpg.
    Build: build_new.bat testblur hb32.
    Docs: en/es/pt getting-started/whatsnew-26.08.html#testblur, samples-guide.html.

 

  • Enhanced: samples\test\testblur.prg — uses FWH library Blur() (ribbon.c) instead of a duplicate embedded C #pragma BEGINDUMP. Sample is pure PRG: loads the image, shows the slider, calls Blur( hBmp, nRadius ) from the linked FiveHC / FiveC libs (Win32 hb_retnl / Win64 hb_retnll). Same UI as day 11 (JPG/PNG + TRUEPIXEL dialog).
    Build: build_new.bat testblur hb32.
    Docs: en/es/pt getting-started/whatsnew-26.08.html#testblur, samples-guide.html.

 

  • Fixed: samples\misc\dshow.prg — 64-bit Harbour crash (ACCESS_VIOLATION) on Connect. Embedded C (#pragma BEGINDUMP) now includes hbapiitm.h so hb_itemArrayNew / hb_itemReturnRelease / hb_itemRelease have correct pointer prototypes; without them, MSVC/BCC64 treated the return as int and truncated PHB_ITEM on x64 inside MfCamStatus().
    Verified: build_new.bat dshow hb64 / hm64 (preview OK).
    Docs: en/es/pt getting-started/whatsnew-26.07.html#dshow-webcam, en/getting-started/samples-guide.html.

 

  • New: samples\tgauge — TDashGauge semicircular dashboard gauge control. Custom TControl subclass with double-buffered GDI rendering (thick arcs, prediction needle, center dot). Interactive mouse: left-drag moves the active zone, right-click cycles zones (Goal/Actual/Prediction), mouse wheel adjusts value by 1% per notch.
    Build: build_new.bat tgauge hb32.

 

  • New: samples\emoji - Color Emoji test suite demonstrating Direct2D-rendered Unicode emoji in FWH controls: menus, toolbar buttons (TBtnBmp), BITMAP controls on different backgrounds (gray/white/red), and popup menus. Renders emoji at 16/24/32/48/64/128px using Segoe UI Emoji via Direct2D + DirectWrite + WIC.
    Build: build_emoji.bat (hm64).

 

  • Fixed: source\winapi\dibbmp.c - isalphabmp() now falls back to calculating biSizeImage manually when the driver returns 0, preventing the alpha-channel detection loop from being skipped on some bitmap formats.

 

  • Enhanced: TWebView2 — new SetBackGroundColor( nRgb ) method to set the initial background color before HTML content loads, eliminating the white flash. Uses ICoreWebView2Controller2::put_DefaultBackgroundColor under the hood. Pass any RGB() value:
    oWebView:SetBackGroundColor( RGB( 240, 240, 240 ) )
    Docs: en/internet/twebview2.html.

 

  • Enhanced: .claude/skills/edit-strings — new agent skill to edit source\function\strings.prg always preserving CP1252 encoding. Documents why CP1252 is required (Harbour expects single-byte accented chars), provides PowerShell helper for full rewrites, and verification steps.

 

  • Fixed: source\function\strings.prg — reorganized translation strings, preserved CP1252 encoding (no UTF-8 BOM, accented chars as single bytes).

 

  • Fixed: source\classes\folder.prg, tfoldex.prg — page changes now evaluate the pending VALID of the control with focus on the current page (TFolder and TFolderEx). Previously, clicking another tab (or pressing Ctrl+Tab) hid the current page before the active control lost focus, so its VALID was never evaluated and the variable kept the new value anyway. Now SetOption() calls the focused control's lValid() first; if it returns .F. the page change is cancelled and focus stays on the control. This covers tab clicks, Ctrl+Tab and Alt+hotkey navigation.
    Docs: en/es/pt ui/tfolder.html, ui/tfolderex.html.

 

  • Enhanced: samples\misc\dshow.prg — TWebCam-style API on Media Foundation. New TMfWebCam class (named to avoid clashing with TWebcam in the FWH libs): Connect()/Disconnect(), Clipboard( oBmp ), Save( oBmp, cFile, nQuality ) (BMP direct, JPG/PNG/GIF/TIF via GDI+), Source( nProperty, nValue, lAuto ) (brightness, contrast, exposure, white balance, zoom, pan, tilt, focus, gain, backlight compensation via IAMVideoProcAmp / IAMCameraControl), Format() (enumerates/selects camera resolutions), GetStatus() and Resize( nW, nH, lSetFormat ). Still self-contained: MF/COM resolved at runtime (ole32, mfplat, mf, mfreadwrite), no mfcam.dll or MF SDK needed.
    Build: build_new.bat dshow hb64 / hm64 / xb32 / xhbc.

 

  • Enhanced: samples\DesktopWeb — form designer input types + HTTP port 2222. Grid columns support control types text, money, select (combobox), checklist and checkbox; options configured in the designer. Default HTTP port 2222, configurable via admin Edit app (restart to apply).

 

  • Enhanced: samples\DesktopWeb — docked windows use painel-web aesthetics. Appointments, balance and meta screens share the floating-panel look: blue title bar, multi-layer shadow, footer with record count and icon buttons (same layout as Cadastro / painel-web).
    Build: samples\DesktopWeb\build.bat.

Continue the discussion