Misc. Development/ActiveX/COM

Xojo 2023.12.12 - Release 4 - All features (Mobile, Database, Web, Desktop, etc)

Rapid application development for Desktop, Web, Mobile & Raspberry Pi.

Cross-platform
Code once then deploy on macOS, Windows, Linux, the web, iOS and Raspberry Pi.

Drag & drop UI
Create your native user interface quickly and intuitively with drag and drop.

Rich Framework
With modern support for graphics, database servers and internet protocols, build anything you can imagine.

Abstraction
Xojo abstracts you from the platform details allowing you to focus your time and energy on what makes your app unique.

Xojo features
Use the same development tool and language to build native apps for multiple platforms.

Native Controls
With over 40 user interface controls built-in, your app will look and feel right on any platform.

Beginner-Friendly
Xojo is easy to use and lets you learn as you go - you came to the right place if you're just getting started.

Advanced Features
Xojo supports inheritance, interfaces, polymorphism and more, so experienced developers will love the power.

Easy Deployment
Xojo Cloud is available for easy, maintenance-free and secure hosting for Xojo web apps.

Active Community
You can always find support in the Xojo community on our active user forum and at the annual Xojo Developer Conference.

Tons Of Resources
Our documentation, example projects, tutorials, video library and textbook will help you hit the ground running.

What others are making with Xojo
With 400,000+ users worldwide. Xojo apps can be found everywhere - from the Fortune 500 to commercial software, small businesses, schools and everything in between. In fact, Xojo itself is made with Xojo.

Get started with Xojo today.
Xojo is easy to learn and powerful enough to develop anything you can think of,
making it the ideal development tool for all experience levels.

Xojo has been helping people create extraordinary apps since 1998. Save development time with Xojo by sharing code between platforms to have native versions of your app where you need it. We like Xojo so much that we even wrote Xojo in Xojo. This means it is cross-platform, so you can create apps for any platform from any platform. We like to make things easy.

Use drag and drop to easily design your user interface and write your code using Xojo's powerful code editor with auto-complete. Xojo abstracts you from complex OS details and APIs, allowing you to create apps for multiple OS’s without extra work.

Xojo isn't just for macOS, Windows and Linux - develop mobile, web and Raspberry Pi apps the same way you develop desktop apps.

Xojo 2023r4 Release Notes

Release Date: 2023-12-12

Highlights

A more responsive IDE

Reduced build times

Debug and built apps run faster

Xojo web framework optimized for speed

Plugins load more quickly

Android Barcode Scanner Class

Example projects now feature descriptions and new search functionality

Statistics

Bugs fixed: 200

Features added: 38

Documentation changes: 12

Examples changed: 1

IDE
New Features

Added 'Path' entry to the information displayed when an Example Project is selected in the 'Choose a Project' panel. (74471)

Increased the Debugger by default font size to 11 points. (74646)

Now the IDE's Messages panel only displays the items matching the text typed in the Search control for better clarity. (74434)

Changes to the IDE's Debugger panel so it uses the same font size set for the Code Editor; and accesing the String debugger panel double clicking on the value row. Also other have been made to the String Debugger panel, removing the Edit Tab because now it is possible to set a new value for the string directly in the Text Tab, plus reorganizing the controls under the Text tab for a better use of the available space. (74437)

Added AllowPopover property to the Inspector Panel on DesktopChart to unify with WebChart. (74231)

Web: Layout editor preview won't render dark mode anymore in Web Projects, if the Supports Dark Mode option is turned off. (74807)

Web: Reduced the compile time when building Web projects. (71544)

Windows: Windows/Linux IDE: the default shortcut key for the Edit->Delete menu is now Del instead of Ctrl+Bksp on Windows and Bksp on Linux. (70398)

Resolved Issues

Plugin declared Delegates now have their compatibility flags setup properly. (74944)

For consistency, we no longer dim the layout editor when bringing up the XAML Chooser window since we're not editing the XAML content in place, only bringing up a dialog. (74823)

Changes to Plugins are now more accurately tracked so that our Plugin caches are cleared when they need to be. We also do a bit less caching when Plugins are loaded, with the side benefit being slightly faster Plugin loading times. (74726)

Fixed alignment of the Clear button in the Messages panel on macOS. (74769)

Code Editor Context Menu Go To scrolls the code editor to the matching line. (66260)

The Pragma reminder to implement interface methods no longer has an extra space and the #Pragma Error part honors the coding preference for Applies Standard Case. (74718)

Running a project remotely, by using the menu shortcut, no longer adds extraneous characters to the code editor. (74679)

Restored the ability to filter Window controls by name in the debugger. (74666)

We no longer include extraneous HTMLViewer resources when a Window, that contains an HTMLViewer, is not being used/referenced (i.e. when the linker has dead stripped the Window) for Windows/Linux builds. (74568)

The deprecated MSSQLServerDatabase plugin is no longer packaged in the Plugins folder. If your project still depends on this class, the plugin still exists in the Database Plugin Resources folder, found in the Extras folder. (74446)

Fixed an OutOfBoundException when adding an image to the IDE Navigator via drag & drop. (74602)

Debugger now displays generic Object variables again. (74548)

Selecting a recent search item in the IDE's Search Panel Recent Searchs menu offers the expected behavior, even if the user's preferences is set to Find/Filter Results appear After Pressing Enter or Return. (74532)

Avoid an OutOfBoundsException that can occur when pasting into the code editor when the paste buffer contains an empty string. (74504)

Fixed creating a new iOS project being marked as dirty. (74392)

Fixed: Minimum width set for the Tab Order Editor Window in the IDE. (74368)

