What's New in 1.15

From Appmethod Topics
Jump to: navigation, search

Go Up to What Was New in Past Releases

The 1.15 release contains many new and improved features.


FireMonkey Changes for 1.15

FireMonkey Multi-Device Applications Support Both Desktop and Mobile Platforms

You no longer have to choose between creating a desktop application or a mobile application. FireMonkey applications are now called multi-device applications, and by default they can support all the available target platforms.

FireMonkey Uses the New Google Mobile Ads API for Android

FireMonkey now uses the new Google Mobile Ads SDK to provide advertising features on Android devices.

Previously, FireMonkey used the Google AdMob SDK, which is now deprecated. Google announced that on August 1, 2014, the Play Store will stop accepting applications built with the Google AdMob SDK. Please update your existing Android apps to use Google Mobile Ads instead of AdMob. See Using the AdMob Service.

New TMultiView Component

FireMonkey supports the new TMultiView component, which allows you to implement a master-detail interface that can be used for any supported target platform.

  • The master pane can display a collection of any visual controls, such as edit boxes, labels, lists, and so forth.
  • The detail pane typically displays information based on the properties of the controls in the master pane.

For more information about this component and an example application, see Mobile Tutorial: Using a MultiView Component to Display Alternate Views of Information (iOS and Android).

Native Presentation of TEdit and TCalendar on iOS

On the iOS target platform, FireMonkey now supports both styled and native presentations for the TEdit and TCalendar components.

  • By default, when you add any of these components to the Form Designer, Appmethod uses the styled presentation.
  • To use the native presentation on the iOS target platform, set the new TPresentedControl.ControlType property to Platform.

For more information, see TPresentedControl.ControlType and FireMonkey Native iOS Controls

Note: The FMX.DateTimeCtrls.TCalendar class has been moved to its own unit, FMX.Calendar. If your pre-existing apps use TCalendar, make sure that FMX.Calendar is in the uses/includes.

Multi-Display Support

If your application runs on multiple displays, the GUI application framework that you use effectively manages the layout of the user interface of your application on several displays.

If your FireMonkey application runs on multiple displays, TScreen maintains a list and number of active displays and their dimensions and provides methods to obtain the display containing a form or a point.

Multi-Touch Support and Gestures Changes

  • The new FMX.MultiTouch unit contains a TMultiTouchManager.
  • The new OnTouch event handles gestures that are purely gestures (never interpreted as mouse events).
  • TForm and TControl now have an OnTap event for when the user taps using a finger or a similar device (not a mouse).

Full-Screen Immersive Mode for Android

You can enable immersive full-screen mode in your Android 4.4 apps (KitKat). To enable immersive mode, FMX.Forms.TForm.FullScreen must be set to True.

Note that Google Glass apps by definition are immersive full-screen.

Size and PlatformDefault Properties in TControl

A new property, Size, has been added to TControl to provide the management and the storage of the size of a control. The Size property is an object type (TControlSize) that introduces a new field, PlatformDefault, which is set to True by default. PlatformDefault allows controls to automatically resize themselves to the correct, pre-defined size for the run-time platform. The Width and Height properties of TControl remain, but their values are now saved inside the TControlSize object, instead of as separate width and height fields.

PlatformDefault Setting for TTabPosition on Mobile Apps

The FMX.TabControl.TTabPosition enum contains a new value, PlatformDefault, which sets the tab position according to the default behavior of the target platform, as follows:

  • TTabPosition = Bottom for iOS apps
  • TTabPosition = Top for Android apps

See Mobile Tutorial: Using Tab Components to Display Pages (iOS and Android).

FireMonkey Supports the Pull-to-Refresh Feature for TListView on iOS and Android

1.15 provides the Pull-to-Refresh feature for TListView that allows you to pull down the list to refresh the contents. For information on how to enable and use this feature, see PullToRefresh.

FireMonkey Save State Feature

The new FireMonkey Save State feature allows you to save the state of an application before it closes so this state can be recovered once the application is restarted.

To manage this new feature, the form has a new property called SaveState that handles the saving and recovering of this state. This Save State data can be written to or read from at any time, but ideally, the saving of this state should be during the new OnSaveState event and the recovering of this state should be during the OnCreate event.

