Delphi Professional 12 Athens

Released: Nov 8, 2023

Updates in 12 Athens

Features

Installer Enhancements

  • New Feature Manager - Improved the UI and the behavior of installing platforms and other items by simplifying installation choices. Use the Feature Manager Dialog, formerly Platform Manager, to select your installations.
    • All installation features and options are on a single screen, with the languages (Delphi or C++) and target platforms (Windows, iOS, etc.) options as the central part of the screen.
    • The additional items are shown in a list on the right sidebar.
    • The bottom bar of the installer shows some helpful information, including the difference in disk space as n GB is more or less used.
    • A new Errors button becomes available at any place that shows errors. Use the button to preview the log and open the location of the installation log file in Explorer.
  • Updates to Libraries
    • Updated the integrated version of DUnitX to the most recent library version.
    • Updated the version of Indy that ships with Embarcadero RAD Studio to the latest version in the official Indy GitHub repository.
  • GetIt Quality Improvements - Added the ability to simultaneously load multiple GetIt packages from a single folder on your hard drive.
    • The GetItCmd command line tool is now logging into GetItInstall.log.
    • Improved the error message and workarounds for compiling projects with GetIt package dependencies.
    • Install the GetIt packages from the Welcome Page when the installation is done "offline" (with the ISO image).

New IDE Enhancements

  • Moving Deprecated Features - Some old and unsupported tools have been moved out of the core product installation, making them available as add-ons:
    • VCL Translation Support.
    • Modeling. Note that you must install this if you want to use Embarcadero Delphi code formatting, and it is available in the Technology section of the installer.
  • Searching - The Find in Files dialog now has a new Subdirectory exclude mask option, which excludes specific folders from being searched when using the Search in directories and Include subdirectories functionalities. There are default exclusions for both Delphi and C++, and the dialog has been widened to fit the new content.
  • GDI Resource Usage - GDI bitmap counts are now lower through the IDE. Images can now be Dormant if not used for over a minute. All IDE image lists, including those for toolbars and menus, component images for the Palette, etc., will make their images dormant when not used.
  • CodeInsight and DelphiLSP
    • Added a new version of the code completion's Auto invoke feature. This means that code completion shows when:
      • Pressing Ctrl+Space or typing "." (Only on dot), as in 11.3.
      • Typing anything and waiting for a moment.
      • Typing inside an identifier (it used to invoke only at the beginning).
    • Code completion now adds array braces [ ] for array types, including placing the caret inside. The code completion window can show the keys that affect completion, such as Enter, Space, Esc, etc.
    • Added menu items in the Search main menu to 'Go to Definition' and 'Go to Implementation' features.
    • Code Keywords - Language keywords are now included in the completion list. Keywords are auto-selected ahead of identifiers. This means that even when code completion automatically invokes whatever you type, it completes correctly as long as it is valid.
    • Delphi LSP Quality
      • Added a menu item to the Tools Menu to restart the LSP server if required.
      • Color constant representation for code completion has been improved. When completing a color constant, the colors are shown larger and in a square; the hex and RGB values are shown; and system colors are shown correctly (following the system theme, not the IDE theme). This includes both TColor and TAlphaColor.
  • General IDE Enhancements
    • New Designers - Moved some of the designers of the KSVC library into the core product. These include the following:
      • StringList Editor - Toolbar allowing loading and saving to text files and standard clipboard operations, plus a status bar with position information.
      • Multiline String Editor - This feature is enabled for the Hint property of all controls and the Caption property of some of them.
      • Quick Button Configuration - Adds a Quick configuration for TButton.
      • Quick RadioGroup Configuration - Introducing a new special editor for the Radio Group control.
      • Quick Panel Configuration - New configuration dialog for the TPanel control.
    • Syntax Highlighting throughout the IDE - Added syntax highlighting using the IDE color palette to:
      • Highlight debugger tooltips.
      • Error Insight messages in the Structure pane.
      • The Structure view highlights methods and types.
      • The Navigation toolbar highlights methods and types.
      • The Call Stack for methods and addresses or modules.
    • Navigation Toolbar - The Navigation toolbar at the top of the editor has several enhancements:
      • The dropdowns now have visual clues about their function when no text is typed in yet.
      • When searching for a type or method, initially, all results will now be shown.
      • The search results are syntax highlighted, and the current search match is indicated.
      • The navigation toolbar now also follows the editor theme colors, not the IDE theme.
    • General IDE Improvements
      • The Options > IDE > Saving and Recovering page has a new checkbox to save the editor state.
      • Editor tabs now have a Copy File Path > menu item, with subitems for the full path, the filename only, and the folder only.
      • The editor now lets you set the line height as a multiple of the font size (e.g., 1.1).
      • The Editor options are now a top-level entry in the IDE Options dialog instead of nested under User Interface.
      • Delphi refactoring find items have been moved to a submenu: Search (main menu) > Find > Find Symbols. This improves the performance of opening the menu.
      • Gutter icons, such as breakpoints, are now scaled with the editor scale based on font size. The ToolsAPI INTACodeEditorState290 has new CharWidth and CharHeight properties and a Refresh method.
      • The Call Stack and the debug Event Log now allow users to copy to the clipboard, and select all, from the context menu.
      • There are new styles used in the VCL designer when 'Mimic Windows' is turned on, and the IDE is running on Microsoft Windows 11, for both light and dark mode.
  • IDE Quality Enhancements
    • Editor inline search.
    • High DPI form design, including the form resizing and placement of non-visual components, as well as pulling the form designer between multiple windows.

