Show: Delphi C++
Display Preferences

What's New

From RAD Studio
Jump to: navigation, search

Go Up to Main Page


The Berlin release contains the following new and improved features.

Improved Installation Experience

We have improved the installation experience of RAD Studio to make it much more customizable.

There is a new Installer now that quickly installs a very basic version of RAD Studio that you can use as a plain text editor.

Afterwards, the new Feature Installer lets you select the RAD Studio features (programming languages, target platforms, and more) that you want to have in your initial RAD Studio installation. Only the selected features are installed, which can save you bandwidth, time and disk space.

Later, you can add or remove features from RAD Studio at any time using the new Feature Manager.

Some of the software that the RAD Studio installer from Seattle used to include is now available from the GetIt Package Manager instead. See Optional Additional Software in the Installation Notes for more information.

The RAD Studio installer from Seattle is still available as the Offline Installer, which you can use if your system cannot have a working internet connection during the installation.

See Installation for installation instructions and additional information.


Android 6.0 Support

Android 6.0 (API Level 23) is now supported.

Address Book for iOS and Android

On mobile platforms (Android and iOS), FireMonkey supports the TAddressBook component that lets your applications access the device Address Book. The basic features of this component are as follows:

  • Sending a request to access a device Address Book and getting the access status.
  • Accessing all sources defined in the device Address Book.
  • Fetching all or individual contacts from specified source.
  • Fetching all contacts from specified group(s).
  • Editing or removing existing contacts and groups.
  • Creation of new contacts.
  • Creation of new groups.

For more information and samples, see TAddressBook, and Mobile Tutorial: Using an Address Book Component (iOS and Android).

Improved Style Designer

The Style Designer has undergone several changes and improvements, such as:

  • Clipboard, keyboard and multi-selection support on the Structure view.
  • Preview panel
  • Zooming support

New ListView Item Designer

The listview control now supports a new type of item appearance (also available for the edit mode), DynamicAppearance, that you can use to customize the content of every item in your list view: labels, images, buttons, and so on.

You can also right-click your list view on the Form Designer and select the new Toggle DesignMode entry to enable a visual list view item editor that allows you to visually customize the controls of the items of your list view:


In this design mode, you can use the Object Inspector to add new elements to your list view item design, and use both the Object Inspector and the Form Designer to customize them.

Extended Clipboard Support Service

FireMonkey now has the IFMXExtendedClipboardService interface that adds new features. For example, the IFMXExtendedClipboardService interface allows you to:

  • Register custom user format.
  • Copy/paste data in the custom user format.
  • Get the clipboard value directly.

Improvement on the Image List Editor

Now, the Add Images dialog box of the Image List Editor allows you to add multiple images at once.

Grid Improvements

The presentation logic and the data model of Grid controls have been detached from these. This is a necessary, API-breaking change that makes it possible to add native presentation support to grid controls in the future, among other improvements. See Changes to FireMonkey Grid Controls in Berlin.

Warning: When you migrate an old project that uses grid controls to Berlin, you must include, among other things, the new FMX.Grid.Style unit in one of the uses clauses of your project. This unit is automatically included in new projects.

High DPI Support on Windows

FireMonkey provides High DPI improvements such as the multi-resolution styles for Windows, which provide support for 120 DPI and 144 DPI monitors.

Improved Support for Accelerator Keys

Now, the Accelerator Keys support is available for the following controls:

Support for Extended Font Styles

TFont gains a new property, StyleExt, to handle fonts that have extended types of weight, slant, or stretch.

Hint Property Changes

In the previous RAD Studio versions, Hint was published in all FireMonkey controls that inherit from TControl. Now, the Hint property is published in the FireMonkey controls listed in Changes of the Hint Property in Berlin.

Warning: Make sure that your applications are not using Hint with any control that is not listed in this table. Otherwise, your applications will not compile.

Simplified Dialog API

Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services that provide support for synchronous and asynchronous dialog boxes, respectively.

The following table summarizes the API changes:

Deprecated Members New Members
  • FMX.Dialogs.MessageDlg
  • FMX.Dialogs.MessageDlgPos
  • FMX.Dialogs.MessageDlgPosHelp
  • FMX.Platform.IFMXDialogService.MessageDialog
  • FMX.Dialogs.InputBox
  • FMX.Dialogs.InputQuery
  • FMX.Platform.IFMXDialogService.InputQuery
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync or ShowMessageSync instead nonetheless.

Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper classes provide class methods and functions that allow you to call the new procedures and functions for dialog boxes without the need of an instance of the corresponding dialog box platform service.