The Save State of the form can include information such as active tab, text contained in edit controls, checkbox selection, calendar date, current selected item, etc. along with user data. This feature can be used on mobile platforms as well as on desktop platforms.

For further information about this feature, see FireMonkey Save State.

Dialog Box Methods Support Anonymous Methods to Handle Their Closing

In 1.14, calls to dialog box methods (InputBox, InputQuery, MessageDlg, ShowMessage) were always blocking. Any code after a call to one of these methods is not executed until the dialog box closes. Android does not allow blocking dialog boxes, so you could not use these methods on Android.

On 1.15, InputBox, InputQuery, and MessageDlg support a new optional parameter, ACloseDialogProc. Calls that include this new parameter work on all platforms, including Android. This new optional parameter allows you to provide an anonymous method that is called when the dialog box closes. When you call these methods using this new parameter, your call is blocking in desktop platforms and non-blocking in mobile platforms. If you need to execute code after your dialog box closes, use this new parameter to ensure that your application works as expected on all supported platforms. For more information about anonymous methods, see:

If you call InputBox, InputQuery, or MessageDlg and you do not provide an anonymous method on your call, these methods behave as they used to behave in 1.14: calls are blocking on all platforms, including iOS, and Android is not supported.

ShowMessage also gained support for Android in 1.15, and calls to ShowMessage are blocking on desktop platforms and non-blocking on mobile platforms. However, ShowMessage does not provide any new parameter to handle its closing. If you need to execute code after the dialog box that ShowMessage shows closes, use MessageDlg instead of ShowMessage.

Touch-Optimized MetropolisUI Styles Available

Four newly updated MetropolisUI styles are available for FireMonkey (.style files):

  • MetropolisUIBlack_touch
  • MetropolisUIBlue_touch
  • MetropolisUIDark_touch
  • MetropolisUIGreen_touch

These styles have all the UI elements of mobile apps and are touch-optimized. You can access the styles at C:\Users\Public\Documents\Embarcadero\Studio\15.0\Styles.

DesignVisible Property Was Eliminated

FMX.Controls.TControl.DesignVisible property has been removed. Now the Visible property applies to both run time and design time, and the Structure View always allows access to any component at design time.

Refactoring of FireMonkey Libraries

  • FMX.Controls: If you are creating a FireMonkey forms application, the following refactorings should require no code changes on your part, since the FMX.Controls unit is automatically included in FireMonkey forms apps:
  • The FMX.Edit.TNumberBox class has been moved to its own unit, FMX.NumberBox.TNumberBox. If your pre-existing apps use TNumberBox, make sure that FMX.NumberBox is in the uses/includes.
  • FMX.DateTimeCtrls.TCalendar has been moved to its own unit, FMX.Calendar. If your apps use TCalendar, make sure to add FMX.Calendar to the uses/includes.
  • MessageDlg, InputQuery, and InputBox have new overloads containing an anonymous method reference. This change removes previous precautions about using these methods in Android apps.

New Editable Property in TTakePhotoFromLibraryAction and TTakePhotoFromCameraAction

The FMX.MediaLibrary.Actions.TCustomTakePhotoAction base class for taking photos actions, contains a new property, Editable.

The new Editable property allows cropping an image after loading or capturing it using TTakePhotoFromLibraryAction or TTakePhotoFromCameraAction.

See Mobile Tutorial: Taking and Sharing a Picture, and Sharing Text (iOS and Android), Enabling Image Editing for more information on how to use the new property.

Platform Assistant Changes for 1.15

Two New Commands in PAServer

  • v - Toggle verbose mode (verbose mode displays the command-line parameters whenever you issue a command)
  • r - Reset, terminate all child processes

For more information, see PAServer, the Platform Assistant Server Application.

New PAServer Manager App

We have added a new GUI app that runs on the Mac. The PAServer Manager enables you to create and manage multiple PAServer processes for Mac and iOS apps:


For more information, see:

IDE Changes for 1.15

Appmethod Guided Tours