Fixed loading user defined defaults for controls added to the IDE (74348)

Fixed Listbox Inspector Properties bleeding through Under Inspector Header in the IDE on macOS when DarkMode is enabled. (74252)

Fix so the Enumeration editor does numbering elements correctly. (74171)

Android: Fixed an Android app crash that would occur when viewing the App object in the debugger. (74816)

Android: On macOS when debugging with an Android emulator, bring the emulator to the front when resuming. (73517)

Android: Android apps no longer show DebugLog messages from prior app runs. (74661)

Android: Fixed an internal exception that could occur when calling Timer.CancelCallLater. (74378)

Android: If an app icon cannot be converted to PNG during the Run/Build process, an error message is now displayed. (74476)

Android: NewAndroidProject is now used with IDE Scripting to create an Android project. (74478)

Every OS: Removed duplicate database plugins found in the Database Plugin Resources folder. (74629)

macOS: Fixed an intermittent code-signing issue with macOS Sonoma and when iCloud Document+Desktop sync is turned on. (74601)

Web: Fixed some IDE issues causing web project controls to not be displayed properly in the layout editor. (68671)

Web: WebChart.HasLegend will be True by default now, like in Desktop projects. (74213)

Web: Removed WebHTMLViewer URL and HTML properties from the IDE inspector, as they no longer exists. (72076)

Windows: Copying from the Documentation window, using the short-cut key combination, no longer throws a ThreadAccessingUIException. (74638)

Windows: Forcibly ending a debug session for a Desktop app, that contains DesktopHTMLViewers, no longer leaves cefsubproc.exe background processes around. (74755)

Windows: Having a Separator control, along with a TabPanel, no longer causes the TabPanel to misdraw in the layout editor. (74609)

Windows: Unselected items in the Tray area are now more distinguishable in dark mode. (74229)

Windows: Windows dark mode menubar is no longer white if Windows 8.1 support is turned off. (74113)

Framework
New Features

String.IndexOf returns -1 instead of raising an OutOfBoundsException when the starting position is greater or equal than the string length. (74791)

The Variant.TypeDelegate constant is now documented. (74302)

CLong and String.ToInt64 no longer performs an additional string conversion to ASCII if the string is already in UTF-8. (68962)

Added new LinearGradientBrush and RadialGradientBrush constructors for convenience/simplify code. Note: these constructors will make a copy of the Point/Pair.- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, stops() As Pair)- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, ParamArray stops As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, stops() As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, ParamArray stops As Pair) (74521)

Added new PictureBrush constructor that accepts a Picture and optional PictureBrush.Modes as parameters: Constructor(image As Picture, mode As PictureBrush.Modes = PictureBrush.Modes.Default) (74510)

Android: Added System.DismissKeyboard() method. (74633)

Android: Can now use Ptr type to pass handles to Declares for Kotlin Library projects. (74562)

Android: Added an addition constructor to Font to allow it to load a font from a FolderItem. (74550)

Android: Added Barcode class (for Android) with StartScan() method and ScanCompleted, ScanCancelled and ScanFailed events. (71213)

Android: Added MobileHTMLViewer.Cancel() method. (74330)

Every OS: String.IsEmpty now checks the string byte count instead of calculating the actual String.Length before it returns. (74611)

Every OS: Improved stack overflow checking to minimize the amount of time it takes to check for a StackOverflowException every time a function is called. (63667)

iOS: Added the Pressed event handler to MobileMapViewer on iOS, so the user can add new LocationMap pins to it using a long press gesture. Also adding DistanceTo, LookupAddress, MoveTo and PointsOfInterest to MapLocation. (74055)

iOS: Implemented global functions Asc(), Bin(), CDbl(), Encoding(), Hex(), IsNumeric(), IsNull and Oct() so they are available also on iOS. (74441)

iOS: Added global Chr() method to iOS for consistency with other platforms. (74278)

iOS: Removed throwing an unnecessary exception from iOS Graphics when using DrawRoundRectangle / FillRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle. (74238)

macOS: Calling System.Ticks is now 20% faster on macOS/iOS. This also affects background tasks that are running. (74649)

macOS: Removed throwing an unnecessary exception from GraphicsPath on macOS when using AddRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle. (74274)

Web: Added an experimental opt-in feature for WebSession, Send Events In Batches, aiming to improve performance. (73570)

Web: Improved the web framework static asset cache control, to take advantage of browser's cache. (73982)

Web: Updated Bootstrap icon set to v1.11.1 for Web Projects. (74449)

Web: Improved WebListBox rendering performance. (74237)

Web: Added StackOverflowChecking Pragma to several framework methods to improve its performance. (71960)

Web: Added WebSegmentedButton.LastSegmentIndex as a ready-only property. (74124)

Web: Improved the way some controls are sending their events to the server, to avoid under-firing or over-firing them. (71381)

Windows: DesktopXAMLContainer: PointerEntered, PointerExited, PointerMoved, PointerPressed, and PointerReleased events can now be handled in the EventTriggered event. (74563)

Windows: DesktopHTMLViewer: updated to CEF build 118.0.5993.96. Note: this build no longer supports non-HiDPI aware apps. Enable the Supports Hi-DPI build option for best results. This build also removes the swiftshader folder. (74522)

Resolved Issues

DatabaseRow: repeatedly assigning a value to the same Column name no longer leaks memory. (74733)

Restored some of the lost behavior of JSONItem (since 2021r1). DecimalFormat now works like it used to (instead of being ignored), and doubles are no longer formatted in the user's locale. (74416)

PictureBrush offers now the same behavior in PDFDocument than on Desktop when its mode is set to Default. (74517)