Other FireMonkey Changes


  • Ribbon controls are no longer included in the RAD Studio installation. You must install them separately using the GetIt Package Manager.
  • AppAnalytics uses HTTPS instead of HTTP.
  • CreateRoot method from Vcl.Shell.ShellCtrls unit is now virtual. Root fields from the same unit are now protected instead of private.


Apache Server Support

You can now run the EMS Server and the EMS Console in the Apache server on a production environment.

For more information, see installing and running the EMS Server and the EMS Console in Apache server.

Cross-Domain API Calls to the EMS Server

EMS Server now allows cross-domain calls to its API from different domains. For more information, see EMS Server API Cross-Domain.

EMS EdgeModules

EMS now supports the new EMS EdgeModules feature, an extension on the EMS Server functionality.

In Berlin, you can run EMS EdgeModules as stand-alone applications and register them in the EMS Server. The EMS EdgeModule communication with the EMS Server is bidirectional.

For more information about this, see EMS EdgeModules.

EMS EdgeModules Resource

The EMS Console now shows two new tables with all the information about EMS EdgeModule and its resources that are loaded in the EMS Server.

The EMS Management Console Application has two new tabs to easily retrieve, update, and delete the data of the registered EMS EdgeModules and their resources. See Using the EMS Management Console Application for more details about managing the EMS EdgeModules data in the EMS Server.

ThingPoints Overview

Use the new ThingPoint applications to extend the functionality of the EMS Server for the Internet of Things (IoT). A ThingPoint application allows you to collect data from nearby ThingConnect devices, pre- and post-processing IoT data and save it to the EMS Server.

The EMS.ThingPoint IoT Sample demonstrates how to use a ThingPoint application to extend the EMS Server and how this data is consumed by an EMS Client application.

For more information about ThingPoint applications, see ThingPoints Overview.

EMS API Resource

A new resource in the EMS server provides API documentation for all the resources and endpoint methods provided by the EMS Server. The API documentation can be consumed in YAML and JSON formats.

For further information see EMS API Resource.

Custom API Documentation

EMS Server provides now the tools to write API documentation for new resources in extended EMS Server packages. The new documentation is created adding attributes to the new resources and endpoints. The API documentation can be exposed in YAML and JSON formats, and can be accessed via HTTP.

For further documentation see Custom API Documentation.


Support for JSON Streaming

New TDBXJSONStream class to support JSON streaming between DataSnap servers and clients.

Use TDBXJSONStream to read or write a stream of JSON objects, but not simultaneously.

Other DataSnap Changes

  • DataSnap clients no longer depend on OpenSSL or Indy to perform HTTPS requests.

Web Broker

C++ Projects from Previous Versions Using Web.WebReq Need Updating

C++ projects from older versions, such as DataSnap, Web Broker, and Web Services applications using the Web.WebReq unit, need to update the code for compatibility with RAD Studio Berlin.

These projects need to remove the following line from the cpp project file:

#pragma link "Web.WebReq"

Other Web Broker Changes

  • String handling has been improved:


Improvements for DB2

Improvements for MongoDB

Improvements for Advantage

  • For Advantage v12 and later:
  • Improved support for encrypted tables:

Improvements for InterBase

Improvements for Firebird

Improvements for Informix

Improvements for ODBC

Improvements for Oracle

Improvements for PostgreSQL

  • For PostgreSQL 9.2 and later:
  • For PostgreSQL 9.3 and later:
    • Support for object identifying error fields. To this end, the following properties have been added to FireDAC.Phys.PGWrapper.TFDPgError:
      • SchemaName: contains the name of the schema that contains the database object associated with the error.
      • TableName: contains the name of the table associated with the error.
      • ColumnName: contains the name of the table column associated with the error.
      • TypeName: contains the name of the data type associated with the error.
      • ConstraintName: contains the name of the constraint associated with the error.
  • For PostgreSQL 9.4 and later:
    • Support for JSONB data type.
  • Support for PostgreSQL client and server version 9.5.
  • Improved support for constrained arrays:

Improvements for SQLite

  • SQLite binaries updated to version 3.9.2.
  • For SQLite v3.8.9 and later:
    • Support extended info about index columns, including whether they are descending or ascending, or whether they are base columns or expression columns.
    • Support for indexes on expressions.
  • For OS X:
    • Prebuilt, optimized client library. You should deploy libcgsqlite3.dylib when you build applications for OS X that use FireDAC and SQLite.
    • Support for static linkage, using libcgsqlite3.dylib.
    • Support for encryption.

