twinBASIC Update: July 7, 2025

On April 23, 2021, I helped Wayne Phillips introduce the world to twinBASIC at the Access DevCon Vienna conference. I boldly predicted that twinBASIC (along with the Monaco editor) would replace VBA and its outdated development environment by 2025. With that goal in mind, this weekly update is my attempt to keep the project fresh in the minds of the VBA development community.

Every Sunday Monday week, I will be providing updates on the status of the project, linking to new articles discussing twinBASIC, and generally trying to increase engagement with the project. If you come across items that should be included here, please leave a comment below.

Here are some links to get involved with the project:


Highlights

Code Editor Options More Accessible

Per Wayne in Discord:

BETA 829 makes many of the code editor options more accessible:

A picture is worth a thousand words.

Discord Chat Summary

*Auto-generated via Claude-Sonnet-4

Overview

The week brought significant IDE improvements with BETA 829's enhanced code editor options and a notable business update from Wayne Phillips regarding v1 release timing. Community engagement remained high with productive discussions around database integration, form design challenges, and control transparency solutions. Several members celebrated major project milestones, including XYplorer's progression to beta status.

IDE & Development Enhancements

  • BETA 829 introduced more accessible code editor options with improved configuration interface
  • BETA 838 fixed label tooltip regression where tooltips would briefly appear then disappear immediately
  • Find/Replace dialog received attention for scope-switching bugs causing IDE internal errors
  • Form designer improvements included discussion of Ctrl+Arrow key movement functionality from VB6
  • New runtime function added to retrieve twinBASIC compiler version for "About" dialogs

Language & Runtime Features

  • SavePicture function compatibility confirmed working identically to VB6, with project naming conflicts identified as common cause of errors
  • Unicode support in labels demonstrated working effectively for symbols and international text
  • Dim As Any type inference clarified as requiring inline initialization syntax
  • Modal form display with parent relationships explained using Form2.Show vbModal, Form1 syntax
  • Property Let/Get patterns demonstrated for inter-form communication

Database Integration Progress

  • Extensive troubleshooting of ADODB integration revealed importance of strong typing over late-bound Object declarations
  • Automation errors resolved by switching from Dim rs As Object to Dim rs As ADODB.Recordset
  • Community member developed modular database functions mimicking Excel formula patterns like COUNTIF()
  • ADO reference requirement clarified as standard Windows component with no deployment dependencies

Community Milestones

  • XYplorer 64-bit edition advanced from alpha to beta status, representing major commercial twinBASIC success
  • Discussion of open-source philosophy highlighted community knowledge-sharing values
  • New members received comprehensive support for VB6-to-twinBASIC migration questions

Conclusion

The week demonstrated twinBASIC's growing maturity with both technical improvements and real-world deployment success. Wayne Phillips' upcoming v1 statement within 7 days signals important project developments ahead. The community's collaborative approach to solving complex database integration and UI transparency challenges showcases the platform's capability for sophisticated application development. Strong momentum continues toward the v1 milestone with active bug fixing and feature refinement.

Around the Web

tB-Powered 64-bit XYplorer Goes to BETA

Big news in the commercial space for twinBASIC from Don Lessau, creator of XYplorer, a high-performance alternative file manager originally written in VB6. Here's what he posted in the twinBASIC general Discord channel:

Just wanted to let you all know that the twinBASIC-made 64-bit XYplorer edition has moved from the alpha lab to the beta stage today. That's one step before going official.
Here’s the new BETA (64-bit) - XYplorer Beta Club

Windowed vs. Windowless Controls

*This recap generated by Claude-Sonnet-4 via Poe.com.

The twinBASIC community now has clear documentation about windowless versus windowed controls.

After a developer asked in the #docs Discord channel about CheckMark controls and their windowless behavior, community member GrandPaM created a comprehensive wiki page explaining the differences. The conversation revealed some confusion about why certain controls behave differently—particularly why some can't appear above others and how to handle mixed-control scenarios like printing forms. The discussion also touched on whether new enhancements could be added to windowless controls.

This documentation helps clarify a topic that can trip up developers working with twinBASIC's control architecture.

The wiki page explains that windowless controls draw directly on their container without needing window handles, making them faster and more visually flexible. However, they require manual input handling, can't layer above windowed controls, and need explicit accessibility support. Windowed controls use more resources but provide automatic input handling and proper layering behavior.

The guide gives developers the information they need to make informed decisions about which control type fits their specific use cases.

Using Cairo in twinBASIC

fafalone posted the following proof of concept in the Discord show-and-tell channel:

Cairo is a cross-platform 2D graphics library used by the popular vbRichClient DLL. To use it without that wrapper so it's not closed source and unavailable for 64bit, here's just a small snippet I made for our friend SDO:

With cairo.dll from e.g. https://github.com/preshing/cairo-windows/releases/tag/with-tee in with your .twinproj/exe and a PictureBox with AutoRedraw = True
[SetDllDirectory(True)]
Private Declare PtrSafe Function cairo_win32_surface_create CDecl Lib "cairo.dll" (ByVal hDC As LongPtr) As LongPtr
Private Declare PtrSafe Function cairo_create CDecl Lib "cairo.dll" (ByVal target As LongPtr) As LongPtr
Private Declare PtrSafe Sub cairo_set_source_rgb CDecl Lib "cairo.dll" (ByVal cr As LongPtr, ByVal red As Double, ByVal green As Double, ByVal blue As Double)
Private Declare PtrSafe Sub cairo_rectangle CDecl Lib "cairo.dll" (ByVal cr As LongPtr, ByVal x As Double, ByVal y As Double, ByVal width As Double, ByVal height As Double)
Private Declare PtrSafe Sub cairo_fill CDecl Lib "cairo.dll" (ByVal cr As LongPtr)
Private Declare PtrSafe Sub cairo_surface_flush CDecl Lib "cairo.dll" (ByVal surface As LongPtr)
Private Declare PtrSafe Sub cairo_destroy CDecl Lib "cairo.dll" (ByVal cr As LongPtr)
Private Declare PtrSafe Sub cairo_surface_destroy CDecl Lib "cairo.dll" (ByVal surface As LongPtr)

Private Sub CairoDrawTestRect(ByVal hDC As LongPtr, w As Double, h As Double)
    Dim surface As LongPtr = cairo_win32_surface_create(hDC)
    Dim cc As LongPtr = cairo_create(surface)
    cairo_set_source_rgb cc, 1.0, 0, 0
    cairo_rectangle(cc, 0, 0, w, h)
    cairo_fill(cc)
    cairo_surface_flush(surface)
    cairo_destroy(cc)
    cairo_surface_destroy(surface)
End Sub

Private Sub Command1_Click() Handles Command1.Click
    CairoDrawTestRect Picture1.hDC, 100, 100
    Picture1.Refresh
End Sub
Release 1.17.2-with-tee · preshing/cairo-windows
Same as previous release, but with Cairo “tee surfaces” enabled.

Color Font Label Control

Posted by fafalone in show-and-tell:

My Color Font Label Control that shows color emojis and does gradient colors and font effects in a limited range is now out!

Features:

• Displays color fonts, most commonly used for color emojis.
• Font effects (bold, italic, underline, strikethru, condense/expand) can be applied only to a specific range.
• Angled text
• Color gradients (linear and radial)
• Locale can be specified
• Several options for word wrap mode
• Set line spacing
• Antialiasing options
• Can act as a drop target for DragDrop from other apps and displays the fancy icons like Explorer.
• Mouse events including MouseWheel
• Normal Label properties like Alignment, RightToLeft, ForeColor/BackColor, etc.
• Comes with OCX version that works in VB6 and Office (both 32bit and 64bit). (OCX can be used in tB as well but the UserControl version from ucColorLabelTest.twinproj is strongly recommended.)

Lots more info and pictures, and of course the test .twinproj, tbcontrol/twin, and twinproj for building OCXs– tested and working in VB6 and VBA64!
GitHub - fafalone/ColorFontLabel: Enhanced Label Control Supporting Color Fonts (i.e. color emojis)
Enhanced Label Control Supporting Color Fonts (i.e. color emojis) - fafalone/ColorFontLabel

EveryDiscord - A native Discord client in VB6 and tB

Posted by newcomer gaouser in show-and-tell:

Recently got it to run on twinBASIC, EveryDiscord is my custom client that runs on Windows 95(with IE) and above.

Has CatBox, Status Indicators in chat and will have FakeNitro built in.

95+ is from the VB6 version though
current tB version is all NT6(Vista and above)

VB6 Successor on Tek-Tips.com

Over on Tek-Tips.com, a user posted the following question:

What is everyone's thoughts on TwinBasic or even RadBasic and their future?

Curious on people's thoughts and opinions.

Only a few responses so far.

Changelog

Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.

Releases · WaynePhillipsEA/twinbasic
Contribute to WaynePhillipsEA/twinbasic development by creating an account on GitHub.

AI-Generated Changelog Summary

* Auto-generated via Claude-Sonnet-4, sorted in order of its opinion of "most impactful changes."

Notable Updates

Enhanced IDE Experience: Added a theme selector to the main toolbar with full themable toolbox icons and improved theme management, plus better discoverability of IDE options through code editor menus

Improved MDI Application Stability: Significantly enhanced stability for MDI (Multiple Document Interface) applications, addressing crashes during form closure and fixing instance creation errors in compiled executables

Better Form Designer Functionality: Fixed form menu ordering issues, improved stability when missing ActiveX controls, and resolved various control behavior problems including Label/Image mouse events and PictureBox focus handling

Enhanced Project Loading: Fixed memory issues that prevented large Win32 projects from loading in version 841, and resolved problems where the IDE would enter safe mode after computer wake-up

