Even though it has been a couple of months since we launched RAD Studio 13, C++Builder 13 and Delphi 13, we at Embarcadero haven't really blogged about the new features in the runtime libraries. For this reason, I'm writing a few blog posts focusing on different areas and starting with the FireMonkey library.

Now there are many new features, very complex ones (some of which have been covered a bit more) and smaller ones. My "13 Top Features" list is a personal selection of changes I find impactful. It's a personal list, as the title implies, as there are other new features you might find more interesting than what I've selected. Also notice that this list is focused on new features, but the R&D team also addressed a large number of issues and inconsistencies, and worked on platform APIs and integration.

FMX 1: New ApplicationEvents component

RAD Studio 13 introduced a new TApplicationEvents component, which makes it much easier to handle application wide events, without having to manually create an event handler and wire it up. Just drop the component on a design surface (even a non visual designer) and add even handlers:

Notice that while the concept is similar to the VCL counterpart, the actual events are different and depend on the FMX applications lifecycle. In the example captured in the picture above, I'm handling the OnOrientationChanged event, which is generally used on mobile.

FMX 2: OnCheckedChange

There is a new OnChangeCheck event for a ListBoxItem in a ListBox control, as shown below:

FMX 3: TComboEdit AutoComplete

The TComboEdit component now supports autocompletion while typing, similar to VCL TComboBox. As you type, the control suggests the first items in the list matching the current input. In this case, the combobox has a list of numbers, and typing "t" suggests "two":

FMX 4: Reverse TrackBar

The TTrackBar control has a Reverse property, which allows the reverse of the trackbar direction. 

FMX 5: Mouse Wheel for Trackbar

The same TTrackBar control now also supports mouse wheel scrolling, instead of keyboard scrolling. Notice that a reverse trackbar still scrolls in the expected direction.

FMX 6: New Alignments

The TAlignLayout enumeration includes new alignment options for centering controls, on top of a very long list of existing alignment options. New alignment modes include:

  • TopCenter, like TAlignLayout.Top, centers the control horizontally
  • TopLeft, like TAlignLayout.Top, aligns the control to the left.
  • TopRight, like TAlignLayout.Top, aligns the control to the right.
  • LeftCenter, like TAlignLayout.Left, centers the control vertically.
  • LeftTop, like TAlignLayout.Left, aligns the control to the top.
  • LeftBottom, like TAlignLayout.Left, aligns the control to the bottom.
  • RightCenter, like TAlignLayout.Right, centers the control vertically.
  • RightTop, like TAlignLayout.Right, aligns the control to the top.
  • RightBottom, like TAlignLayout.Right, aligns the control to the bottom.
  • BottomCenter, like TAlignLayout.Bottom, centers the control horizontally
  • BottomLeft, like TAlignLayout.Bottom, aligns the control to the left.
  • BottomRight,like TAlignLayout.Bottom, aligns the control to the right.

FMX 7: Hints and Styles for BindNavigator

The navigator control used in Live Bindings, TBindNavigator, offers the option to configure a specific Hint and Style for each of the buttons of the navigator, using the subproperties of the ButtonsOptions property.

FMX 8: TPresentedScrollbox Improvements

The TPresentedScrollBox control has a new set of properties for the user to control the scroll animation, the bounces, and the touch interaction:

  • The property AutoHide defines whether scrollbars are automatically hidden when the scroll is done.
  • The property Bounces indicated whether it is possible to scroll the content beyond the borders.
  • The property ScrollAnimation enables or disables the scrolling animation
  • The property ScrollDirections defines the available scroll directions
  • The property TouchTracking indicates whether the control responds to touch events.

There is also a new IsVisibleChild method, which the team used to optimize TScrollBox and TPresentedScrollBox rendering.

FMX 9: Memo TextPrompt

RAD Studio 13 adds a TextPrompt property to the TMemo control in FireMonkey. This is used for placeholder text when the control's text is empty. Works like the TEdit counterpart. You can see an example below:

FMX 10: The New Display Link Service

This is a fundamental change to FireMonkey, which would deserve its own detailed blog post.

The new Display Link Service is now the central engine for all application animations, entirely replacing the legacy timer-based engine previously used. This frame-accurate system leverages the display's actual refresh rate to synchronize and drive all UI updates and animations. By utilizing platform-native APIs such as JChoreographer (Android) and DisplayLink (iOS), the service ensures that animation processing is tightly aligned with VSync events, resulting in smoother and more consistent visuals across all platforms, especially on high-refresh-rate and modern mobile devices.
This improved stability and smoothness of animations is visibly noticeable: by giving greater stability to the renderer, it makes animations more fluid. This is a significant change and enhancement, bringing FMX animation on par with, and in some cases, faster than other mobile solutions. This improvement is visible across all target platforms and GPU drivers that FireMonkey can use.

FMX 11: Flexible Menu Item Height

The height of menu items (TMenuItem) used to be a constant value. Starting with RAD Studio 13, the user can add a TStyleTag object with StyleName="height" to the TMenuItem style and specify the menu item height in the Value property.

FMX 12: Even More Emoji

We added support for the 16.0 version of Emoji symbols

FMX 13: A New MaskEdit Control

There is a brand new MaskEdit control for FireMonkey, which works similarly to the VCL counterpart. It includes a specific designer for input masks, to help define the input rules. You can see this property editor at design time in the image below:

There is only one significant difference, compared to the VCL version of the control, in how incorrect input is managed by the TMaskEdit in FMX. In the FireMonkey implementation, rather than raising an exception if the current value in the MaskEdit is not valid, the control fires an OnValidateError event. It's recommended to handle this event to provide any visual feedback to the user about invalid value. For example, you can highlight the field with a red outline, add an accompanying label about an incorrect value, or even throw an exception, as in VCL control. If the value is still incorrect after the focus is reset, the control remains in an invalid state, and the OnChange event is not triggered until the value becomes valid.

FireMonkey Keeps Improving

As you can see in this blog post FireMonkey keeps improving in terms of features (and quality, something I've not highlighted here) and while we are adding VCL-like controls and components, we try to do so in a way that offers more flexibility and it can work fine also on mobile. Some of the features, like the improved animation support, are mobile-first. The goal remains to offer a multi-device framework and the ability to have a single source code across desktop and mobile, but at the same time offer everything you need for building mobile-only or desktop-only applications.

Stay tuned for more blog posts with lists of features in other RAD Studio libraries.