Other FireDAC Changes

Cloud Service


AmazonAPI gains support for:


REST Client Library

  • The REST.Exception unit is now deprecated. Its classes belong to the REST.Types unit now.


  • Evaluation shortcuts are a new feature of some binding components, enabled by default, which greatly improves the performance of LiveBindings when populating list-based or table-based controls using simple binding expressions. See Using Evaluation Shortcuts.
  • The TConverterUtils class from System.Bindings.Outputs is now public. TConverterUtils provides a set of utilities for assigning/converting one type of value to another type of value.

ThingConnect IoT Connectivity Framework

Note: ThingConnect components are available as separate downloads via the GetIt Package Manager.

ThingConnect turns off-the-shelf and custom Internet of Things (IoT) smart devices, sensors and wearables into easy-to-use API components. For more information, see the ThingConnect documentation.


Note: BeaconFence is available as a separate download via the GetIt Package Manager. For BeaconFence installation instructions, see the following page.

We have added new features to BeaconFence in RAD Studio Berlin. The BeaconFence enhancements include:

  • Detect zones using Position or PositionInPath.
  • Beacons support on Windows platform.
  • Customize function of current position.
  • Support for Eddystone Beacons.
  • Improved calculation performance.
  • New drawing ability.
  • Added two properties to access last calculated positions:
    • LastRawPosition
    • LastPathPosition
  • New feature to enable/disable Beacons by program. The UseToPositioning property indicates whether the beacon is going to be used to calculate the position or not.


Bluetooth LE and Beacon Support on Windows 10

RAD Studio Berlin provides the new WinRT Bluetooth API that supports Bluetooth Low Energy and Beacons on the Windows 10 platform. Now, you can run appplications on Windows 10 that allow you to:

Improved Bluetooth LE Discovery Performance

The RTL provides a new BLE scan filter implementation that takes advantage of the new BLE low consumption chips.

Now, you can scan for specific BLE devices using customized independent scan filters. To that end you can:

Bluetooth LE Includes New Events to Handle Subscriptions to Characteristics

The TBluetoothLE component provides two new events to handle suscriptions to GATT server characteristics:

OnConnect and OnDisconnect events, already existed and have been now included in the TBluetoothLE component:

  • OnConnect event triggers when you connect to a remote GATT server device.
  • OnDisconnect event triggers when you disconnect from a remote GATT server device.

Eddystone Beacon Format Support

The RTL adds support to use beacons with Eddystone format. There are three possible types:

Improved Beacon Scan Performance

The addition of new BLE scanning filters allows to improve the beacon framework in order to:

Now, you do not need to register a beacon you want to monitor. Instead, you can:

  • Set the Extended mode on your TBeacon device.
  • Specify the non-registered beacons to monitor in the ModeExtended property.
  • Use the new StartScan method in order to scan for the specified beacons.

Note: The last step allows to scan for several kind of beacons simultaneously.

For further information, see how to register beacons and how to scan for beacons.

TBeaconDevice Component Supports Eddystone Beacon Format

The addition of the Eddystone beacons allows to provide support for this format in the TBeaconDevice component.

Now, the TBeaconDevice allows you to run applications on your BLE device that advertise proximity data with the specificationsof an Eddystone beacon.

You can select EddystoneUID and EddystoneURL formats through the BeaconType property.

Platform support:

  • Android devices allow to advertise the Eddystone format with version 5.0 or higher.
  • iOS devices only allow to advertise iBeacon frames.
  • Windows devices do not admit the Eddystone format since the WinRT API for BLE does not allow to customize the advertised ServiceData.

App Tethering Improvements

App tethering gains the following features:

Asynchronous HTTP Request Support

You can now send HTTP requests asynchronously so that the execution of your application does not stop during a download.

If you use the HTTP client components, see Making Requests Asynchronous. If you use the HTTP client API, see THTTPClient.

Encrypted ZIP File Support

TZipFile provides an event (or a callback) that you can handle to decompress encrypted ZIP files, such as password-protected ZIP files, when you extract them.

Improvements to Lists of Strings

TStrings and subclasses such as TStringList gain the following features:

  • AddPair, to add key-value pairs to the list of strings using fluent-style coding.
  • KeyNames, to obtain a list of keys from a list of strings that contain key-value pairs.
  • Options, to easily control many of the boolean properties of the list of strings.
  • SetStrings, to copy the strings from another TStrings object. It is similar to Assign, but without coping the multiple properties that Assign copies.
  • TrailingLineBreak, which determines whether or not the Text property must contain a line break after the last line.
  • Updating, which indicates whether or not the list of strings is in the middle of an update.
  • UseLocale, which determines the implementation that the list of strings must use for string comparison.
  • ExtractName gained a new field (AllNames) that determines the return of ExtractName when the string to parse is not a key-value pair.