This release includes a new technology to provide Guided Tours to facilitate learning about Appmethod. The Guided Tours consist of a step-by-step walk-through to show specific features and functionality.

These interactive tours display a bubble on each step explaining what you have to do in the step. You must read the instructions and follow all the steps to complete the Guided Tour successfully. You can access a Guided Tour by clicking the appropriate link in the Welcome Page. For further information, see Appmethod Guided Tours.

Changes in the Form Designer for Multi-Device Applications


The new Multi-Device form is a common designer for all platforms (desktop and mobile), with a styled Master form and multiple available views for different form factor and layouts. See Form Designer.

The Designer opens with the default style, the Win32 Master style. The Style drop-down menu allows you to change the Master Form style; you can choose Windows, OS X, iOS and Android. The available components and their properties change depending on the style.

The Master Form is where all the components should be placed and appropriately edited. To design mobile applications, we recommend that you use the steps in the following tutorial: Mobile Tutorial: Using Layout to Adjust Different Form Sizes or Orientations (iOS and Android).

The Views drop-down menu enables you to add predefined forms to your project, such as Android 7 Tablet or iPhone 4. After selecting an available view, the corresponding form is added to your project folder, and a reference clause to the code page. All the views inherit from the Master Form. See Adding Views to Your Multi-Device Project.

The Views allow you to personalize your project for a specific predefined layout. The available views take into account the display resolution of the target device. If you want to personalize your project for a particular resolution, you can add a customized view. See Adding a Customized View to the View Selector for more information.

When you run your project for a particular target, only the corresponding views are included in your application.

Project Files Are Automatically Added to the Deployment Manager

If you add a file to or remove a file from a project using the Project Manager, the Deployment Manager now automatically adds or removes this file. You can add media files, text files or any resource file you want to deploy with your application.

Some files, like database files, require a special treatment because they need database drivers or license files (Featured Files). In this case, the Featured Files dialog box opens automatically so you can choose the necessary files to add to the deployment list.

The Featured Files dialog box includes a new option (Show automatically when required check box) that allows you to disable the automatic adding/deleting of files in the Deployment Manager. If you deactivate this option, Appmethod does not show the Featured Files dialog box automatically anymore; instead, you must open the Featured Files dialog box manually to add or remove featured files.

Entitlement List Added for Android

An Entitlement List page has been added for Android (iOS and Mac OS X continue to support the Entitlement List). You can access the Entitlement List through Project > Options > Entitlement List.

You can set entitlements for your Android apps. For example, you can add advertising to your mobile application or allow your application to receive data from remote servers by using the remote push notification support.

See Entitlement List for more information.

Splash Screen Support for Android

You can now configure a splash screen for your Android applications. Select Project > Options > Application, enable Include splash image, enter the path to your splash screen image, and configure the alignment of your splash screen.

For more information, see Splash Images and how to use 9-patch images in the Splash Screen.

Git Version Control System Integrated in the IDE

Appmethod now supports the Git version control system for your version controlled projects, and some new Subversion features have been added in the IDE.

  • The History Manager now presents integrated Git version control information from your local repository. After you open a project that is under version control by either Git or Subversion, you can find more information in the Contents, Information and Differences tab.
  • When using Subversion support, now you can:
    • Use the new Subversion ChangeList labels to group your changed files before committing them to your remote repository.
    • Use the new SVN merge dialog box to start merging your changes from the IDE.
    • Use the new Subversion switching branches feature to point your local repository changes to a new branch of your remote repository.

For more information, see:

Template:Object Pascal Personality Now Requires SDK for OS X and iOS Simulator

An SDK (Software Development Kit) is required now to develop Template:Object Pascal applications for OS X and iOS (this was previously required only for C++).

A software development kit (SDK) provides a set of files to build applications for a target platform, and defines the actual location of those files on the target platform or an intermediate platform that supports the target platform (for example, Mac OS X provides SDKs for iOS).

For steps to add a new Mac OS X or iOS (Device or Simulator) SDK to your development system from a Mac, see Adding a Mac OS X or iOS SDK.

Add Java Libraries to Your Applications for Android from the Project Manager