Debugger Improvements

  • Previous versions had extended timeouts before showing a potential issue. This release has reduced these timeouts significantly to an initial timeout of 6 seconds.
  • When the debug kernel is not responding, a dialog screen appears, allowing users to Wait or Terminate the process. This improvement applies to Win64, Apple macOS, Linux, Apple iOS, and Android.
  • Debugging on the iOS Simulator for iOS 17 is functional, but debugging on-device with iOS 17 is not supported. This is due to an iOS change affecting multiple non-Apple vendors.
  • Apple Xcode 15 is supported for running apps.
  • Updated the macOS LLDB.
  • Updated the Linux LLDB to match.
  • PAServer messages, including hints, will now be shown in the IDE Messages pane.
  • The OS thread handle is now shown in the Threads view.
  • Displaying FPU registers on Intel Mac has been improved.
  • Debugging Delphi code using anonymous methods now shows captured variables.
  • The debugger tooltip in the editor now scales following the font size and has syntax highlighting.
  • FPU and XMM registers now display correctly for Windows 64-bit with LLDB, macOS, and Linux.
  • Modifying FPU and ST.XMM now registers on Linux and macOS.

Skia Integration

  • This release adds Skia support for all the platforms that FireMonkey supports. Skia library offers full support for all platforms supported by RAD Studio Athens, both in C++Builder and Delphi, including even the recent additions iOS Simulator ARM and macOS ARM 64-bit. RAD Studio is interfacing with Skia by leveraging the Skia4Delphi open-source project but includes additional capabilities not found in the open-source projects, like the Vulkan driver.
  • Skia-based UI Controls - The Skia library integration offers some new specific native controls and components. These controls are available only if Skia is enabled and deployed to the target platform.
    • TSkAnimatedImage: The control that loads and renders animated images, including vector animations.
    • TSkLabel: Implements new features that were either not supported by TLabel or were difficult to implement, such as:
      • Font families (font fallback list like in CSS).
      • Font weight and slant.
      • Support for multiple styles in text.
      • Support for BiDi (Right-to-Left).
      • Support justify horizontal alignment.
      • Supports background color on parts of the text.
      • Auto size option.
      • Advanced decorations (underline wavy, overline, dashed line, and more).
    • TSkPaintBox: Control for painting with Skia APIs directly on the screen with the OnDraw event.
    • TSaAnimatedPaintBox: Allows setting the duration of an animation and drawing the progress of this animation using Skia APIs through the OnAnimationDraw event.
    • TSkSVG: Control to display SVG.
  • FireMonkey Skia Rendering - With Skia support, replacing the default Canvas from FMX with Skia-based Canvas is now possible. Once Skia is enabled, all FMX controls will be painted using Skia-based implementation automatically. Improving the performance and the quality of the drawings for the FMX (mainly on mobile) and the whole library.
  • Vulkan Backend - The Skia with RAD Studio offers Vulkan backend support for Android and, optionally, for Windows. Skia Canvas with RAD Studio automatically utilizes Vulkan on Android if supported, resulting in enhanced graphical performance and energy efficiency compared to OpenGLES.
  • Skia Shading Language (SKSL) - When using the Skia app rendering with GPU acceleration instead of rasterization, Firemonkey leverages the SKSL to render effects and filters. This approach provides improved performance compared to the current method and enhances Skia Canvas's efficiency.
  • Animated Codec: WebP Encoder - The Skia version integrated with RAD Studio supports the encoding of animated WebP. With Firemonkey's new animated codec foundation, it is possible to register new encoders capable of encoding and/or decoding.
  • Printer Support and Printing to PDF - When Skia is enabled, Firemonkey's native Printer for Windows will use Skia as its backend for the physical printer and ensure support for all other platforms through PDF document printing, with the optional XPS printing also available when the target is Windows. On iOS and Android, the printer will generate a printable file, which will be automatically shared upon completion.