TStringList also gains new overloaded constructors, to make it easier to create initialized instances of TStringList.

Improvements to TMemIniFile

TMemIniFile gained the following features:

Buffering Support for TFileStream

TFDFileStream has been moved from FireDAC.Stan.Util to System.Classes and has been renamed to TBufferedFileStream.

TBufferedFileStream is a TFileStream descendant that optimizes multiple consecutive small writes or reads. In other words, TBufferedFileStream adds buffering support to TFileStream.

Note: TBufferedFileStream does not give performance gain for random position reads or writes, or large reads or writes.

Modified JSON Path Syntax to Access Object Properties

Supported JSON path syntax to access object properties that contain dots in their names has changed in Berlin:

Syntax Example Seattle Berlin







Optimization of Regular Expressions and String Replacement

The use of regular expressions is now optimized in two ways: the execution time and the memory consumption.

Regarding the execution time, the following table shows an example of the speedup using the optimized regular expressions on Windows and Android platforms. These examples were calculated for a simple regular expression parse (170 kB file).

Platform Execution Time (ms) Speedup
Before Optimized
Windows (Intel i7, Windows 7) 5900 29 ~310x
Android (Motorola E(2nd gen), Android 5.0.2) 47075 420 ~111x
Note: The values of speedup shown in this table are specific for this example. The speedup that you may obtain could vary depending on the specific regular expression and the processing machine.

Regarding the memory consumption optimization, now, a huge number of matches does not significantly affect the consumption of memory.

The performance of the StringReplace function has been improved as well.

HTTP Connection Improvements

  • Two new timeouts: ConnectionTimeout and ResponseTimeout for the HTTP framework and component.

URLEncode / URLDecode Functions

URL Encoding and Decoding functionality has been moved to System.NetEncoding.

System.Net.URLClient.TURI.URLEncode and System.Net.URLClient.TURI.URLDecode functions are now deprecated. Use System.NetEncoding.TURLEncoding.URLDecode and System.NetEncoding.TURLEncoding.Encode instead.

New functions added to System.NetEncoding:

Use TMessageBase Instead of TMessage for C++ Projects

TMessage class from System.Messaging has been renamed to TMessageBase in order to avoid ambiguities in C++ projects that include other units that also handle messages, such as Winapi.Messages.

TMessage remains now an alias to TMessageBase.

C++ Functions added to TRect, TRectF, TPoint, and TPointF Types

New C++ functions added to System.Types:

Other RTL Changes

Native APIs

Delphi Compilers

Performance Improvement when Compiling Generics

Delphi compilers have undergone several changes regarding generics, which resulted in the following improvements:

  • Parsing generics is up to three times faster.
  • Performance of DCC32, DCC64 and DCCOSX when linking projects that use generics extensively has been improved.

Attributes Supported by All Compilers

Now, all Delphi compilers support the following attributes:

Other Delphi Compiler Improvements

  • The memory allocated to conditional symbols has been extended from 256 bytes to 4096 bytes.
  • The size of Extended is now 16 bytes to be compatible with BCCOSX.
  • To enforce visibility semantics, class and record helpers cannot access private members of the classes or records that they extend.

C++ Compilers


BCCAARM and BCCIOSARM have been updated to use Clang 3.3 and LLVM 3.3.

Better C++ Support for Delphi Types

In Clang-enhanced C++ compilers:

C++ Option Changes

In Clang-enhanced C++ compilers:

  • The -PC command-line option used to enable parallel compilation on the command line is now deprecated. Use --jobs=<N> instead. For more information see using parallel compilation.
  • The -fmath-errno command-line option, which is used to require the math functions to indicate errors, is now configurable from the IDE. You can find it on the Floating Point Options from Project > Options > C++ Compiler > Advanced. By default, it is enabled for the Clang-enhanced C++ Compilers.

Other C++ Compiler Changes

  • Now, the BCC32C compiler provides dependency checking. The Make command compiles only those files that have changed since the last build, as well as files whose dependencies have changed.
  • The compiler-rt library is now available for BCC32C and BCC64.

Removal of Legacy Headers

Note: Legacy headers are provided only for Windows and OSX. You must not #include the legacy header for iOS or Android in any case.