String.IndexOf will raise an OutOfBoundsException if the received startPosition parameter is equal or greater than the text lenght. (74346)

Getting the Line/Node from an XmlException no longer crashes. (74184)

The number ToString functions, that pass in Locale.Raw, now matches the same behavior as calling ToString without specifying a Locale. (72807)

Android: Added Variant.TypeWindowPtr for platform compatibility. It will never match anything on Android, of course. (74677)

Android: Fixed a crash that would occur when viewing TypeInfo properties in the debugger. (75020)

Android: Fixed an internal exception that could occur when changing a container's Visible property during its Opening event. (73793)

Android: Improved URLConnection error handling. (74932)

Android: AndroidMobileTable.SelectedRowText now returns if there are no rows or no selected row instead of raising an OutOfBoundsException. (74949)

Android: Accessing HTTPStatusCode before URLConnection has initialized no longer causes the app to crash with an internal exception. (74886)

Android: MobileApplication.UnhandledException event now better captures the user runtime call stack for Stack() and StackFrame(). (74743)

Android: Controls are resized if necessary when a bottom toolbar is added at runtime. (74258)

Android: To match behavior on other platforms, EncodeBase64 now sets the resulting string encoding to US-ASCII. (74878)

Android: Integer.ToBinary() now works with large integer values. (74014)

Android: MobilePopupMenu.SelectedRowText should return when there are no rows, not raise an OutOfBoundsException. MobileSegmentedButton.SelectedSegment should return null when there are no segments instead of raising an OutOfBoundsException. (74856)

Android: Fixed some internal exceptions that could occur when accessing some screen properties from the App.Opening event. (74855)

Android: Controls that are locked to top/bottom or left/right now report more accurate height and width. (74257)

Android: Hex strings (via Hex or Integer.ToHex) are returned with uppercase letters to better match behavior on other platforms. (74426)

Android: To better match other platforms, EncodeBase64 result no longer has a trailing LF. (74428)

Android: Nil + String when assigned to a Variant no longer has null prefixed to the beginning of the string. (74809)

Android: String + Nil when assigned to a Variant no longer has null appended to the end of the string. (74810)

Android: IsNumeric() returns True for enums to match behavior of other platforms. (74713)

Android: Locale.Identifier now uses ISO-2 IDS, matching behavior on other platforms. (74775)

Android: Fixed a compile error when subclassing TypeInfo. (74276)

Android: URLConnection binary request content data is now sent correctly. (74763)

Android: Fixed a drawing oddity with MobileOval, MobileRectangle and MobileSeparator if they had focus. (74730)

Android: MobileSeparator thickness is now 1pt and gray to match other platforms. (74731)

Android: Returning False from MobileTextField.ReturnPressed event now dismisses the keyboard. (74626)

Android: To match behavior on other platforms, VarType() and Variant.Type now return TypeInt64 (3) for an enum. (74714)

Android: Fixed some compiler error when using Crypto enumerations. (74233)

Android: Fixed an exception that occurred when using MobileSharingPanel.SharePicture(). (74671)

Android: HTMLViewer.NewWindow() event now contains correct url in the url parameter. (74706)

Android: To match behavior on other platforms, Bin() function should use 4 minimum digits, not 8. (74423)

Android: To match behavior on other platforms, JSONItem.LastRowIndex now returns a value based on the key count. (74422)

Android: It is not possible for introspection to know an array's type and size just from its declaration, but we can at least prevent an exception when requesting that information. (74634)

Android: On Android 14, avoid a situation where containers could sometimes be added to the screen more than once. (74579)

Android: Str() method now works with Boolean, Color and DateTime. (74595)

Android: Fixed an internal exception that would occur when there was only 1 tab on a MobileTabPanel. (74603)

Android: Fixed an internal exception that could occur with a MobileContainer on a screen after the app is re-opened. (74596)

Android: Invalid objects added to JSONItem now raise an InvalidArgumentException (like other platforms) instead of adding silently as a string. (74552)

Android: Fixed compile errors when overriding members of Graphics in a subclass. (74551)

Android: An empty array is added to the JSON when converted from a dictionary. (74535)

Android: MemoryBlock.StringValue() now returns a string using the specified encoding. (74523)

Android: MobileScreen Activated/Deactivated event behavior better matches iOS behavior. (74263)

Android: The behavior of CDbl now better matches other platforms. (74451)

Android: Fixed a problem with some equality checks to Currency values. (74481)

Android: URLConnection Request Content is now sent using the specified character set. (74360)

Android: Improved DateTime math results for a variety of edge cases. (74350)

Android: A Dictionary is now first converted to a JSONItem before adding it to a JSONItem. (74467)

Android: Added IsNull(value As Variant) As Boolean global function to match other platforms. (74470)

Android: For MobileTextField, only enable the keyboard done button change if the ReturnPressed event is implemented. (74290)

Android: MobilePopupMenu.RowTagAt() can now be assigned a value. (74374)

Android: Removed JSONItem.EscapeSlashes and DecimalFormat from Android as those have been deprecated in the main framework. (74421)

Android: Sign() now returns Integer instead of Double...

Description

Rapid application development for Desktop, Web, Mobile & Raspberry Pi.

Cross-platform
Code once then deploy on macOS, Windows, Linux, the web, iOS and Raspberry Pi.

Drag & drop UI
Create your native user interface quickly and intuitively with drag and drop.

Rich Framework
With modern support for graphics, database servers and internet protocols, build anything you can imagine.

Abstraction
Xojo abstracts you from the platform details allowing you to focus your time and energy on what makes your app unique.