Delphi Compiler

  • Long and Multiline String Literals
    • String literals can now be longer than 255 characters which means they are not limited to the classic Pascal ShortString type. Notice that the length of a literal string might still be constrained by the editor's limitations (at 4K characters per line).
    • The language adds support for multiline strings so that there is no longer any need to concatenate the lines into single-line strings with a + sign, as in the past.
  • NativeInt as a Weak Alias - This release introduces a significant compiler change that primarily affects how overloading works for some integer types and the compatibility of 32-bit and 64-bit code. The Delphi compiler has a "floating" type called NativeInt (or NativeUInt), which matches the platform bitness. Starting with this release, NativeInt becomes a "weak alias", meaning users cannot use it anymore or a separate type.
  • Support NaN comparisons as required by IEEE - IEEE requires that all comparison operations involving NaN return false. The Delphi Win32 compiler now works according to this rule.
  • Improved Warnings in Generic classes - Code in generic classes was not showing the same warnings as non-generic code in several scenarios.
  • New LLVM Symbol - Added the LLVM predefined symbol to all LLVM-based Delphi compilers.
  • Delphi Exporting the uses Graph in a GraphViz file
    • The Delphi compiler has a new feature to help users understand the structure of a project and avoid unneeded circular unit references, which can slow down compilation and cause negative side effects on the compiler itself when combined with other language features.
    • The compiler has a new --graphviz option, that generates a unit dependency graph in a .gv GraphViz file, which can be later processed by various tools and even online.
  • Quality Improvements
    • Optimized generated code for div operations when the divisor is a constant
    • The hidden "high bound" parameter type for an open array parameter has been changed from Integer to NativeInt, an alias of Integer or Int64, depending on the target CPU. This means that Length, High, and Low for open array parameters in 64-bit compilers now return 64-bit value.
    • The Delphi compiler now offers detailed information in case of a circular unit reference error. Expanding the error message now provides additional information regarding the actual sequence of unit references leading to the circular unit reference.

