twinBASIC Update: April 15, 2025

Highlights include a new animated GIF control from fafalone, an autocomplete twinPACK from Krool, and a tB app to clean up VB6 comments from lfeche.

twinBASIC Update: April 15, 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

Animated Gif Control

Time to get meme-ing, tB'ers.

Thanks to fafalone, you can now embed all your favorite animated gifs inside your twinBASIC projects. Here's his post from the show-and-tell channel:

My new Animated Gif Control is now out! While the original ucAniGif was simple, it had a lot of limitations, many of which couldn't be corrected without making it even more complex than this new version. However, this is is still packaged in a UserControl or OCX that's just as simple to use from the outside. I've tested the OCXs it builds in VB6 and VBA64, works great in both, handling all the gifs that tripped up the original.

Should work on Windows XP SP2 and up but I put Windows 7 just to be safe since I didn't check every API

The full project is available on GitHub:

GitHub - fafalone/ucAniGifEx: ucAniGifEx Animated Gif Control
ucAniGifEx Animated Gif Control. Contribute to fafalone/ucAniGifEx development by creating an account on GitHub.

Discord Chat Summary

* Auto-generated via Claude-3.7-Sonnet

Overview

This week in the twinBASIC community focused primarily on UserControl development challenges, package management issues, and API integration questions. Wayne Phillips provided several key clarifications about the platform's architecture and future direction. The community saw active troubleshooting around OCX development and package management, with a notable bug discovery related to language packs.

UserControl Development

  • fafalone encountered issues with persisting BackColor properties in UserControls, where values set in the designer were not being preserved. Wayne clarified that PropertyChanged only flags properties as dirty, and it's up to the host to call the necessary persistence methods.
  • fafalone shared progress on a new animated GIF control, making it available for community testing via GitHub before the official release.

Package Management

  • A user reported being unable to delete or update VBCCR18 and WinDevLib packages, despite attempting to remove them through the UI. Wayne identified this as a bug specific to non-English language packs and provided a workaround involving project export and manual package deletion.
  • Wayne later confirmed finding and addressing the underlying issue, noting that "package removal doesn't work from the References list when using a language pack."

Technical Architecture

  • Wayne provided clarification about VBA's performance architecture, explaining that VBA compiles to p-code rather than native machine code: "The compiled code is architecture-dependent (32-bit is different to 64-bit), but is not native machine code -- the instructions go through a virtual machine, which offers worse performance than real compiled machine code."
  • In response to a question about cross-platform naming conventions, Wayne noted that Windows controls (like FileListBox) will remain Windows-specific, with future cross-platform support offering "different, albeit similar, controls."

API Integration

  • Several users sought help with API declarations, particularly around naming conventions with underscores and the need for proper Alias attributes.
  • Wayne demonstrated the correct syntax for API declarations with underscores, showing that while the underscore prefix works in the declaration name, proper Alias attributes are still required to map to the actual DLL entry points.

Conclusion

This week demonstrated twinBASIC's continued evolution with both new component development and bug fixes. The community remains actively engaged in pushing the platform's capabilities forward, particularly in UserControl development and package management. Wayne's direct involvement in troubleshooting and clarifying technical details highlights the responsive development approach that has become characteristic of the twinBASIC project.

Around the Web

twinBASIC at Access DevCon Vienna

I presented my fifth annual twinBASIC talk at the annual DevCon Vienna virtual conference for Access developers. There were not as many new features to talk about this year as Wayne has been busy pushing through the last 1% of VB6 compatibility bugs, so I only did a half session on twinBASIC (the other half was on AI).

If you weren't able to attend the conference live, you can grab a copy of the slide deck here:

twinBASIC and AI: DevCon 2025
Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.

And get a quick overview of the talk here:

Access DevCon Vienna 2025 - Day Two Recap
Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.

I have not heard yet whether this presentation will be made available to the public. As DevCon Vienna is a paid conference, most recordings are only available to attendees. If the recording does get posted online, I'll be sure to link to it in an upcoming installment of the twinBASIC Update.

VB6 Comment Cleaner Pro

User lfeche posted in the Discord show-and-tell channel:

My first program in twinbasic! 😁