Xojo features
Use the same development tool and language to build native apps for multiple platforms.

Native Controls
With over 40 user interface controls built-in, your app will look and feel right on any platform.

Beginner-Friendly
Xojo is easy to use and lets you learn as you go - you came to the right place if you're just getting started.

Advanced Features
Xojo supports inheritance, interfaces, polymorphism and more, so experienced developers will love the power.

Easy Deployment
Xojo Cloud is available for easy, maintenance-free and secure hosting for Xojo web apps.

Active Community
You can always find support in the Xojo community on our active user forum and at the annual Xojo Developer Conference.

Tons Of Resources
Our documentation, example projects, tutorials, video library and textbook will help you hit the ground running.

What others are making with Xojo
With 400,000+ users worldwide. Xojo apps can be found everywhere - from the Fortune 500 to commercial software, small businesses, schools and everything in between. In fact, Xojo itself is made with Xojo.

Get started with Xojo today.
Xojo is easy to learn and powerful enough to develop anything you can think of,
making it the ideal development tool for all experience levels.

Xojo has been helping people create extraordinary apps since 1998. Save development time with Xojo by sharing code between platforms to have native versions of your app where you need it. We like Xojo so much that we even wrote Xojo in Xojo. This means it is cross-platform, so you can create apps for any platform from any platform. We like to make things easy.

Use drag and drop to easily design your user interface and write your code using Xojo's powerful code editor with auto-complete. Xojo abstracts you from complex OS details and APIs, allowing you to create apps for multiple OS’s without extra work.

Xojo isn't just for macOS, Windows and Linux - develop mobile, web and Raspberry Pi apps the same way you develop desktop apps.

Xojo 2023r4 Release Notes

Release Date: 2023-12-12

Highlights

A more responsive IDE

Reduced build times

Debug and built apps run faster

Xojo web framework optimized for speed

Plugins load more quickly

Android Barcode Scanner Class

Example projects now feature descriptions and new search functionality

Statistics

Bugs fixed: 200

Features added: 38

Documentation changes: 12

Examples changed: 1

IDE
New Features

Added 'Path' entry to the information displayed when an Example Project is selected in the 'Choose a Project' panel. (74471)

Increased the Debugger by default font size to 11 points. (74646)

Now the IDE's Messages panel only displays the items matching the text typed in the Search control for better clarity. (74434)

Changes to the IDE's Debugger panel so it uses the same font size set for the Code Editor; and accesing the String debugger panel double clicking on the value row. Also other have been made to the String Debugger panel, removing the Edit Tab because now it is possible to set a new value for the string directly in the Text Tab, plus reorganizing the controls under the Text tab for a better use of the available space. (74437)

Added AllowPopover property to the Inspector Panel on DesktopChart to unify with WebChart. (74231)

Web: Layout editor preview won't render dark mode anymore in Web Projects, if the Supports Dark Mode option is turned off. (74807)

Web: Reduced the compile time when building Web projects. (71544)

Windows: Windows/Linux IDE: the default shortcut key for the Edit->Delete menu is now Del instead of Ctrl+Bksp on Windows and Bksp on Linux. (70398)

Resolved Issues

Plugin declared Delegates now have their compatibility flags setup properly. (74944)

For consistency, we no longer dim the layout editor when bringing up the XAML Chooser window since we're not editing the XAML content in place, only bringing up a dialog. (74823)

Changes to Plugins are now more accurately tracked so that our Plugin caches are cleared when they need to be. We also do a bit less caching when Plugins are loaded, with the side benefit being slightly faster Plugin loading times. (74726)

Fixed alignment of the Clear button in the Messages panel on macOS. (74769)

Code Editor Context Menu Go To scrolls the code editor to the matching line. (66260)

The Pragma reminder to implement interface methods no longer has an extra space and the #Pragma Error part honors the coding preference for Applies Standard Case. (74718)

Running a project remotely, by using the menu shortcut, no longer adds extraneous characters to the code editor. (74679)

Restored the ability to filter Window controls by name in the debugger. (74666)

We no longer include extraneous HTMLViewer resources when a Window, that contains an HTMLViewer, is not being used/referenced (i.e. when the linker has dead stripped the Window) for Windows/Linux builds. (74568)

The deprecated MSSQLServerDatabase plugin is no longer packaged in the Plugins folder. If your project still depends on this class, the plugin still exists in the Database Plugin Resources folder, found in the Extras folder. (74446)

Fixed an OutOfBoundException when adding an image to the IDE Navigator via drag & drop. (74602)

Debugger now displays generic Object variables again. (74548)

Selecting a recent search item in the IDE's Search Panel Recent Searchs menu offers the expected behavior, even if the user's preferences is set to Find/Filter Results appear After Pressing Enter or Return. (74532)

Avoid an OutOfBoundsException that can occur when pasting into the code editor when the paste buffer contains an empty string. (74504)

Fixed creating a new iOS project being marked as dirty. (74392)

Fixed: Minimum width set for the Tab Order Editor Window in the IDE. (74368)

Fixed loading user defined defaults for controls added to the IDE (74348)

Fixed Listbox Inspector Properties bleeding through Under Inspector Header in the IDE on macOS when DarkMode is enabled. (74252)

Fix so the Enumeration editor does numbering elements correctly. (74171)

Android: Fixed an Android app crash that would occur when viewing the App object in the debugger. (74816)

Android: On macOS when debugging with an Android emulator, bring the emulator to the front when resuming. (73517)

Android: Android apps no longer show DebugLog messages from prior app runs. (74661)

Android: Fixed an internal exception that could occur when calling Timer.CancelCallLater. (74378)