Delphi RTL and Data Improvements

  • Delphi RTL
    • GetCompilerVersion and GetRTLVersion - This release adds two new functions to the System unit:
      • GetCompilerVersion - Returns the Compiler version number of this system unit when it was compiled. The upper byte holds the Compiler's major version, and the lower byte holds the Compiler's minor version.
      • GetRTLVersion - Returns the RTL version number of this system unit when it was compiled. The upper byte holds the RTL's major version, and the lower byte holds the RTL's minor version.
    • Disabling Floating-Point Exceptions on All Platforms - Changed the default value of the RTL floating-point exception settings: Default8087CW, DefaultMXCSR, DefaultFPSCR, and DefaultFPSCR. Aiming to disable all floating-point exceptions by default if a floating-number operation detects incidents. All platforms (Windows, macOS, iOS, Android, and Linux) and C++Builder are affected. Users can manually re-enable FP exceptions in an application at the thread level.
    • List, Arrays, and Collections Improvements
      • For TList and descendant classes, the "List Index out of bounds" error message has been enhanced to include the index being used and the valid range (or the fact that the structure is empty). It includes the class name.
      • Optimized the TSparseArray.Add function.
      • Added new TArray methods: IndexOf, LastIndexOf, Contains.
      • Changed how TDictionary creates hash keys for the same size as the hash for key types. Also, some of the GetHashCode functions have been improved.
      • System.Generics.Collections, System.Generics.Default, and System.Classes.TList now use NativeInt instead of Integer for all indexes.
    • Improved Support for UTF files without BOM
      • A new TEncoding.UseBOM property, available in all subclasses, can now be used to change the behavior in earlier versions. This value can be passed as a parameter to a new overloaded constructor. In the code, it is used when reading and writing to a stream.
      • Added new TEncoding.IsBufferValid overloaded methods (with different input values).
      • The TEncoding.IsBufferValid code now uses the Bjoern Hoehrmann algorithm, offering a fast, cross-platform solution.
    • Additional RTL Improvements
      • Added more colors to the System.UIConsts.Colors (used by the StringToColor and ColorToString functions) so that they display in the Object Inspector.
      • The FListeners in TMessageManager are now protected.
      • Added a simplified way to convert a list of elements to a string representation with the specified formatting and delimiters to System.Generics.Collections.TArray.
      • Zip support improvements:
        • Added TZipHeader.ModifiedTime property and support for Deflate64 in TZipFile.
        • Added support for files larger than 4GB on Win64.
        • Added an IZipCryptor interface, with methods Decrypt and Encrypt, to allow customers to plug in encryption support in Zip files.
      • Parallel Programming Library:
        • TThreadPool now offers a way to initialize threads, using the following properties.
          • TThreadPool.InitializeCOM and InitializeCOMFlags properties.
          • TThreadPool.OnThreadStart and OnThreadTerminate events.
        • Added a new configuration in the thread pool, the new UnlimitedWorkerThreadsWhenBlocked property of the TThreadPool class, with a default value of True. Set it to False to revert the behavior to force the system to a hard limit when the MaxWorkerThreads threshold is reached.
      • TPath.Combine in System.IOUtils now has multiple overloaded versions.
      • Added new default path access methods: TPath.GetDesktopPath and TPath.GetAppPath.
      • Added the new CreateImplementation method in the TRttiInvokableType class.
      • Added new enumerators for reading file content:
        • TFile.GetLinesEnumerator.
        • TTextReader enumerator properties.
        • TTextReaderEnumerator methods.
  • Data and Internet
    • JSON and the JSON Data Binding Wizard - Added a new JSON Data Binding Wizard. It allows the creation of Delphi data types based on a JSON data structure.
    • IBLite/IBToGo for iOS Simulator - Added support for embedded InterBase versions for the Delphi iOS Simulator platform.
    • RAD Server - The RAD Server engine is built with the FastMM5 memory manager, which improves performance, specifically in heavy multi-threading scenarios. On average, the benefit is a 5% performance increase. The following sections show more improvements in the RAD Server area.
      • Paging Improvements - Added the option for LIST requests sent to TEMSDataSetResource to specify a dynamic page size in a parameter.
      • Sqids for URLs - By default, when navigating a data structure (e.g., a database table), RAD Server exposes URLs that might include specific information about the records. Therefore, Sqids have been introduced, which are an improved version of Hashids, to encode sensitive data.
      • RAD Server Session Authentication Improvement - The TBackendAuth component allows users to specify a Username and Password. Once logged into RAD Server, users have a session token, which is hard to manage.
      • RAD Server Quality
        • Added RAD Server Console to the Tools menu of the RAD Studio IDE.
        • TBackendAuth.LoggedInValue.ExpiresAt now returns a local time when the authentication token will expire.
        • A client-side OnNeedClientCertificate event is now offered, the same as the OnValidateCertificate event.
    • General Internet Improvements
      • FormatXMLData now includes a parameter to indicate the number of spaces to use for indentation. The default value is 2 spaces.
      • The TWinHTTPClient.DoExecuteRequest method supports data transfer of more than 4 GBr.
      • Added support for HTTP DELETE method with content:
        • THttpClient.Delete/BeginDelete overload methods with AStream argument.
        • TNetHTTPClient.Delete overload method with AStream argument.
      • REST Client Library improvements include:
        • RESTClient now recognizes a response as JSON when the Content-Type is application/vnd.retailer.v8+json.
        • Added a new OnBeforeExecute event in TCustomRESTRequest.
        • For better redirect and cookie management, the following events have been added:
          • THTTPClient.OnRedirect.
          • THTTPClient.OnUpdateCookie.
          • TNetHTTPClient.OnRedirect.
          • TNetHTTPClient.OnUpdateCookie.
        • To improve the support for large files in the TMultipartFormData class (in the System.Net.Mime unit), this release adds:
          • A TMultipartFormData.AddStream overload method.
          • A new AHeaders: TStrings = nil argument in TMultipartFormData methods.
          • A new TProxyAggregateStream class in System.Classes.
        • The HTTP client library uses the underlying operating system APIs to execute HTTP(S) requests by default. The library uses libcurl, a cross-platform and not a Linux-specific HTTP library on Linux. For this reason, RAD Studio adds Curl support on other platforms. This allows for bypassing some of the platform restrictions. For THTTPClient to use libcurl on Windows, users must add System.Net.HttpClient.Linux to the uses clause.
        • Added the ability to access data while it is received in an HTTP (or REST) request, considering there are servers that return the data in logical chunks within a single HTTP request (e.g., AI-focused REST APIs). This release adds the following to account for similar scenarios.
          • In System.Net.HttpClient:
            • IHTTPRequest.ReceiveDataExCallback.
            • IHTTPRequest.OnReceiveDataEx.
            • THTTPRequest.ReceiveDataExCallback.
            • THTTPRequest.OnReceiveDataEx.
            • THTTPClient.ReceiveDataExCallback.
            • THTTPClient.OnReceiveDataEx.
          • In System.Net.HttpClientComponents:
            • TNetHTTPRequest.OnReceiveDataEx.
            • TNetHTTPClient.OnReceiveDataEx.
          • In REST.Client:
            • TCustomRESTClient.OnReceiveDataEx.