Compatibility Improvements: Added support for Windows 2000 compatibility when explicitly targeted, fixed Unicode Common Control notifications option, and improved UserControl stability in various scenarios

Performance Optimizations: Dramatically improved IDE responsiveness when handling thousands of compilation errors and enhanced codeLens performance for large projects


WARNING: The following issues are present in BETA builds 623 - 846 (the latest build as of publication):

  • IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected.
  • KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)

BETA 829

BETA 830

  • added: themable properties for all toolbox icons using CSS data URIs, see Dark.theme/Light.theme files [ gaouser, discord ]
  • added: IDE command 'tbThemes_Reload', plus associated menu entry via Window > Themes > Reload from disk [ gaouser, discord ]
  • added: theme selector icon to the main IDE toolbar [ gaouser, discord ]
  • fixed: changing form caption could cause form activate events to fire [ https://github.com/twinbasic/twinbasic/issues/2148 ]
  • improved: 'Failed to create class instance' error in compiled files now includes the CLSID for debugging purposes
  • fixed: MDI compiled EXEs could throw 'Failed to create class instance' errors if main MDI form is loaded implicitly from a child [ https://github.com/twinbasic/twinbasic/issues/2148 ]

BETA 831

  • fixed: assignments to array elements with implicit default member property-let pass-thru would throw a compiler error [ Tom, private ]
  • fixed: assignments to class elements without implicit default member property-let pass-thru would throw codegen error, now throw a runtime error to match VBx, plus a warning [ Tom, private ]
  • fixed: LBound/UBound on a class type should be a compilation error [ Tom, private ]

BETA 832

  • improved: added compatibility option 'Use Unicode Common Control Notifications' for allowing use of ANSI notifications in WM_NOTIFY subsclassing to match VBx [ fafalone, discord ]

BETA 833

  • fixed: touching a child control property inside a UserControl_Initialize event could cause the UC to be put in a bad state, not firing some events [ gaouser, discord ]
  • fixed: Form.DrawMode property was not being changed on the underlying DC, so appeared ineffective with API drawing [ Don, discord ]

BETA 834

BETA 835

  • fixed: form menu designer sometimes shows the root menus in reverse order [ https://github.com/twinbasic/twinbasic/issues/2129 ]
  • fixed: form designer instability when there are missing ActiveX controls [ PickledPokkel, discord ]
  • fixed: if a local twinpack file in %APPDATA% is locked, the IDE no longer faults [ fafalone, discord ]
  • added: 1 language pack (Turkish)
  • special thanks to our community members for the new/updated language packs (geouser)

BETA 836

  • fixed: IDE not opening on some machines since BETA 814 [ KarlSevenSeven, discord ]

BETA 837

  • added: IDE setting 'Auto refresh Explorer icon cache after build' (default TRUE) [ gaouser, discord ]
  • fixed: IDE now explicitly sets the current directory of the debug session to the twinproj folder location when loading the project [ https://github.com/twinbasic/twinbasic/issues/2184#issuecomment-3031406118 ]
  • fixed: further tweaks to UserControl WM_WINDOWPOSCHANGING implementation to better handle MSACCESS quirks [ Tecman, discord ]

BETA 838

  • fixed: (regression) ToolTipText property on windowless controls not working properly [ Don, discord ]
  • fixed: clicking on a Label or Image control inside of a container (e.g. PictureBox) should not focus the container [ Don, discord ]

BETA 839

  • fixed: broken Image/Label mouse events in last BETA [ Don, private ]

BETA 840

  • fixed: PictureBox middle/right mouse buttons should accept focus [ XYplorer, discord ]
  • fixed: Cancel/Default escape/enter key handling could cause a crash at runtime in some scenarios [ XYplorer, discord ]

BETA 841

  • improved: much faster internal recording of compilation errors, preventing IDE unresponsiveness when there are thousands of errors [ Emile, discord ]
  • improved: codeLens feature can cause an IDE performance hit when there are hundreds/thousands of them [ fafalone, discord ]

BETA 842

BETA 843

  • fixed: SaveSetting / DeleteSetting standard library functions were using non-WindowsXP compatible APIs [ gaouser, discord ]

BETA 844

  • fixed: removed use of some Win2k incompatible APIs, to allow built executables to run on Win2k machines (must explicitly target OS in project settings)

BETA 845

  • improved: Label.VerticalAlignment property now appears next to Alignment property in the property sheet
  • added: Compilation.CompilerVersion constant, indicating the release number (e.g. currently 845) [ Don, discord ]

BETA 846

  • fixed: issue with PROJECT EXPLORER panel not showing all items after a project is closed and then another project opened
  • fixed: exposing an 'Angle' property on a UserControl would cause several issues in the tB form designer in using that UC [ fafalone, discord ]
  • fixed: computer waking from sleep should no longer trigger the project to enter SAFE MODE [ https://github.com/twinbasic/twinbasic/issues/1951 ]