Android: If an app icon cannot be converted to PNG during the Run/Build process, an error message is now displayed. (74476)

Android: NewAndroidProject is now used with IDE Scripting to create an Android project. (74478)

Every OS: Removed duplicate database plugins found in the Database Plugin Resources folder. (74629)

macOS: Fixed an intermittent code-signing issue with macOS Sonoma and when iCloud Document+Desktop sync is turned on. (74601)

Web: Fixed some IDE issues causing web project controls to not be displayed properly in the layout editor. (68671)

Web: WebChart.HasLegend will be True by default now, like in Desktop projects. (74213)

Web: Removed WebHTMLViewer URL and HTML properties from the IDE inspector, as they no longer exists. (72076)

Windows: Copying from the Documentation window, using the short-cut key combination, no longer throws a ThreadAccessingUIException. (74638)

Windows: Forcibly ending a debug session for a Desktop app, that contains DesktopHTMLViewers, no longer leaves cefsubproc.exe background processes around. (74755)

Windows: Having a Separator control, along with a TabPanel, no longer causes the TabPanel to misdraw in the layout editor. (74609)

Windows: Unselected items in the Tray area are now more distinguishable in dark mode. (74229)

Windows: Windows dark mode menubar is no longer white if Windows 8.1 support is turned off. (74113)

Framework
New Features

String.IndexOf returns -1 instead of raising an OutOfBoundsException when the starting position is greater or equal than the string length. (74791)

The Variant.TypeDelegate constant is now documented. (74302)

CLong and String.ToInt64 no longer performs an additional string conversion to ASCII if the string is already in UTF-8. (68962)

Added new LinearGradientBrush and RadialGradientBrush constructors for convenience/simplify code. Note: these constructors will make a copy of the Point/Pair.- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, stops() As Pair)- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, ParamArray stops As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, stops() As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, ParamArray stops As Pair) (74521)

Added new PictureBrush constructor that accepts a Picture and optional PictureBrush.Modes as parameters: Constructor(image As Picture, mode As PictureBrush.Modes = PictureBrush.Modes.Default) (74510)

Android: Added System.DismissKeyboard() method. (74633)

Android: Can now use Ptr type to pass handles to Declares for Kotlin Library projects. (74562)

Android: Added an addition constructor to Font to allow it to load a font from a FolderItem. (74550)

Android: Added Barcode class (for Android) with StartScan() method and ScanCompleted, ScanCancelled and ScanFailed events. (71213)

Android: Added MobileHTMLViewer.Cancel() method. (74330)

Every OS: String.IsEmpty now checks the string byte count instead of calculating the actual String.Length before it returns. (74611)

Every OS: Improved stack overflow checking to minimize the amount of time it takes to check for a StackOverflowException every time a function is called. (63667)

iOS: Added the Pressed event handler to MobileMapViewer on iOS, so the user can add new LocationMap pins to it using a long press gesture. Also adding DistanceTo, LookupAddress, MoveTo and PointsOfInterest to MapLocation. (74055)

iOS: Implemented global functions Asc(), Bin(), CDbl(), Encoding(), Hex(), IsNumeric(), IsNull and Oct() so they are available also on iOS. (74441)

iOS: Added global Chr() method to iOS for consistency with other platforms. (74278)

iOS: Removed throwing an unnecessary exception from iOS Graphics when using DrawRoundRectangle / FillRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle. (74238)

macOS: Calling System.Ticks is now 20% faster on macOS/iOS. This also affects background tasks that are running. (74649)

macOS: Removed throwing an unnecessary exception from GraphicsPath on macOS when using AddRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle. (74274)

Web: Added an experimental opt-in feature for WebSession, Send Events In Batches, aiming to improve performance. (73570)

Web: Improved the web framework static asset cache control, to take advantage of browser's cache. (73982)

Web: Updated Bootstrap icon set to v1.11.1 for Web Projects. (74449)

Web: Improved WebListBox rendering performance. (74237)

Web: Added StackOverflowChecking Pragma to several framework methods to improve its performance. (71960)

Web: Added WebSegmentedButton.LastSegmentIndex as a ready-only property. (74124)

Web: Improved the way some controls are sending their events to the server, to avoid under-firing or over-firing them. (71381)

Windows: DesktopXAMLContainer: PointerEntered, PointerExited, PointerMoved, PointerPressed, and PointerReleased events can now be handled in the EventTriggered event. (74563)

Windows: DesktopHTMLViewer: updated to CEF build 118.0.5993.96. Note: this build no longer supports non-HiDPI aware apps. Enable the Supports Hi-DPI build option for best results. This build also removes the swiftshader folder. (74522)

Resolved Issues

DatabaseRow: repeatedly assigning a value to the same Column name no longer leaks memory. (74733)

Restored some of the lost behavior of JSONItem (since 2021r1). DecimalFormat now works like it used to (instead of being ignored), and doubles are no longer formatted in the user's locale. (74416)

PictureBrush offers now the same behavior in PDFDocument than on Desktop when its mode is set to Default. (74517)

String.IndexOf will raise an OutOfBoundsException if the received startPosition parameter is equal or greater than the text lenght. (74346)

Getting the Line/Node from an XmlException no longer crashes. (74184)

The number ToString functions, that pass in Locale.Raw, now matches the same behavior as calling ToString without specifying a Locale. (72807)

Android: Added Variant.TypeWindowPtr for platform compatibility. It will never match anything on Android, of course. (74677)

Android: Fixed a crash that would occur when viewing TypeInfo properties in the debugger. (75020)

Android: Fixed an internal exception that could occur when changing a container's Visible property during its Opening event. (73793)