Features ✨

  • 🕹️ Dual Cleaning Modes
    • Mode 1: Remove all comments
    • Mode 2: Remove only commented code (preserves text comments)
  • 📝 Garbage Logs for auditing changes
  • 🛡️ AGPL v3 Licensed - Freedom to use, modify, and share

Check out the GitHub project for more details:

VB6-Comment-Cleaner-Pro/screenshots/demo.jpg at main · aidajulia/VB6-Comment-Cleaner-Pro
VB6 Comment Cleaner Pro. Contribute to aidajulia/VB6-Comment-Cleaner-Pro development by creating an account on GitHub.

AutoComplete twinPACK

Krool posted the following in show-and-tell:

The tB package "AutoCompleteLib" is now available. (Using the IAutoComplete interface)

To use the package, go to Projects > References > Available Packages and search for "AutoComplete":

Head over to the post in Discord to download Krool's demo project to see the new twinPACK in action.

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-3.7-Sonnet, sorted in order of its opinion of "most impactful changes."

  • Fixed graphics rendering issue with the Line method that previously failed to render anything when box/box-fill was specified for a 1x1 rectangle, ensuring proper display of small graphical elements.

  • Improved Variant array handling by fixing a critical issue where ReDim operations weren't properly checking for locks or fixed-size flags before attempting to resize arrays.

  • Enhanced ListBox functionality by adding proper tab stop support for checkbox-style ListBoxes and introducing a new UseTabStops Boolean property (default TRUE) for greater display control.

  • Fixed control-specific issues including proper firing of UserControl Show/Hide events for Windowless controls, correct handling of StdPicture properties in forms, and proper association of toolbar buttons with ImageList icons.

  • Added FileListBox.PathWithBackslash property that returns the path with a consistent trailing backslash, improving path handling reliability.

  • Corrected UI behaviors including fixing Frame control focus issues and ensuring proper control resizing for toolbars and other containers when their parent form is resized.

  • Fixed critical stability issues including PropertyBag crashes when handling empty arrays and access violations in 32-bit builds when using the Stop statement.


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

  • IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected. [Editor's Note: Rolling back to BETA 622 may be necessary if any of the KNOWN ISSUES below affect your project.]
  • KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)
  • there are known memory leaks in these versions, so memory usage will be higher than at the Version 1.0 release

BETA 734

  • fixed: FileListBox.Path property trailing "", and some edge cases [ fafalone, discord ]
  • added: FileListBox.PathWithBackslash property-get for returning Path with a consistent trailing backslash [ fafalone, discord ]
  • improved: project options project.startupObject and project.iconForm dropdown lists are now sorted alphabetically [ Joe Philli, discord ]
  • fixed: Variant-Redim was not checking for locks and/or FADF_FIXEDSIZE before actioning [ https://github.com/twinbasic/twinbasic/issues/1969 ]

BETA 735

  • fixed: (regression) Stop statement would cause 32-bit builds to fail with an access violation in the IDE [ FreedomFalcon12, discord ]
  • fixed: graphics Line method would not render anything if box/box-fill was specified for a 1x1 rect [ https://github.com/twinbasic/twinbasic/issues/1700 ]

BETA 736

  • fixed: package deletion from the twinproj after unselecting a package in the References list would fail if non-English language is set for the IDE [ forliny, discord ]
  • fixed: PropertyBag.ReadProperty could crash if an empty array was stored inside of it upon retrieval [ fafalone, discord ]

BETA 737

  • fixed: UserControl Show and Hide events not firing for Windowless controls [ fafalone, discord ]
  • fixed: typo in some window class names, e.g. ThunderRT6HSrollBar instead of ThunderRT6HScrollBar [ klownboy, xyplorer forum ]
  • fixed: LBS_USETABSTOPS style was missing on ListBox HWNDs [ XYplorer, private ]
  • fixed: DirListBox/DriveListBox/FileListBox were being created with their generic window class names 'ThunderRT6ListBox'/'ThunderRT6ComboBox'
  • fixed: FileListBox was missing LBS_SORT window flag
  • fixed: DriveListBox had CBS_AUTOHSCROLL window flag set, unlike VB6

BETA 738

BETA 739

BETA 740

  • fixed: Frame control no longer allows focus [ XYplorer, private ]

All original code samples by Mike Wolfe are licensed under CC BY 4.0