In 1.14, to add a custom Java library to your application, you had to manually create and deploy a classes.dex file.

In 1.15, you can simply add your custom Java libraries from the Project Manager, using the new Libraries node that you can find within the Android platform node. See Adding A Java Library to Your Application Using the Project Manager.

Run-Time Library (RTL) Changes for 1.15

RTL API for Bluetooth and Classic Bluetooth Support for App Tethering

The RTL has a new unit, System.Bluetooth, that provides a multi-device API to access the Bluetooth features of the device that is running your application. This new unit provides support for both Classic Bluetooth and Bluetooth Low Energy. See Using Bluetooth.

You can now use app tethering to connect your application using Classic Bluetooth in addition to IP connections.

The following table summarizes the platform support of the app tethering connections (IP and Classic Bluetooth) and the RTL API for Bluetooth:

Platform App tethering RTL API
IP Classic Bluetooth Bluetooth Low Energy
Client Server


Mac OS X





App Tethering Supports Connections Outside Your Subnet

In 1.14, the methods to discover remote devices to connect, AutoConnect and DiscoverManagers, used to look for devices in the subnet of the local area network (LAN) where the device running your application was. As a result, you could not use app tethering to connect devices in different subnets of the same LAN, or devices with completely different IP addresses.

In 1.15, both of these methods provide an optional parameter, Target, that you can use to override this behavior, and specify a target IP address or subnet to search for remote managers. See Connecting to Applications Outside Your Subnet.

Parallel Programming Library

By including the new System.Threading unit in your apps, you can use the new Parallel Programming Library.

For more information, see Using the Parallel Programming Library.

XML Improvements

New Cross-Platform XML Vendor that Improves Performance

In addition to MSXML and ADOM, Appmethod now provides a new XML vendor: OmniXML. The OmniXML cross-platform XML vendor shows much better performance results than the alternative cross-platform XML vendor: ADOM. The OmniXML XML vendor in Appmethod is based on OmniXML, but it includes additional features, such as namespace support, and it is compatible with SOAP.

New System to Select XML Vendors

The RTL provides a new system to define the XML vendor to use, as described in Using the Document Object Model.

The new XML vendor selection system provides MSXML as the default XML vendor. MSXML only supports the Windows platform; if you do not specify a different XML vendor, your application does not have XML support in platforms other than Windows, and you see a run-time exception when you run your application in other platforms.

To choose a different XML vendor, add a reference to the unit of the vendor into the unit where you use the RTL XML features, such as the TXMLDocument class. If you add more than one XML vendor unit, the first unit referenced is used as XML vendor. To override this behavior, you can change the value of the DefaultDOMVendor global variable to the global variable of the target XML vendor.

Note: You can look up the unit and the global variable of each XML vendor in the List of Built-in XML Vendors.

When you use the TXMLDocument component, you can choose an XML vendor using its DOMVendor property. When you change the value of DOMVendor, the unit that uses the component is configured to use the specified XML vendor, so that you do not need to change unit references or the DefaultDOMVendor global variable manually.

To use a different XML vendor for each platform (such as MSXML in Windows and OmniXML in other platforms), use conditional compilation:

New Unit for Web Encoding and Decoding

The RTL provides a new unit, System.NetEncoding, that provides encoding and decoding features for Base64, HTML, and URL.

The following table shows how methods from previous versions of Appmethod map to methods in System.NetEncoding:

1.14 1.15

















Some previously supported methods either support both AnsiString and UnicodeString or only support AnsiString. The new 1.15 methods support only UnicodeString. To use the new methods with AnsiString in 1.15, you must cast your input string and the method result as follows:

Template:Object Pascal:

AnsiStringResult := AnsiString(NewMethod(string(AnsiStringInput)));


AnsiStringResult = AnsiString(NewMethod(UnicodeString(AnsiStringInput)));

PCRE 8.35 for Windows and Mobile Platforms

The PCRE library, which provides support for Perl-compatible regular expressions, has been upgraded in 1.15:

Platform 1.14 1.15

32-bit Windows
64-bit Windows



iOS Device


Mac OS X
iOS Simulator