Android: Improved URLConnection error handling. (74932)

Android: AndroidMobileTable.SelectedRowText now returns if there are no rows or no selected row instead of raising an OutOfBoundsException. (74949)

Android: Accessing HTTPStatusCode before URLConnection has initialized no longer causes the app to crash with an internal exception. (74886)

Android: MobileApplication.UnhandledException event now better captures the user runtime call stack for Stack() and StackFrame(). (74743)

Android: Controls are resized if necessary when a bottom toolbar is added at runtime. (74258)

Android: To match behavior on other platforms, EncodeBase64 now sets the resulting string encoding to US-ASCII. (74878)

Android: Integer.ToBinary() now works with large integer values. (74014)

Android: MobilePopupMenu.SelectedRowText should return when there are no rows, not raise an OutOfBoundsException. MobileSegmentedButton.SelectedSegment should return null when there are no segments instead of raising an OutOfBoundsException. (74856)

Android: Fixed some internal exceptions that could occur when accessing some screen properties from the App.Opening event. (74855)

Android: Controls that are locked to top/bottom or left/right now report more accurate height and width. (74257)

Android: Hex strings (via Hex or Integer.ToHex) are returned with uppercase letters to better match behavior on other platforms. (74426)

Android: To better match other platforms, EncodeBase64 result no longer has a trailing LF. (74428)

Android: Nil + String when assigned to a Variant no longer has null prefixed to the beginning of the string. (74809)

Android: String + Nil when assigned to a Variant no longer has null appended to the end of the string. (74810)

Android: IsNumeric() returns True for enums to match behavior of other platforms. (74713)

Android: Locale.Identifier now uses ISO-2 IDS, matching behavior on other platforms. (74775)

Android: Fixed a compile error when subclassing TypeInfo. (74276)

Android: URLConnection binary request content data is now sent correctly. (74763)

Android: Fixed a drawing oddity with MobileOval, MobileRectangle and MobileSeparator if they had focus. (74730)

Android: MobileSeparator thickness is now 1pt and gray to match other platforms. (74731)

Android: Returning False from MobileTextField.ReturnPressed event now dismisses the keyboard. (74626)

Android: To match behavior on other platforms, VarType() and Variant.Type now return TypeInt64 (3) for an enum. (74714)

Android: Fixed some compiler error when using Crypto enumerations. (74233)

Android: Fixed an exception that occurred when using MobileSharingPanel.SharePicture(). (74671)

Android: HTMLViewer.NewWindow() event now contains correct url in the url parameter. (74706)

Android: To match behavior on other platforms, Bin() function should use 4 minimum digits, not 8. (74423)

Android: To match behavior on other platforms, JSONItem.LastRowIndex now returns a value based on the key count. (74422)

Android: It is not possible for introspection to know an array's type and size just from its declaration, but we can at least prevent an exception when requesting that information. (74634)

Android: On Android 14, avoid a situation where containers could sometimes be added to the screen more than once. (74579)

Android: Str() method now works with Boolean, Color and DateTime. (74595)

Android: Fixed an internal exception that would occur when there was only 1 tab on a MobileTabPanel. (74603)

Android: Fixed an internal exception that could occur with a MobileContainer on a screen after the app is re-opened. (74596)

Android: Invalid objects added to JSONItem now raise an InvalidArgumentException (like other platforms) instead of adding silently as a string. (74552)

Android: Fixed compile errors when overriding members of Graphics in a subclass. (74551)

Android: An empty array is added to the JSON when converted from a dictionary. (74535)

Android: MemoryBlock.StringValue() now returns a string using the specified encoding. (74523)

Android: MobileScreen Activated/Deactivated event behavior better matches iOS behavior. (74263)

Android: The behavior of CDbl now better matches other platforms. (74451)

Android: Fixed a problem with some equality checks to Currency values. (74481)

Android: URLConnection Request Content is now sent using the specified character set. (74360)

Android: Improved DateTime math results for a variety of edge cases. (74350)

Android: A Dictionary is now first converted to a JSONItem before adding it to a JSONItem. (74467)

Android: Added IsNull(value As Variant) As Boolean global function to match other platforms. (74470)

Android: For MobileTextField, only enable the keyboard done button change if the ReturnPressed event is implemented. (74290)

Android: MobilePopupMenu.RowTagAt() can now be assigned a value. (74374)

Android: Removed JSONItem.EscapeSlashes and DecimalFormat from Android as those have been deprecated in the main framework. (74421)

Android: Sign() now returns Integer instead of Double to match other platforms. (74425)

Desktop: Fixed memory leak in DesktopSearchField for Windows. (71870)

Desktop: DesktopMenuItem: enabling/disabling the menu item, outside of the MenuBarSelected event, now works. (72446)

Every OS: For consistency and to match naming standards, Semaphore.Constructor parameter name standardized to resourceCount. (73761)

Every OS: Deprecated HSV, use Color.HSV as replacement. (74598)

Every OS: A value that is represented as a Single type, that is stored in a Variant, no longer emits an extraneous e+ at the end when retrieving the StringValue. (74268)

Every OS: JSONItem.ToString no longer uses the decimal character based on locale to format doubles. (71351)

iOS: Added default event handler to MobileApplication on iOS. (69257)

iOS: Thread.DebugIdentifier is now supported for iOS. (72676)

iOS: Fixed Graphics.DrawText drawing multi-line strings on iOS. (74162)

Linux: ListBox: checkboxes are no longer drawn outside the bounds of the ListBox. (74580)

Linux: A clipped graphics from a Picture, whose scale factor is greater than 1, no longer incorrectly offsets the clipping. This fixes an issue with the Linux IDE, for Web Projects, that did not draw any controls on the layout editor when the display scale was greater than 100%. (66226)

