We are happy to report that a new update of Quartex Pascal is out and available for download. This is quite a monumental build that introduces more infrastructure for non-visual components – and several fixes to issues that showed up with the introduction of datamodules.
What’s new and cool?
Visually there is not much change, but under the hood there has been a plethora of changes. As with all technology there is a buildup phase that culminates in new functionality. We introduced datamodules and non-visual components in the previous release, and in this release we introduce more infrastructure in the RTL and IDE for using that.

Our visual widgets all create and manage a DOM element throughout it’s lifecycle, and thus obtains most of it’s power and features from the DOM. With non-visual components however, there is not always any element to “manage”. This means that things we take for granted, such as delegates, needs to be added. This means creating an instance of JEventTarget manually (which our new TQTXEventComponent does) so that it smoothly interfaces with the rest of the RTL.
This is especially important when it comes to NodeJS where the entire substrata is completely different from the browser. Our RTL makes it much easier to approach that world, and will culminate in drag & drop server and database components (and whatever else people will need).
Changelog for the IDE & Backend
- Adaptation of codebase to be more compatible with Freepascal, so far we have made internal changes to around 100 units and created our own component packages as “middleware” to ensure behavior is identical when building with Delphi or Lazarus.
- Implemented utilities and configuration for automatic deployment and incremental updates on the server. Our build server now builds the QT framework from source (C/C++) including our own webview wrapper (which Lazarus for some reason dont have).
- Added timestamp and delta columns to log entries for easier profiling on ARM
- Added several Wayland fixes to the Linux aspect of our codebase
- Major improvements to the compiler we use for code-suggestion, avoid recompiling if we have an AST in the cache, and no real changes has been made to the in-memory model
- Fixed errors that appeared when compiling the latest code under Delphi, this affected the AST provider sub-structure and form designer units
- Fixed a problem with the Hide() method on THintWindow, since this is a thin wrapper over WinAPI it expected a releasehandle() call
- Reverted to calling inherited when doing segmented drawing in the form designer, this allows Delphi to do it’s thing and produces less risk of clutter when resizing
- Implemented TQTXGroupBox as a proxy over TGroupbox, shielding us from subtle differences between Lazarus and Delphi. Same with TQTXPopupmenu, TMaskedEdit and TChecklistbox
- First build for ARM64 Linux, quite emotional to see our baby fire up on a Raspberry PI, ODroid N2 and RockPi 5b!
- Updated our server-side signing tool, it’s now much faster and reduces build time by quite a margin
- Added support for class reference fields to the IDE, making it possible to bind non-visual components to visual components in the RTL, this gives us the same capability as Delphi and Lazarus when it comes to isolating behavior in separate, non-visual components.
- Cleaned up the form designer tab in the IDE and added support for renaming and/or removing references to class-reference fields. So if you have a component named “mycomponent” that is linked to some widget, and you rename your component – the IDE ensures that the widget’s named reference is updated
- Implemented regional clipping for faster graphics in the form designer, including segmented redraw and overlap culling
- Optimization of the form designer, removed several instances where it produced redraw calls that were not needed. The result is a more snappy and natural feeling form designer that works well on slower devices
- Implemented preliminary control renderer. This has not yet been activated, but will be an option further down the line. This teaches the IDE to draw the components in a more familiar way (e.g a button will look like a button, a listbox will look like a listbox etc).
- Added $APP:Platform support to the IDE for obtaining platform defines in a QTX unit ( {$I “APP::PLATFORM”}
- Added the platform defines and made them omnipresent (you dont need to explicitly use the above APP::PLATFORM moniker), this makes it possible for you to write platform dependent code. You can now use the following $IFDEF’s in any QTX unit.
- {$IFDEF PLATFORM_DOM}
- {$IFDEF PLATFORM_NODE}
- {$IFDEF PLATFORM_ANY}
- Major fix for the form designer’s deleteSelected() method, this expected the container to be of type TQTXForm and became cataclysmic when it received a TQTXDatamodule instead
- Added internal routines to the IDE for easier distinction between form and datamodules
- Added SnapShot() and Restore() to the IDE tab, allowing us to close all files and instantly restore them when needed
- Fixed a problem when opening the license dialog where it would reload the packages when you close it, regardless of any changes. This broke any filesource references in open tabs since the old packages were disposed. We now Snapshot() any open units, close them if there has been a change, and re-create them when the packages have been reloaded
- The IDE expected to find TQTXForm based classes in the current unit when generating delegate handlers. Expanded this to include datamodules.
RTL changelog
- Updated TQTXEvent and TQTXDelegate to better work with both the DOM and NODE
- Added TQTXMessageDelegate and TQTXDOMMessageDelegate to enable proper JS message handling
- Added TQTXAppEvents component, this supports TQTXDOMMessageDelegate
- Added TQTXOperatingSystem enum definition to sysutils
- Added PercentOfValue() method to TInt32 helper class in sysutils
- Added qtx.components.pas to the system namespace / package, with TQTXEventComponent and Delegate baseclasses, these are for components that dont manage a native handle / element. An instance of JEventTarget is automatically the handle.
- Added [RegisterDelegate] that works with both native delegates and custom-events.
- [RegisterWidget] attribute works on both components and widgets.
Changes to come
- We have spent a week doing non-visual components, but we want to test them more in-depth before we add them to the RTL, but they are coming!
- Forms register with TQTXApplication, but datamodules do not. This must be changed so datamodules can be referenced directly (just add a unit variable for now) with ease.
- NodeJS can now finally have a proper application object as its root singleton -and expose the same level of control as its DOM counterpart.
- Experimental support for standard delphi events is soon possible, so we can support both (!) In the inspector.
- Add app-wide messages can also be done, opening up for TAction and TActionList components.
- Collection and collection-item handling through attributes
- MCP server and AI directly in the IDE!

















