Download: RAD Studio 12.*-13.0 setup_1.20.0.0_release.eng.zip Release date: 03 June 2026 Warning 🚨Upon the first build of the FGX Native application for Android, the Gradle distribution 9.6.1 will be downloaded and installed with all the auxiliary plugins and libraries needed to build applications. This requires Internet access and time. Subsequent builds will run quickly. The attribute android:extractNativeLibs has been removed from the Android application manifest template. It is now automatically affixed by the assembly system automatically. If you use the animation of displaying or hiding shapes via TfgAnimationHelper, then you need to remove this code. The form now uses animation automatically. To animate the display of the modal window, you need to use the new TfgForm.ShowModal method. New ✨FormsThis release has improved the mechanisms for animating, displaying, hiding, and managing the lifetime of forms. AnimationsNow all forms use animation for their display and hiding by default. As a result, you no longer need to resort to using the auxiliary animation class TfgAnimationHelper. Using the example of opening a form. Old: { Regular form }
TfgAnimationHelper.ShowForm(Form);
TfgAnimationHelper.HideForm(Self, [TfgAnimationOption.ReleaseControlOnFinish]);
{ Modal form }
TfgAnimationHelper.ShowModalForm(Form);
TfgAnimationHelper.HideModalForm(Self, [TfgAnimationOption.ReleaseControlOnFinish]);New: { Regular form }
Form.Show;
Form.Close;
{ Modal form }
Form.ShowModal;
Form.Close;The old TfgCustomForm.Show method is supplemented with an optional APresentationStyle parameter, which allows you to select the type of animation for displaying the form. Currently, there are only two options available: TfgFormPresentationStyle.Default - with default animation (as it is accepted on the current platform). TfgFormPresentationStyle.None - Do not apply animation and display the form immediately. Therefore, if you do not want to apply animation, then you need to pass the optional parameter TfgFormPresentationStyle.None to the Show method. In addition to this method, a method ShowModal has been added for the modal display of the form. When hiding/closing a form, the Hide and Close methods use the reverse animation used when opening it. /// <summary>
/// Display the form on the screen by applying the passed style <c>APresentationStyle</c> to the display animation.
/// </summary>
procedure Show(const APresentationStyle: TfgFormPresentationStyle = TfgFormPresentationStyle.Default);
/// <summary>
/// Display the form modally on the screen by applying the passed style <c>APresentationStyle</c> to the display animation.
/// </summary>
procedure ShowModal(const APresentationStyle: TfgModalFormPresentationStyle = TfgModalFormPresentationStyle.Default);
/// <summary>Hide the form from the screen.</summary>
/// <remarks>When hiding, the animation is reversed to the one that was used when displaying the form.</remarks>
procedure Hide; overload;
/// <summary>Hide the shape from the screen without animation.</summary>
procedure HideWithoutAnimation;
/// <summary>Hide the form from the screen with the possibility of its self-destruction of the instance.</summary>
/// <remarks>The decision to act on the form can be influenced using the <c>DefaultCloseAction</c> property and/or the <c>onClose</c> event.</remarks>
procedure Close;
/// <summary>Was the form displayed on the screen?</summary>
/// <remarks>
/// Does not take into account its optical visibility, taking into account possible overlap with other forms, but captures the fact that it
/// is located somewhere on the screen and its representation is embedded in the scene.
/// </remarks>
function IsShown: Boolean;Management and ClosingDespite the fact that the form closing mechanism has been introduced for a long time, it is worth mentioning separately in light of the addition of animation on how to correctly manage the lifetime of the form. The form must be closed and hidden using the Close method. In this case, the form asks the developer what to do with the form through the AAction parameter of the OnClose event. The following options are available: TfgFormCloseAction.None - The request to close the form is ignored. For example, if a user tries to close a form to save a change, and the filled-in data is incorrect, you can cancel the closing and point out the problem to the user. TfgFormCloseAction.Hide - The form is hidden, but the form instance is not deleted and it can be reused. TfgFormCloseAction.Free - The form is hidden and the form instance is deleted after it is completely hidden. If you know in advance that the form needs to be destroyed when closing, you can specify this via the TfgForm.DefaultCloseAction property. In this case, this will be the default value that will be passed to the OnClose event, if it is defined. This mechanism has been around for a long time, however, due to the fact that previously closing the form with animation was performed through the TfgAnimationHelper helper, it was not possible to use it since deleting the form only needs to be done after the animation is over. Now that animation is part of the form, this mechanism is fully synchronized with it. Modal formsIn this release, asynchronous modality mode has been added for forms. To display the form in modal mode, you need to use new methods: procedure ShowModal(const APresentationStyle: TfgModalFormPresentationStyle = TfgModalFormPresentationStyle.Default); overload;
procedure ShowModal(const ACloseCallback: TfgCloseModalCallback;
const APresentationStyle: TfgModalFormPresentationStyle = TfgModalFormPresentationStyle.Default); overload;The form will be displayed on the screen with animation (by default), and the result of displaying the form TModalResult will be passed to the callback function ACloseCallback. Usage example: MyForm.ShowModal(
procedure (const AModalResult: TModalResult)
begin
case AModalResult of
mrCancel:
TfgToastFactory.Show('Cancel was pressed');
mrOk:
TfgToastFactory.Show('OK was pressed');
end;
end);The return value of the modal result is set via a new form property TfgForm.ModalResult. In addition, the TfgButton button now has a public ModalResult property. When the button is clicked, this value is automatically set in TfgForm.ModalResult. vkHardwareBack key on Android 16+Starting with applications developed for Android 16+, Google disabled operation of the vkHarwareBack button. This means that in your applications, the processing of this button did not work. We simulated the challenge of pressing this button, as it was before. GradleWe updated the Gradle build system for Android applications from version 8.13 up to 9.6.1. Attention: During the first build of the FGX Native application for Android, the Gradle 9.6.1 distribution will be downloaded and installed with all the auxiliary plugins nd libraries needed to build applications. This requires Internet access and time. Subsequent builds will run quickly. Upgrading used Android librariesIn this release, the following used Android libraries have been updated to the latest versions and their FGX Native services have been used: Google PDF 1.0.0-10 -> 1.0.0-19 AndroidX 1.9.0 -> 1.15.0 Lottie 5.2.0 -> 6.7.1 Visio 18.1.0 -> 18.3.1 Google Maps 18.1.0 -> 20.0.0 Firebase Common 20.1.2 -> 22.0.1 Firebase Messaging 23.0.8 -> 25.1.1 Firebase Analytics 21.2.0 -> 23.2.0 Admob 21.2.0 -> 25.4.0 Facebook Login 16.2.0 -> 18.3.0 Yandex Analytics 7.5.0 -> 8.5.1 Yandex Mobile Ads 6.4.0 -> 8.3.0 Android Billing 7.0.0 -> 9.1.0 In addition, all header files Android.Api.* have been updated to the latest library versions. Improvements 🙌TfgCollectionViewIn 1.19.6.0 the approach to calculating the size of list items has been changed. As a result, the OnBindItem event can be called for the same element multiple times. In one case, to calculate the size of the element, in the other to display it. In iOS, the first time it is displayed, the size of all elements is requested. And if the list assumes the display of images loaded asynchronously, this leads to the problem of loading all images at once en masse. As a result, the RAM allocated for the application may run out, and the entire application may slow down. Now you can determinate the data binding assignment (call OnBindItem) to the elements using the new TfgItemWrapper.Purpose property and skip loading or linking images to the components of the element, thereby speeding up the calculation of the size of the elements. /// <summary>
/// <para>
/// Assignment of an item in the list
/// </para>
/// <para>
/// <list>
/// <item><b>Measure</b> - The item is used to calculate its size.</item>
/// <item><b>Display</b> - The item is used to display on the screen.</item>
/// </list>
/// </para>
/// </summary>
TfgItemWrapperPurpose = (Measure, Display);
TfgItemWrapperPurposes = set of TfgItemWrapperPurpose;Tip: If you are using lists with dynamic height elements and displaying images, then use TfgItemWrapperPurpose.Measure to skip loading and displaying these images in order to speed up the list. Java2DelphiImproved the auxiliary utility for generating header files for Java/Kotlin libraries: If two Java classes with the same names were found in different packages during import, they could be incorrectly used as a parent class. Previously, the generator did not take into account the case of class names, as a result of which the classes package.MyClass and package.MyClass could be handled incorrectly. Fixed the generation of setters for static java class fields. The name of the Java method inline is a keyword and is processed separately. TfgComboBoxAdded the ability to specify the width of the drop-down window for the TfgComboBox. The property TfgComboBox.Appearance.Popup.Width only makes sense under Android. FGX-511 How can I calculate the width of the drop-down list? Bug Fixes 🐛TfgLabel didn't apply custom user's font and horizontal text alignment. FGX-245 TfgPickerPhotoFactory doesn't let to select a photo from the gallery (Android). FGX-463 The TintColorName property does not work correctly during dynamic creation TfgSwitch. (Android). FGX-512 The Yandex SDK has not been updated for a long time (Android). FGX-513 Severe performance drawdown on iOS when using TfgCollectionViewStyle.VariableSize (iOS). FGX-514 Invalid AVKFrame Height on Android 15+ (Android).