macOS: DateTime.ToString/SQLDateTime no longer waits for the OS to garbage collect these string instances before freeing up memory. (67558)

macOS: GraphicsPath.Bounds no longer returns a Nil Rect if the width or height is 0. This fixes the behavior on macOS, iOS, and Linux to match the behavior on Windows. (74625)

macOS: Fixed setting the text on DesktopCombobox (macOS) when SelectedRowIndex <> -1 and the control still has the focus. (74556)

macOS: Fixed DateTimePicker receiving key events on macOS when the control is disabled. (74540)

Web: WebListBox won't reload its data unnecessary anymore when the browser has been resized, unless its height has changed. (74818)

Web: Fixed an issue causing large file downloads to be closed too early sometimes, before the browser finished the download. (74784)

Web: WebTabPanel.PanelCount will report the correct amount of panels now, it was always returning 2. (74782)

Web: Fixed an issue when doing a WebMapLocation.LookupAddress with the default provider. (74691)

Web: Fixed a WebUIControl issue causing the Tooltip placement to be always set to auto. (74725)

Web: Fixed a ColorGroup issue causing a NilObjectException to be raised in some situations. It was affecting Web projects. (74686)

Web: Fixed the issue causing hovering over a WebMapLocation marker in WebMapViewer to throw console errors, when Title wasn't filled. (74543)

Web: Fixed a WebMapViewer issue causing the Locationselected event wasn't being fired, unless Pressed event handler was present. (74249)

Web: Fixed a WebChart issue causing the Pressed event to raise an internal exception. (74462)

Web: Fixed Web Framework methods and events to match Xojo coding guidelines. (74400)

Web: Fixed an issue causing connections being closed too early under some circumstances. (74442)

Web: Fixed an issue causing tooltips to not be shown on disabled web controls. (74136)

Web: Fixed an issue in WebTextField and WebTextArea causing loss of data when typing while changing its settings. (74107)

Windows: Projects using DesktopHTMLViewer no longer leave cefsubproc.exe processes laying around when the app unexpectedly crashes. (75079)

Windows: DesktopDateTimePicker no longer leaks GDI objects. (74985)

Windows: Closing a ContainerControl that has a TabPanel on another ContainerControl/Canvas, no longer crashes. (74871)

Windows: TCPSocket: sending data is now much faster on Windows/Linux. (74813)

Windows: DesktopDateTimePicker control gets the focus on Windows when the Mode is set to TimeOnly. (74767)

Windows: DesktopHTMLViewer: ZoomTextIn and ZoomTextOut now zooms in/out to more than one level. (74498)

Windows: Fixed an issue due to a bad format string when the DesktopChart is set to Scatter/Bubble and the app is ran on Windows / Linux. (74474)

Windows: Fixed DrawInto for ListBox, GroupBox, BevelButton, DisclosureTriangle, PopupArrow, and Separator controls that did not draw correctly when drawing into a Graphics whose scale factor differed from the OS scale factor. (74432)

Windows: DesktopWindow/DesktopContainer DrawInto now correctly draws all the controls on the Window/Container. (74430)

Windows: Assigned menu icons, with Picture sets, now re-calculates the best representation when the scale factor changes. (62436)

Windows: Switching between high contrast themes now triggers the App's AppearanceChanged event. (71505)

Windows: Controls, that do not have the Top locked, are now refreshed properly when the window is restored from its maximized state. (72310)

Windows: DesktopTextArea: getting the StyledText.Paragraph no longer scrolls the TextArea contents, which caused the text to appear to jump up and down. (72496)

Windows: Canvas.DrawInto no longer offsets the Backdrop image incorrectly when drawing into a Picture Graphics. (74382)

Windows: Fixed mouse cursor flickering when moving over SearchField control on Windows. (74308)

Compiler
New Features

Android: Updated to newer Android/Kotlin toolchain. (74447)

Android: Added Dependencies property to the Android advanced build settings. This can be used with Declares and Libraries to load any external dependencies they need. Put one dependency per line, an example would be: io.github.bitstorm:tinyzip-core:1.0.0 (74658)

Android: Added support for Ptr type, allowing declares to custom libraries to pass along Android/Kotlin types that do not have an equivalent Xojo type. (74555)

Resolved Issues

Fixed an occasional issue when compiling on very high core count Windows machines. (74153)

Android: Fixed an issue where accessing certain controls by name in events of certain mobilescreen subclasses could fail. (74885)

Android: Fixed an unexpected exception when comparing a WeakRef.Value to Nil. (75041)

Android: Fixed an issue when referencing certain controls via the screen name in certain events from that same screen. (74960)

Android: Fixed an issue with Objects and IsA. (74953)

Android: Fixed an issue with certain JSONItem casts that could result in an unexpected exception. (74879)

Android: Fixed an issue when using a constant as the lib name in a declare. (74820)

Android: Fixed an issue when setting a constant to the value of another constant in certain circumstances. (74817)

Android: Fixed an issue when declaring a constant with a nil value. (74814)

Android: Fixed a compilation issue with certain events on mobilescreens that use paramarray. (74804)

Android: Fixed an issue with using CurrentMethodName inside certain computed properties. (74796)

Android: Fixed an issue with AddressOf and methods from Class properties on App. (74749)

Android: Fixed an issue when using CType to convert an Enum to an Integer. (74712)

Android: Fixed an issue when using CType to convert an Integer to a Boolean. (74711)

Android: Fixed an issue with declares that have certain parameters and expect a cstring return value. (74704)

