What's New
Go Up to Main Page
Contents
- 1 Improved Installation Experience
- 2 FireMonkey
- 2.1 Android 6.0 Support
- 2.2 Address Book for iOS and Android
- 2.3 Improved Style Designer
- 2.4 New ListView Item Designer
- 2.5 Extended Clipboard Support Service
- 2.6 Improvement on the Image List Editor
- 2.7 Grid Improvements
- 2.8 High DPI Support on Windows
- 2.9 Improved Support for Accelerator Keys
- 2.10 Support for Extended Font Styles
- 2.11 Hint Property Changes
- 2.12 Simplified Dialog API
- 2.13 Other FireMonkey Changes
- 3 VCL
- 4 EMS
- 5 DataSnap
- 6 Web Broker
- 7 FireDAC
- 7.1 Improvements for DB2
- 7.2 Improvements for MongoDB
- 7.3 Improvements for Advantage
- 7.4 Improvements for InterBase
- 7.5 Improvements for Firebird
- 7.6 Improvements for Informix
- 7.7 Improvements for ODBC
- 7.8 Improvements for Oracle
- 7.9 Improvements for PostgreSQL
- 7.10 Improvements for SQLite
- 7.11 Other FireDAC Changes
- 8 Cloud Service
- 9 REST Client Library
- 10 LiveBindings
- 11 ThingConnect IoT Connectivity Framework
- 12 BeaconFence
- 13 RTL
- 13.1 Bluetooth LE and Beacon Support on Windows 10
- 13.2 Improved Bluetooth LE Discovery Performance
- 13.3 Bluetooth LE Includes New Events to Handle Subscriptions to Characteristics
- 13.4 Eddystone Beacon Format Support
- 13.5 Improved Beacon Scan Performance
- 13.6 TBeaconDevice Component Supports Eddystone Beacon Format
- 13.7 App Tethering Improvements
- 13.8 Asynchronous HTTP Request Support
- 13.9 Encrypted ZIP File Support
- 13.10 Improvements to Lists of Strings
- 13.11 Improvements to TMemIniFile
- 13.12 Buffering Support for TFileStream
- 13.13 Modified JSON Path Syntax to Access Object Properties
- 13.14 Optimization of Regular Expressions and String Replacement
- 13.15 HTTP Connection Improvements
- 13.16 URLEncode / URLDecode Functions
- 13.17 Use TMessageBase Instead of TMessage for C++ Projects
- 13.18 C++ Functions added to TRect, TRectF, TPoint, and TPointF Types
- 13.19 Other RTL Changes
- 14 Native APIs
- 15 Delphi Compilers
- 16 C++ Compilers
- 17 IDE
- 17.1 Floating Form Designer
- 17.2 FireUI Live Preview
- 17.3 GetIt Dependencies
- 17.4 Bookmark Stack
- 17.5 Selection Expansion
- 17.6 Method Toxicity Metrics
- 17.7 Structure View Improvements for C++
- 17.8 Android Service Improvements
- 17.9 Support for Running iOS Ad hoc Applications
- 17.10 Customizable info.plist File
- 17.11 Design-Time Improvements for Android Smart Watches
- 17.12 New Options Page for File Associations
- 17.13 New Option to Show Information Messages from the Delphi Compiler
- 17.14 New Option to Hide/Show the Navigation Toolbar
- 17.15 High DPI Awareness
- 17.16 Other IDE Changes
- 18 Debuggers
- 19 Utilities
- 20 Sample Applications
- 21 Help
- 22 Topics
- 23 See Also
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.
FireMonkey
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:
- TLabel
- TButton
- TRadioButton
- TTabItem of TabControl
- TCheckBox
- TPopupBox.Items of TPopupBox
- TTextControl
- TPresentedTextControl
- TCustomAction
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 |
---|---|
|
|
|
|
|
- *
ShowMessage
andShowMessageFmt
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
- The new AbsoluteTargetRect property of pickers allows you to define the position where a picker should appear.
- List views show touch animations on Android.
- AppAnalytics uses HTTPS instead of HTTP.
- TMediaPlayer now attempts to play the specified media file with the default codec for the target platform if the extension of the media file has not been registered.
- The Double type has replaced the Extended type.
- The deprecated StrokeThickness, StrokeCap, StrokeDash, and StrokeJoin properties of TShape are deleted. Use the integrated TShape.Stroke property having the TStrokeBrush type. TStrokeBrush objects have the Thickness, Cap, Dash, and Join properties that should be used instead of the deleted deprecated properties.
- IFMXWindowService.GetWindowScale is deprecated now. Use the Scale property of the handle of a form to get the scale of its window.
VCL
- 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.
EMS
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.
ThingPoint 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 ThingPoint 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.
DataSnap
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
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:
- The Web Broker API uses UTF-8 encoding by default, instead of ANSI.
- Parameter and result types have changed from AnsiString to String, UTF8String, or TBytes.
FireDAC
Improvements for DB2
- The DB2 native driver and the ODBC bridge driver gained support for DB2 AS/400.
- New connection definition parameter:
TxSupported
allowing to disable the FireDAC transaction management.
Improvements for MongoDB
- Support for database alerts. It uses notifications of insert operations on a MongoDB capped collection. For more information, see Database Alerts (FireDAC).
- New TMongoDocument.Iterate method to iterate document items. See
Object Pascal\Database\FireDAC\Samples\DBMS Specific\MongoDB\ListView
new demo for details.
Improvements for Advantage
- For Advantage v12 and later:
- Improvement on TFDADSBackup and TFDADSRestore to add support for backup archive.
- Support for
GUID
data type.
- Improved support for encrypted tables:
- Ability to provide a single password for all the tables.
- Support for the encrypt/decrypt service.
Improvements for InterBase
- New service component, TFDIBInfo, to query server version, license, configuration and usage information.
- Support for internal streams for BLOB streaming.
- Support for InterBase array data type. See FireDAC.InterBase Arrays new demo for details.
- TIBRestoreOptions.roReplace replaces
TIBRestoreOptions.roCreate
.
Improvements for Firebird
- New service component, TFDIBInfo, to query server version, license, configuration and usage information.
- Support for internal streams for BLOB streaming.
- Support for Firebird array data type. See FireDAC.InterBase Arrays new demo for details.
- TIBRestoreOptions.roReplace replaces
TIBRestoreOptions.roCreate
.
Improvements for Informix
- The TFDInfxError class implements support for returning the ISAM error code.
- New connection definition parameters:
TxRetainLocks
andTxLastCommitted
. - Support for pessimistic locking.
Improvements for ODBC
- New connection definition parameter:
ODBCVersion
=3.8
|3.0
that is used to specify the ODBC driver manager behavior version. Set it to3.8
when your application uses BLOB output parameters and the ODBC driver supports3.8
behavior version. - Support for data type mapping using data type names.
Improvements for Oracle
- For Oracle 10g and later:
- Support for query change notifications into TFDEventAlerter. See
Object Pascal\Database\FireDAC\Samples\DBMS Specific\Oracle\CQN
new demo for details.
- Support for query change notifications into TFDEventAlerter. See
- For Oracle 11g and later:
- New component, TFDOracleAdmin, to manage an Oracle database instance.
- Support for 64-bit and unsigned 32-bit integers.
- Support for implicit ROWID fetching. It is implicitly included into the
SELECT … FOR UPDATE
SELECT list for effective dataset editing. - Support for network timeouts. New
ReadTimeout
andWriteTimeout
connection definition parameters.
- For Oracle 12c and later:
- Support for 32K VARCHAR2, NVARCHAR2, and RAW data types.
- Support for native BOOLEAN in PL/SQL.
- Support for identity columns, which are recognized as auto-incremental fields.
- Support for implicit results. You may use NextRecordSet to process them.
- Improved transaction state detection and synchronization.
- Support for new authentication modes in the
AuthMode
connection definition parameter:SYSASM
,SYSBACKUP
,SYSDG
, andSYSKM
.
Improvements for PostgreSQL
- For PostgreSQL 9.2 and later:
- Support for JSON data type.
- Support for Range types.
- 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.
- Support for object identifying error fields. To this end, the following properties have been added to FireDAC.Phys.PGWrapper.TFDPgError:
- 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:
- New connection definition parameter:
ArrayScanSample
that is used to determine whether arrays are mapped toftArray
orftDataSet
. - The
TFDParam.ArrayType=atTable
can be used to send arrays to server.
- New connection definition parameter:
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.
- Prebuilt, optimized client library. You should deploy
Other FireDAC Changes
- TFDDataSet.Reconcile no longer commits reconciled changes by default. Also, if you pass
True
toTFDDataSet.Reconcile
, reconciled changes are committed always, even if UpdateOptions.AutoCommitUpdates isFalse
. - The type of TFDVersion changed from Int64 to UInt64.
- The FireDAC.Phys.ODBCBase and FireDAC.Phys.ODBCWrapper units have been moved from the
FireDACODBCDriver240.bpl
package to theFireDACCommonODBC240.bpl
package. - You can specify a set of merging options in calls to TFDDataSet.MergeDataSet.
Cloud Service
Amazon
AmazonAPI gains support for:
- Deleting all messages in a queue.
- Managing the lifecycle of the objects in a buckets with GetBucketLifecycleXML, SetBucketLifecycle and DeleteBucketLifecycle.
Azure
- AzureAPI now supports the following API versions:
- Microsoft Azure Blob Service:
API Version 2015-02-21
- Microsoft Azure Table Service:
API Version 2015-02-21
- Microsoft Azure Queue Service:
API Version 2015-02-21
- Microsoft Azure Blob Service:
- Support for append blobs:
- You can now create append blobs.
- You can append data to existing append blobs.
- Improved access policy support:
- Added support for access policies on queues and tables.
- TPolicy and its subclasses (TBlobPolicy, TQueuePolicy, TTablePolicy) replace TAccessPolicy, which is now deprecated.
- Improved lease support for blobs and blob containers:
- Added support for leasing containers and other operations related to container leases.
- Now, you can change the identifier of a blob lease.
- When you acquire a blob lease, you can now propose an identifier for the new lease.
- Service properties and statistics:
- Added support for properties of the blob service, the queue service, and the table service.
- Added support for statistics of the blob service, the queue service, and the table service.
- Azure services provide a new property, Timeout, which you can use to define a timeout for your requests.
REST Client Library
- The
REST.Exception
unit is now deprecated. Its classes belong to the REST.Types unit now.
LiveBindings
- 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.
BeaconFence
- 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
orPositionInPath
. - 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.
RTL
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:
- Scan for BLE devices that advertise data.
- Send and receive BLE advertising data.
- Send custom BLE advertising data through the manufacturer-specific data.
- Use beacons with iBeacon and AltBeacon formats.
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:
- Create your filter as a TBluetoothLEScanFilter.
- Specify the fields you want to filter your devices by.
- Optionally, for those devices that use ManufacturerSpecificData such as AltBeacons and iBeacons, you can use the TBeaconManufacturerDataHelper helper class, in order to filter by this data. Then pass the TBeaconManufacturerDataHelper content to the filter.
- Finally, add the filter to the filter list and start discovering devices with the new implementation of StartDiscovery.
Bluetooth LE Includes New Events to Handle Subscriptions to Characteristics
The TBluetoothLE component provides two new events to handle suscriptions to GATT server characteristics:
- OnCharacteristicSubscribed is triggered when a remote device subscribes to one of the GATT server characteristics.
- OnCharacteristicUnSubscribed is triggered when a remote device unsubscribes from one of the 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:
- EddystoneUID: The beacon broadcasts an identifier that consists of a Namespace and an Instance.
- EddystoneURL: The beacon broadcasts a URL in a compressed format.
- EddystoneTLM: The beacon broadcasts telemetry information in relation to the beacon status.
Improved Beacon Scan Performance
The addition of new BLE scanning filters allows to improve the beacon framework in order to:
- Scan for any type of beacon at the same time.
- Scan for non-registered beacons.
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:
- Two new network adapters that provide multicast support for IPv4 and IPv6. You can configure your manager to use them.
- You can specify a range of IPv4 addresses as the target of a remote manager discovery.
- Log filtering support. You can enable of disable logging for specific items of the app tethering architecture.
- Profiles can now control whether or not they allow connection requests from remote profiles. As a result:
- The
TTetheringProfile.OnConnectProfile
event has been divided in OnBeforeConnectProfile and OnAfterConnectProfile. - The
TTetheringDisconnectEvent
event type has been renamed as TTetheringProfileEvent.
- The
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:
- You may specify the value for the CaseSensitive property in the call to the constructor.
- The new Modified property indicates whether the INI file has been modified since it was loaded from disk.
- The new AutoSave property determines whether the instance of
TMemIniFile
should save any change to disk when destroyed.
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
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
- The OnConnectedDevice and OnDisconnectDevice events of TBluetoothGattServer gain Android support.
- The string types UTF8String and RawByteString are now supported on iOS and Android.
- The Parallel Programming Library now includes a new record, TThreadPoolStats, that you can use to grab a snapshot of the internal state of a thread pool for diagnostic purposes.
- The getters of THTTPResponse are now public, you no longer need to use the IURLResponse or IHTTPResponse interfaces to use them.
- The
EOperationCanceled
class from the System.Threading unit has been renamed to EOperationCancelled and moved to the System.SysUtils unit. - The RTL has removed the
Winapi.ActiveX
unit dependency from theWinapi.Winrt
unit. - The ShowMessage procedure is now asynchronous on iOS.
- The ToString function from the TTimeSpan type is now public.
- HTTP Client support for automatic decompression of a gzip content encoding response.
- The TZDecompressionStream constructor has a new
OwnsStream
parameter. It is used to determine whether this class owns the compression stream or not.
Native APIs
- The Android Bluetooth LE API, included in the
Androidapi.JNI.Bluetooth
unit, has been updated with new classes and methods according to the changes introduced in API level 21 for Android 5.0 or higher. - RAD Studio provides new units for DirectX 12.
- Units for WinRT are now easier to use.
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
Upgraded BCCAARM and BCCIOSARM
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:
- You can use range-based for loops and STL iterators for strings and for the following RTL containers and derived containers: DynamicArray, TCollection, and TEnumerable.
- You can use lambda expressions in calls to TParallel::For, TTask::Create or TTask::Future.
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.
IDE
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): The IDE acts as a server managing the connections from the devices.
- FireUI App Preview: The client application that the target devices need to connect to an IDE instance.
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:
- Support for C++11 features, such as alias templates or initializer lists.
- Support for functions that return a function pointer.
- Support for unnamed bit fields.
- Improved support for throw.
Android Service Improvements
- New wizard to automatically remove Android Service projects from Multi-Device Applications.
- Project Dependencies automatically enabled:
- This option allows that all the Android Service projects added to a Multi-Device Application are automatically built before the main application.
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.
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.
Debuggers
iOS and Android Debuggers
- Improved support for Delphi Dynamic Arrays.
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.
Utilities
- 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:
- C++ version of samples:
- RTL.RegExpression FMX sample.
- RTL.RegExpression VCL sample.
- VCL.Windows 10 SharingContract sample.
- EMS samples:
- EMS.ThingPoint IoT sample.
- EMS.APIDocAttributes sample.
- FireMonkey samples:
- FMX.Remote Service Demo sample.
- FMX.Birthday Reminder Demo sample.
- FMX.SimplePhysics sample.
- FMX.StreamingMedia sample.
- FMX.GridDemo sample
- FireDAC samples:
- FireDAC.InterBase Arrays sample.
- FireDAC.PostgreSQL Ranges sample.
- FireDAC.PostgreSQL Arrays sample.
- FireDAC.SQLite Encryption sample.
- FireDAC.Oracle CQN sample.
- FireDAC.MongoDB ListView sample.
- RTL samples:
- RTL.ExtendedBeaconScanner sample.
- RTL.HttpAsyncDownload sample.
Help
- CHM files provide a Favorites tab.