As warned in C++ Changes for XE8, the legacy headers have been removed in the following cases:

  • Units introduced in RAD Studio XE2 or later. This change can lead to errors if you introduce non-qualified headers instead of fully-qualified headers. For example, for using the unit System.SysUtils, enter #include <System.SysUtils.hpp> instead of #include <SysUtils.hpp>.
  • Some units introduced before RAD Studio XE2 such as Soap.SOAPMidas. In this case, Soap.SOAPMidas is both the name of the unit and the name of the package. Therefore, to avoid name conflicts, use #include <Soap.SOAPMidas.hpp> instead of #include <SOAPMidas.hpp>.
  • DirectX translation headers.


Floating Form Designer

You can now detach the form designer in both, VCL and FireMonkey. You can enable or disable the embedded designer in the Form Designer Options. To detach the form designer, go to Tools > Options > Form Designer, clear the Embedded designer check box,and click OK. The changes take effect next time you start the IDE.

FireUI Live Preview

FireUI Live Preview is a new tool included in RAD Studio to broadcast the active form of the application being designed to several devices simultaneously to see how the application design looks in real time.

FireUI Live Preview consist of two parts:

FireUI Live Preview (IDE) needs no additional installation and comes with the default configuration. To configure additional IDE options, see FireUI Live Preview (IDE Options).

For information on how to obtain the client, see How to Obtain FireUI App Preview.

GetIt Dependencies

New project options page to manage GetIt dependencies.

In this dialog box you can set the dependencies of the project in relation to GetIt Package Manager packages.

You can find the GetIt Dependencies options page in Project > Options > GetIt Dependencies.

Bookmark Stack

The bookmark stack is a method of navigating through your source code, adding bookmarks to your code in a pile order; you can then navigate back through your bookmarks moving to the last bookmark of the pile, therefore to the last bookmark that was placed.

For further details, see Stack Bookmarks and Using the Bookmark Stack.

Selection Expansion

The selection expansion allows you to select the identifier under the cursor and expand the selection to larger syntactic groups such as statement, line, block, method, and so on. Use the CTRL+W shortcut to start and expand the selection.

For further details, see Selection Expansion.

Method Toxicity Metrics

The new Method Toxicity Metrics project page (Project > Method Toxicity Metrics) shows metrics about the functions of your active project that you may use to find methods that are good candidates for refactoring. You can export your metrics in CSV format, and customize the thresholds for key metrics in the new Toxicity Metrics options page.

Structure View Improvements for C++

The Structure View has undergone several improvements for C++, such as:

Android Service Improvements

For further details, see Creating Android Services.

Support for Running iOS Ad hoc Applications

Now, you can run iOS applications that are built using the Ad hoc platform configuration from the IDE.

Customizable info.plist File

You can customize your info.plist file for OS X and iOS applications.

Design-Time Improvements for Android Smart Watches

Now, the Form Designer provides:

  • Two specific views for Android smart watches.
  • A preview of the design area for four different Android smart watches.

For more information see Creating Applications for Android Smart Watches.

New Options Page for File Associations

In previous versions, you had to select which file extensions you wanted to associate with RAD Studio during the installation process.

You can now configure RAD Studio file associations on the new File Association options page.

New Option to Show Information Messages from the Delphi Compiler

Now, the IDE allows you to show information messages from the Delphi compiler in the Messages View output tab.

In Project > Options > Delphi Compiler, you can check the Show general messages option for your project.

New Option to Hide/Show the Navigation Toolbar

Now, the IDE allows you to hide the Navigation Toolbar in the Code Editor.

The new Show Navigation Toolbar option is located at Tools > Options > Editor Options > Display.

See How to Hide the Navigation Toolbar for more information.

High DPI Awareness

The IDE has become DPI-aware. It provides a better user experience on systems that use a DPI value higher than 96 PPI.

Other IDE Changes

  • The CPU View supports debugging iOS and Android applications.


iOS and Android Debuggers

64-bit iOS Debugger

The 64-bit iOS debugger gains the following features:

  • Unicode support.
  • Improved support for Delphi arrays, strings, and characters.
  • Support for non-zero-based arrays.
  • Support for evaluating properties and variants.
  • Ability to define breakpoints in C++ header files.


  • The Java2OP.exe tool now works with JDK 8.
  • New SdkTransform.exe tool. It can be used to convert Objective-C or C++ headers to Delphi headers.

Sample Applications

New sample applications added to Berlin:



See Also

Personal tools
In other languages
Previous Versions