Android: Fixed an issue when initializing certain variables of different types following a New and method call on the same line. (74674)

Android: Fixed an issue when initializing a Pair variable on the same line that initializes another variable of another type using a method. (74673)

Android: Fixed an incompatibility with using modal screens on Android 8 (APK 26). (75000)

Android: Fixed an issue when using the Array function to initialize a variable on the same line as other types. (74672)

Android: Fixed an issue with conditional compilation that could cause odd issues between certain runs/builds. (74663)

Android: Fixed an issue when referencing certain controls on a screen during variable initialization. (74662)

Android: Fixed an issue when initializing certain variables with a dotted module/class reference. (74616)

Android: Fixed an issue when using multiple IsA in a single Case. (74584)

Android: Fixed an issue with certain class enumeration references. (74559)

Android: Fixed an issue with calling a conversion on certain framework properties like System.Version.BuildVersion. (74538)

Android: Fixed an issue with certain combinations of #ElseIf and #Else. (74509)

Android: Fixed an issue that sometimes occurred when returning an object with a nil value from a method. (74496)

Android: Fixed an issue with nested/multiple #Ifs in certain circumstances. (74495)

Android: Fixed an issue with #ElseIf and nested #Ifs. (74486)

Android: Fixed an issue with Not in combination with IsA in parenthesis. (74463)

Android: Fixed an issue when accessing a shared property on a MobileScreen via Self. (74454)

Android: Fixed an issue when accessing a computed shared property on a MobileScreen. (74452)

Android: Fixed an issue when using certain multi-parameter methods with Case. (74415)

Android: Fixed an issue with certain methods that have a multi-dimension array parameter. (74390)

Android: Fixed an issue where an error state between run/build with conditional compilation in the same session could persist. (74387)

Android: Fixed an issue with conditional compilation and TargetMobileSimulator. (74384)

Android: Fixed an issue when calling a method with an optional parameter before a required parameter could fail when passing only a required type. (74372)

Android: Fixed an issue when calling a method with an optional parameter before a required parameter could fail when passing nil. (74370)

Android: Don't allow non-default screens to be opened directly from outside the app. (74794)

Android: Fixed an issue with certain whitespace at the end of a line, and fixed an issue with evaluating a pair value as a boolean. (74359)

Android: Fixed an issue when using the inspector to set the value of an enumeration on a class. (74351)

Android: Fixed an issue when using Timer.CallLater with a method on a container. (74314)

Android: Fixed an issue when calling MemoryBlock.StringValue in certain circumstances. (74311)

Android: Fixed an issue when accessing an element of a protected shared array property. (74310)

Android: Fixed an issue when comparing an object to nil when that object is a variant. (74304)

Android: Fixed an issue with conditional compilation and constants. (74300)

Android: Fixed an issue when calling certain overloaded methods with different parameter sets. (74297)

Android: Fixed an issue with some uses of Try that use End (rather than End Try). (74283)

Android: Fixed an issue with accessing/comparing certain MobileScreen inherited properties, and an issue with properties that have underscores in the name. (74259)

Android: Location app permission is now only added if MobileLocation is used on a layout. Camera app permission is now only added if MobileImagePicker is used on a layout. If those permissions is needed for other reasons they can be manually added using the Permissions field on the Android Build Settings advanced tab. (74698)

Android: When the bundle ID is changed, the app gets fully rebuilt on the next run. (74632)

Android: Fixed an issue when using two - in a row. (74250)

Android: Fixed an issue where certain classes within modules weren't being checked for invalid names. (74226)

Android: Fixed the error message when there are too many modules within other modules for the Android platform. (74224)

Android: Fixed an issue when using Optional in a Delegate. (74222)

Android: Fixed an issue when using Optional in an event definition. (74221)

Android: Fixed an issue when comparing certain types against an element of a variant array. (74201)

Android: MobileApplication version properties are now shown with introspection. (74621)

Android: Fixed an issue with testing a condition inside of parenthesis made up of certain framework shared methods. (74196)

Android: Fixed a compilation error with certain methods that have a multi-dimensional array as the return type. (74180)

Android: Fixed an issue when initializing a MobileScreen with a Constructor that has parameters. (74151)

Android: Fixed an issue that could cause Android compilation to fail on some Windows installations. (74427)

Android: Building an Android app now always clears any prior builds to ensure that a proper rebuild is done. (74512)

Android: Fixed an issue with AddHandler and certain controls on a container. (74168)

Android: Improved Android temporary build folder creation process. (74448)

Android: Fixed an issue where MobileScreen constructors weren't always called. (74150)

Documentation
Resolved Issues

WebPicture.Height and Width are now correctly documented as methods rather than properties. (74409)

DesktopPopMenu now has a note to explain that when using the & character in a row, you must double it for it to appear. (74513)

WebPicture.Height and Width are both now correctly documented as methods rather than properties. (74525)

WebFile.Data is now correctly documented as a method rather than as a property. (74526)

WebApplication.SessionCount is now correctly documented as a method rather than as a property. (74530)

Webpagination.Style is now correctly documented as a method rather than as a property. (74536)

Fixed several places in example code on various pages where Object2D subclasses were using Fill rather than FillOpacity. (74587)

Fixed bugs in various code samples on the Group2D page. (74590)

Improved the description of DesktopWindow.DrawInto. (75004)

WebSession LanguageCode, ConfirmDisconnectMessage, DisconnectMessage, Interruptionmessage and UserPrefersDarkMode are now all better documented. (75053)

Android: System.GotoMap is now documented. (74285)

Android: Added information about the UnhandledException event on Android to the Getting Started > Debugging page. (74516)

Additional Information