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, 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, tweet me @NoLongerSet or email me at mike at nolongerset dot com.
Here are some links to get involved with the project:
- Custom twinBASIC IDE Installation Guide (NOTE: the twinBASIC VSCode extension is under a feature freeze until 2023)
- GitHub Issue Tracker (report bugs)
- twinBASIC Discord Server (chat about the project)
- twinBASIC/VBx LinkedIn Group
Here's Wayne's announcement:
Today I bring you news that may not be entirely unexpected: we have updated the roadmap.
All planned work has been extended by six months, in order to accommodate the efforts for our v1 release. Each day brings us one step closer to our goal, and this extra period will allow us to tie up all the loose ends and apply that final layer of polish.
Although the delay is frustrating, I hope you can all recognize the substantial strides we're making. For example, we've just implemented support for control arrays (including runtime loading/unloading of controls), and we're on the cusp of delivering MDI form support. These are significant achievements that will aid the migration of more VB6 projects to twinBASIC.
Thank you for your understanding and patience, and I look forward to delivering a well-rounded and high-quality v1 release in the not too distant future.
The new tentative release date for version 1 is now January 3, 2024.
If you've been following the project closely, this should come as no surprise. It's not so much that progress has been slow, as much as the challenge is immense.
As the "known memory leaks" issue has remained unresolved, it's clear that that issue in particular is a particularly thorny one that will likely require a significant amount of effort to resolve. And, in my opinion, is something that needs to be resolved prior to an official v1 release.
That said, Wayne has demonstrated over the past two and a half years both the technical ability and resolve to see this project through. Progress continues apace, but the mountain seems to grow as you approach its peak.
Control Enhancements - Runtime Property Changes
In the past week, there's been a flurry of activity specifically around adding support for runtime changes to certain control properties that could only be set at design time in VB6:
- TextBox MultiLine
- TextBox HideSelection
- TextBox ScrollBars
- ComboBox/ListBox Style
- ComboBox/ListBox Sorted
- ComboBox/ListBox/DirListBox/FileListBox/DriveListBox IntegralHeight
- ListBox/FileListBox MultiSelect
ControlArray Support for Load and Unload
Unloadstatements now support control arrays, allowing for loading controls at runtime, as of BETA 326.
This is not a feature we've ever had in VBA, but the VB6 crowd sure seems excited:
Around the Web
Would You Buy twinBASIC?
Interesting thread at VBForums where posters are looking into whether twinBASIC is worth betting on financially.
The biggest concerns (even among ardent supporters) are understandably around the fact that the project is closed-source and basically a one-man project. However, I'm not sure another business model would work–at least not for a project that aims for 100% backward compatibility with VB6. You need look no further than the pile of abandoned projects that have shared some similar goals.
I think this excerpt from fafalone's comment sums up the thread–and my own personal views–pretty well:
I like that there's a future for the VB6 language now, even if it's not 100% perfect regarding my preferences for being FOSS and backed by a single developer. There's reasons I'm sure we're all familiar with regarding the scale and complexity of a fully compatible successor that nobody has done it up until now, and it's very unlikely anyone else ever will if tB were to fail.
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
WARNING: The following issue is present in BETA builds 202 - 329 (the latest build as of publication):
- there are known memory leaks in these versions, so memory usage will be higher than normal
- fixed: non-latin locale symbol issue in importing from VBP [ https://github.com//issues/1507 ]
- added: initial support for Load/Unload of control arrays (built-in controls only for now) [ https://github.com//issues/1436 ]
- improved: CommandButton/CheckBox/OptionButton Style property can now be changed at runtime (enhancement over VB6)
- improved: TextBox MultiLine can now be changed at runtime (enhancement over VB6)
- improved: TextBox HideSelection can now be changed at runtime (enhancement over VB6)
- improved: TextBox ScrollBars can now be changed at runtime (enhancement over VB6)
- fixed: lightweight controls added at runtime via control arrays were incorrectly starting with Visible = True [ sokinkeso, discord ]
- fixed: (WinNativeCommonCtrls) UpDown.Orientation property-let changes not effective at runtime
- fixed: (WinNativeCommonCtrls) MonthView.MultiSelect property-let changes not effective at runtime
- fixed: error descriptions were not correct for errors relating to
Unloadof control array elements
- fixed: CommandButton/CheckBox/OptionButton Picture/DownPicture/DisabledPicture properties now support property-let to match VBx
- fixed: CommandButton/CheckBox/OptionButton Picture/DownPicture/DisabledPicture property changes were not effective until next painted
- partially fixed: some control properties were not being copied over to new control array elements added at runtime [ sokinkeso, discord ]
- fixed: Frame ClipControls property can now be changed at runtime, as per VB6
- improved: FileListBox MultiSelect property can now be changed at runtime (enhancement over VB6)
- improved: ComboBox Style property can now be changed at runtime (enhancement over VB6)
- improved: ComboBox Sorted property can now be changed at runtime (enhancement over VB6)
- improved: ComboBox IntegralHeight property can now be changed at runtime (enhancement over VB6)
- improved: ListBox Sorted property can now be changed at runtime (enhancement over VB6)
- improved: ListBox MultiSelect property can now be changed at runtime (enhancement over VB6)
- improved: ListBox Style property can now be changed at runtime (enhancement over VB6)
- improved: ListBox IntegralHeight property can now be changed at runtime (enhancement over VB6)
- fixed: internal ComboBox list HWND subclassing was causing some ComboBox positional issues
- fixed: ListBox Height (and a few similar controls) were not set correctly in control array elements created at runtime
- added: DirListBox.IntegralHeight property (enhancement over VB6)
- added: FileListBox.IntegralHeight property (enhancement over VB6)
- added: DriveListBox.IntegralHeight property (enhancement over VB6)