These platforms use the PCRE version available in the system.

PCRE 8.35 Does Not Accept Group Names Starting with Digits

In 1.14, you could define named groups with names that contained any combination of digits and letters, such as "1" or "2nd". For example: "(?<1>\w+)\s+(?<2>fish)\s*".

In 1.15, which includes the latest version of the PCRE library, it is no longer possible to use group names that start with a digit. That is, you cannot use group names such as "1" or "2nd" anymore. However, you can still use digits in the name as long as they are not the first character of the name, such as "g1" or "my2cents".

zlib 1.2.8

Appmethod includes a new version of the zlib compression library: 1.2.8.

C++ Compiler Changes for 1.15

New Versions of Boost and Dinkumware Libraries for Win64

New versions of Boost and Dinkumware libraries are now installed (both are for Win64 only).

New iOS Headers Added (libcplusplus)

The libcplusplus iOS headers are now being used in Appmethod. These updated headers provide more C++11 features, such as atomics, and default initialization of vectors.

Navigate To command

Appmethod now supports the Navigate To command, which was added to the Find (C++) commands previously available on the context menu in the Code Editor. The Navigate To command searches the entire active project for identifiers and constants that meet the specified search criteria. For more information, see:

Template:Object Pascal Packages No Longer Allow Namespace Selection in Output - C/C++ Options

For C++ Output file generation, options are different for Template:Object Pascal packages vs. executables. For packages, there are two choices (instead of 11 choices for .exe files):

  • Generate DCUs (when you do not plan to use the package from C++)
  • Generate all Appmethod C++ files (including package libs)

This change eliminates potential namespace issues when the Template:Object Pascal package is used in C++ applications.

Template:Object Pascal Compiler Changes for 1.15

String-Like Operations Supported on Dynamic Arrays

  • Dynamic arrays can be manipulated similarly to strings. For example:
  A: array of integer;
  B: TBytes = [1,2,3,4]; //Initialization can be done from declaration
  A:=[1,2,3]; // assignation using constant array
  A:=A+[4,5]; // addition - A will become [1,2,3,4,5]
  • String-like support routines added:

I. The Insert function inserts a dynamic array at the beginning at the position index. It returns the modified array.

  A: array of integer;
  Insert(5,A,2); // A will become [1,2,5,3,4]

II. The Delete function eliminates elements from a dynamic array and returns the modifed array:

  A: array of integer;
  Delete(A,1,2); //A will become [1,4]

III. The Concat function can be used to put together two different dynamic arrays:

  A := Concat([1,2,3],[4,5,6]); //A will become [1,2,3,4,5,6]

Database and Connectivity Changes for 1.15

FireDAC Changes

  • New IBLite driver for desktop and mobile, based on existing IB driver
    • New DriverID = 'IBLite'
    • New TFDPhysIBDriverLink.Lite property
  • Support for DBMS API command native timeouts
    • Supported by FireDAC drivers: Advantage, Informix, and SQL Server
  • FireDAC connection parameters are now displayed in the Object Inspector as records
    • TFDConnection.Params is now of TFDConnectionDefParams base class.
    • Depending on TFDConnection.DriverName, the params are of one of the TFDPhysXxxConnectionDefParams, where Xxx is driver ID.
  • Data Explorer enhancements
    • Primary keys and fields are displayed.
    • Foreign keys and fields are displayed.
    • Sequences/generators are now displayed.
  • Metadata writing capabilities
    • New TFDTable.CreateTable method
    • New poCreateDest option of TFDBatchMove.Options
    • New IFDPhysCommandGenerator.GenerateCreateTable, GenerateDropTable methods

Enterprise Mobility Service

The new Enterprise Mobility Services (EMS) offers a Mobile Enterprise Application Platform that can be hosted in the Cloud or on premises, and exposes REST APIs and enterprise database data.

EMS is developed to offer the customers a comprehensive solution that includes a REST API Server, remote database access, and tracking the usage of the solution. The EMS database stores the activity of users, and the EMS Console creates analytics with this information.