FireDAC

  • QBE - Introduced FireDAC support for QBE (query by example) thanks to a new component called TFDQBE, which represents a query-by-example component.
  • FireDAC SQLite Version Update
    • Added support for SQLite 3.42 while maintaining the option of using SQLite 3.31.1 with FireDAC encryption (FDE). Since version 3.42, SQLite dropped the mechanism FireDAC uses for encryption support, so it can no longer be used. Which is why there are three different ways of using SQLite with FireDAC:
      • Use the latest version without FireDAC encryption.
      • Use the paid SQLite EE (with the native SQLite encryption support), which FireDAC has supported since RAD Studio 11.0.
      • Continue using SQLite 3.31.1 or previous versions with FireDAC encryption (FDE).
  • FireDAC and Security
    • Added security-related features for FireDAC. These features and good overall security practices can contribute to developing more secure database applications. The following properties are available under TFDSecurityOptions:
      • AllowedCommandKinds - Limits the execution of SQL commands, preventing a hacker from modifying a query and making unwanted changes to the database.
      • AllowMultiCommands - Enables or disables the execution of multiple SQL commands. It is enabled by default and works only with databases offering the matching feature: SQLite, PostgreSQL, and MySQL.
      • AllowSQLChange - When enabled, this setting avoids changes to the text of a FireDAC SQL query at runtime. A method like DoSQLChanging would invoke CheckCanChangeSQL, now checking for the specific setting (among other conditions).
      • ExactUpdatedRecsNum - It is an Integer with a default value of -1. When it is set to > 0, in conjunction with:
      • FireDAC will wrap SQL UPDATE commands with extra checks.
  • FireDAC Enhancements
    • Added a new property in the FireDAC connection object: TFDCustomConnectionCommandsExecuted. This is a UInt64 value that users can use to determine if a connection is new or if it is being recycled and has already been used to interact with the database. Ideally, when it is 0, no commands have been executed on this connection.
    • The unit FireDAC.Phys.SQLiteWrapper.Stat.pas now uses SQLite 3.42.
    • The new unit FireDAC.Phys.SQLiteWrapper.FDEStat.pas uses SQLite version 3.31.1, with FireDAC encryption (FDE) still available.
    • Added support for Decimal128 in MongoDB.
    • Added support for HTTP protocol for Datasnap.
    • Added support for {INTO } escape sequence for Microsoft SQL Server.
    • Updated TSQLiteEngineLinkage:
      • Added slFDEStatic - FireDAC.Phys.SQLiteWrapper.FDEStat.pas.
      • slStatic - FireDAC.Phys.SQLiteWrapper.Stat.pas.
    • The default linkage mode is now static with SQLite version 3.31.1 with FDE.
    • For Android, Linux, and iOS platforms, only one static linkage unit may be included in a project simultaneously.
    • By moving to a newer version of SQLite, FireDAC can now use DDL commands added to recent database versions, like an ALTER TABLE, including DROP for columns.