The main components in the EMS architecture are:

  • The EMS Server is the component that provides core functions and services for the EMS Clients. The EMS Server manages the EMS database that stores information such as registered users and the activity of your application (creating the analytics).
  • The REST API is used to access the EMS database data. EMS Clients can access the information in the EMS database by making calls to the REST built-in Administrative API of the EMS Server. You can extend the functionality of the existing EMS Server by creating your own EMS Packages, and registering these resources in the EMS Server.
  • EMS Clients are mobile or desktop applications that can access the EMS Server registered resources by using the REST API. EMS support for FireDAC is provided, so you can create EMS FireDAC Client Applications.
  • EMS Console reads the information that is stored in the EMS Database and shows in your default browser. The EMS Console displays the list of Users and Groups, and shows graphs of analytics that are stored in the EMS database.

In 1.15, new components have been added for EMS in the IDE, such as TEMSProvider or TEMSFireDACClient (to support FireDAC in your client application). You can also use existing BaaS Components, such as TBackendQuery, in your EMS Client applications.

EMS Update includes stability and performance improvements in the EMS Server and EMS Console Server.

  • Connection pooling. You can now connect using FireDAC Connection pooling to reduce the latency establishing the database connection.
  • Allow a maximum number of EMS Users and HTTP connections to the EMS Server.
  • Cross-origin resource sharing for the Web files resources of the EMS Console Server.

Parse Provider Support for Your Android Push Notification Applications

Appmethod REST BaaS framework now supports Parse BaaS as a provider for your Android Push Notification applications. Previously, you could use the Parse provider only for Appmethod iOS apps.

To start receiving push notifications from the Parse BaaS provider, register your Appmethod application as an Android Parse push notification client and configure your Parse cloud service.

For more information, see Mobile Tutorial: Using Remote Notifications (iOS and Android) and Creating the Android Push Application.

BDE Removed

BDE, our oldest database solution, has reached the final stage of deprecation, and has been removed from Appmethod. This includes the Bde.DBBdeWeb and Bde.DBTables units. Instead, use newer database technologies such as FireDAC. For migration, see Migrating BDE Applications to FireDAC.

If you need to continue using BDE, an external installer is available on the Registered Users site: http://cc.embarcadero.com/myreg
The BDE help remains in the 1.15 help.

Enhancements to the Data Explorer

The Data Explorer now displays the following nodes for FireDAC applications:

  • Primary keys and their fields
  • Foreign keys and their fields
  • Generators

Debugger Changes for 1.15

New PAServer Manager App on the Mac

The new Mac GUI app PAServer Manager is now delivered with PAServer (the Platform Assistant Server). PAServer Manager enables you to create and manage multiple instances of PAServer.

For more information, see:

MultiByte Support for Mobile Debuggers

  • The debuggers for the mobile platforms (iOS and Android) now support the use of Unicode characters and strings with UTF8, UTF16 or UTF32 encodings.
  • In file names of iOS apps, the debuggers now support the use of international characters (Unicode, such as hélène and éléments).

For general information, see Debugging Multi-Device Applications.

Binary info.plist File Deployed

The info.plist file, which is required for Mac and iOS apps, continues to be generated as an XML file containing keys and associated values.

For deployment, however, the XML file is now converted to binary. For information about the contents of the info.plist file, see Version Info.

Command-Line Utility Changes for 1.15

Java2OP.exe: New Native Bridge File Generator for Android

The process of allowing your application to use custom Java libraries on Android previously required you to manually create a native bridge file from a Java class file.

Appmethod provides a new tool, Java2OP.exe (Java to Object Pascal), that automates the creation of a native bridge file for Template:Object Pascal applications. This new tool allows you to generate a native bridge file from a set of JAR or Java class files, or from a specific subset of the Android API.

For this release, Java2OP.exe is available on the Registered Users site: http://cc.embarcadero.com/myreg

Application Samples Changes for 1.15

The application samples delivered with the product have been reorganized, and some of the application samples are no longer delivered. We deliver the newer samples that are more relevant to multi-device application development, but we removed older samples that are less relevant.

For more information about the application samples delivered with the product, see:

Changes in the Online Help

Some notable new pages:

Some changes in the Online Help:

See Also