VCL and FireMonkey Changes

  • VCL - RAD Studio version 12.0 offers many significant enhancements in the VCL library.
    • MDI Reworked for HighDPI and Styles
      • Custom border for MDI child window - MDI child forms can now have a new modern flat border under Windows 10 and 11 systems.
      • Custom border for forms with Parent Assigned Property - Introduced a new TWinControlHandler class for the TWinControl class and a TChildMessageHandler class to use in the TCustomForm class. This supports having a custom border for MDI child forms and forms with an assigned Parent property.
      • The IFormVisualManager Interface and the VisualManager Property of the TCustomForm class - To add a new control to manage forms, this release introduces a new IFormVisualManager interface. It includes basic methods, which are integrated with the TCustomForm class to get messages and actions from forms to manage them.
    • TFormTabsBar Control
      • This release added a new FormTabsBar control as a universal and ready-to-use solution for hosting multiple child forms in a modern tab-like user interface, as a possible modernization path for existing MDI applications, but also as a way to create brand new applications in VCL.
      • MDI Wizard Update - This release updated the MDI Wizard projects for Delphi and C++Builder. The code generated by the wizard uses:
        • The TActionMainMenuBar component instead of the TMainMenu component.
        • The TImageCollection plus TVirtualImageList combination instead of the TImageList component.
        • A TFormTabsBar control.
    • Fonts and Screens - The VCL library has newly reworked support for font scaling independent from DPI scaling. The changes are primarily in the TFont class of the VCL library.
      • In this release, the TFont class adds the following new methods and properties:
    • Platform Integration
      • This release cleaned up Windows API and WinRT API mappings by refreshing the WinRT APIs and the WebView 2 controls to the most recent versions.
      • WinAPI Delphi Headers from WinMD metadata
        • Created an internal import tool capable of generating Delphi definitions for the classic Windows APIs using the metadata available by Microsoft in WinMD format and made available the first version of those generated units in GetIt.
    • Edge Browser
      • Refreshed the WebView 2 control API to a recent version, WebView2 SDK 1.0.1774.30. This brings support for many new features of the underlying WebView 2 control, including:
        • UserAgent is available in ICoreWebView2Settings.
        • ICoreWebView2Profile2 contains methods ClearBrowsingData, ClearBrowsingDataAll, and ClearBrowsingDataInTimeRange.
      • TEdgeBrowser also has a new method that provides post data or additional request headers during navigation. The headers in ARequest override headers added by the WebView2 runtime except for Cookie headers. The web resource request method must be GET or POST.
    • Tile View Support to TListView
      • The VCL library adds support for this option available in the underlying platform control. This is made available with:
        • Added vsTile value to the TViewStyle enumeration.
        • Added the OnCancelEdit event to the TListView control.
        • Added a new TileOptions property to the control to adjust tile items. This property includes:
          • SizeType: Defines the item size type (auto or fixed size variations).
          • Width and Height of the tile, if a fixed size type is set.
          • LabelMargins: The margins for the label (all text lines) inside an item.
          • SubLineCount the count of lines that can be below the item Caption.
        • Added a new TileColumns property to adjust additional lines inside the item to show sub-item text from columns. The TileColumns property of the control automatically adjusts tile info for all existing items in the list.
    • TControl Enumerator - This release adds a TControl enumerator to the VCL library and the TComponent enumerator. For TComponent, the logic is to scan the components owned by a given component. For the TControl enumerator, the logic is to scan the child controls.
    • New ShowInTaskbar Form property - The TForm class has a new ShowInTaskbar property, controlling if a form should have a matching entry in the Windows taskbar, even if it's not the main form.
    • Desktop Windows Manager Enhancements
      • This release adds support for some of the advanced desktop management features in Windows 11. These features don't work on older versions of the operating system.
      • In the Winapi.DwmApi.pas unit, this release, adds several new DWMWA_xxx constants used to activate some of the new platform features.
      • VCL forms now support the Immersive Dark Mode of Windows 11. Call the new EnableImmersiveDarkMode method of the TForm class to enable it.
    • New Double Buffering Mode - Introduced a new TDoubleBufferedMode enumerated type for all controls, a new DoubleBufferedMode property of that type, and a new CanUseDoubleBuffering method.
  • FireMonkey - For the FireMonkey library, RAD Studio added the new Skia library integration feature. However, RAD Studio version 12.0 introduces other new features and improvements.
    • Android Target API Level 33 - This release updates the Delphi Android support to target API level 33, as Google requires for store submissions. This includes Android libraries improvements and extensions.
    • Split Screen Support - Starting with this release, RAD Studio added support for creating FireMonkey apps for mobile platforms that use only a portion of the available screen, a feature specifically useful on tablet devices with a large screen surface.
    • TEdit and TMemo Improvements - Starting with this release, RAD Studio significantly improved the TEdit/TMemo controls, starting with desktop platforms (Windows and macOS).
    • Important FireMonkey Updates
      • General FireMonkey changes
        • Added new TEdit property AutoSelect and CharCase.
        • TEdit now supports Undo functionality. The recently added TUndoManager is shared between TEdit and TMemo.
        • TMemo implements IME Text inputting like in native TEdit.
        • TEdit now takes into account the foreground brush resource.
        • Improved Shift-clicking selection.
      • For the iOS platform
        • Refactored Virtual Keyboard for iOS: FMX implementation of iOS Virtual keyboard used to align virtual keyboard Toolbar with custom buttons manually moved the logic for toolbar alignment/animation to the iOS side, removed some unnecessary complex code, and facilitated support by shifting most of the logic to iOS platform.
      • For the Android platform
        • Improved the interactive text selection.
        • Adjusted selection Point position and place the left below text selection.
        • Included selection Point for position cursor in TMemo and TEdit.
        • Improved the PointInObjectLocal handles the area when using a style with an offset of objects.
        • Updated platform and premium styles to support improved text selection.
        • Updated generation FireMonkeystyle for TEdit/TMemo/etc. Added CaretPoint for text-input controls for Android.
        • Added support for finger slide gestures to move the cursor on TMemo on Android.
    • All Platforms Single Icon and Android Adaptive Icon - The new Single App Icon Wizard is a comprehensive tool integrated within the RAD Studio IDE, designed to streamline the process of generating icons and splash screens for user applications across multiple platforms. One of its key features is the support for the Android Vector Drawable format, which allows for creating scalable and responsive icons and splash screens specifically for Android devices.
    • Additional FMX Improvements
      • Added new TFontManager for Windows and macOS, allowing for dynamically loading a font in an application.
      • Expanded FMX multitouch support by adding these new fields to the TTouch data type:
        • Id: The unique identifier of the touch. Valid until the moment when the finger was raised off the screen.
        • Location: The touch point.
        • Action: The action that was performed with this touch: putting finger on the screen, lift, move, etc.
      • Added new TWinFormPositionerService which helps FMX manage the screen(s) layout and positions, determine the desktop center, and handle some of the issues with coordinates.
      • Added support for passing ssDouble in Mouse events in case of double click or double tap on mobile platforms. The sequence of mouse operations (in case of double click) for all platforms is now:
        • OnMouseDown.
        • OnClick.
        • OnMouseUp.
        • OnMouseDown (State = ssDouble).
        • OnDoubleClick.
        • [OnMouseMove] (State = ssDouble).
        • OnMouseUp (State = ssDouble).
      • The TLocationSensor ErrorRadius has been implemented for mobile platforms.
      • FireMonkey includes a new Windows 11 style.
      • Added new property FirstWeekMode for FireMonkey Calendar control, choose between ISO8601 and FirstDayOfYear modes.
      • Enabled FireMonkey to remove the TCanvas global lock if using a backend implementation (like Skia) with multithreading support. This can be achieved using the new TCanvasStyle flag DisableGlobalLock.
      • Added a new HeaderSettings property for the TColumn class so that users can specify the style of the column header. This also includes a new HeaderStyleLookup property.

ToolsAPI

  • The code editor has several ways to read and write content. In this release, the existing interfaces have been extended or added new ones to add some high-performance APIs.
  • Specific sample projects are available as part of the product demos:
    • Editor Raw Read Demo.
    • Editor Write Demo.
  • Improvements have been made to the default painting for each text cell (character area) in the editor and other key information for the line state.