Скачать: RAD Studio 12.* - 13.0 setup_1.20.0.0_release.rus.zip Дата релиза: 15 сентября 2026 Внимание 🚨При первой сборке FGX Native приложения под Android будет скачен и установлен дистрибутив Gradle 9.6.1 со всеми вспомогательными плагинами и библиотеками, необходимыми для сборки приложений. Для этого требуется доступ к сети Интернет и время. Последующие сборки будут выполняться быстро. Из шаблона манифеста Андроид приложения был удален атрибут android:extractNativeLibs. Теперь он проставляется системой сборки автоматически. Если вы используете анимацию отображения или скрытия форм через TfgAnimationHelper, то вам необходимо убрать этот код. Теперь форма автоматически использует анимацию. Для анимации отображения модального окна нужно использовать новый метод TfgForm.ShowModal. Новое✨ФормыВ этом релизе доработаны механизмы анимации, отображения, скрытия и управления временем жизни форм. АнимацияТеперь все формы по умолчанию используют анимацию своего отображения и скрытия. В результате чего теперь не нужно прибегать к использованию вспомогательного класса анимации TfgAnimationHelper. На примере открытия формы. Было: { Обычная форма}
// Открытие
TfgAnimationHelper.ShowForm(Form);
// Закрытие с удалением
TfgAnimationHelper.HideForm(Self, [TfgAnimationOption.ReleaseControlOnFinish]);
{ Модальная форма }
// Открытие
TfgAnimationHelper.ShowModalForm(Form);
// Закрытие с удалением
TfgAnimationHelper.HideModalForm(Self, [TfgAnimationOption.ReleaseControlOnFinish]);Стало: { Обычная форма}
// Открытие
Form.Show;
// Закрытие с удалением
Form.Close;
{ Модальная форма }
// Открытие
Form.ShowModal;
// Закрытие
Form.Close;Старый метод TfgCustomForm.Show дополнен необязательным параметром APresentationStyle, позволяющим выбирать типа анимации отображения формы. На текущий момент доступно всего два варианта: TfgFormPresentationStyle.Default - с анимацией по умолчанию (как это принято на текущей платформе). TfgFormPresentationStyle.None - Не применять анимацию и отобразить форму немедленно. Поэтому если вы не хотите применять анимацию, то вам необходимо передать необязательный параметр TfgFormPresentationStyle.None в метод Show. Помимо этого метода добавлен метод для модального отображения формы ShowModal. Методы Hide и Close при скрытии/закрытии формы используют обратную анимацию, используемую при ее открытии. /// <summary>
/// Отобразить форму на экране, применяя переданный стиль <c>APresentationStyle</c> анимации отображения.
/// </summary>
procedure Show(const APresentationStyle: TfgFormPresentationStyle = TfgFormPresentationStyle.Default);
/// <summary>
/// Отобразить форму модально на экране, применяя переданный стиль <c>APresentationStyle</c> анимации отображения.
/// </summary>
procedure ShowModal(const APresentationStyle: TfgModalFormPresentationStyle = TfgModalFormPresentationStyle.Default);
/// <summary>Скрыть форму с экрана.</summary>
/// <remarks>При скрытии используется обратная анимация к той, что применялась при отображении формы.</remarks>
procedure Hide; overload;
/// <summary>Скрыть форму с экрана без анимации.</summary>
procedure HideWithoutAnimation;
/// <summary>Скрыть форму с экрана с возможностью её саморазрушения инстанса.</summary>
/// <remarks>На решение о действии с формой можно повлиять с помощью свойства <c>DefaultCloseAction</c> и/или события <c>OnClose</c>.</remarks>
procedure Close;
/// <summary>Отображается ли форма на экране.</summary>
/// <remarks>
/// Не учитывает ее оптическую видимость с учетом возможно перекрытия другими формами, а фиксирует факт, что она
/// находится где-то на экране и ее представление встроено в сцену.
/// </remarks>
function IsShown: Boolean;Управление и ЗакрытиеНе смотря на то, что механизм закрытия форм уже введен давно, стоит отдельно упомянуть в свете добавления анимации о том, как корректно управлять временем жизни формы. Закрытие и скрытие формы нужно производить при помощи метода Close. При этом форма спрашивает у разработчика, что делать с формой через параметр `AAction` события OnClose. Доступны следующие варианты: TfgFormCloseAction.None - Запрос закрытия формы игнорируется. Например, если пользователь пытается закрыть форму, чтобы сохранить изменение, а заполненные данные не корректны, вы можете отменить закрытие и указать пользователю на проблему. TfgFormCloseAction.Hide - Форма скрывается, но экземпляр формы не удаляется и она может быть использована повторно. TfgFormCloseAction.Free - Форма скрывается и экземпляр формы удаляется после ее полного скрытия. Если вы заранее знаете, что форму нужно уничтожать при закрытии, вы можете указать это через свойство TfgForm.DefaultCloseAction. В этом случае, это будет значение по умолчанию, которое будет передаваться в событие OnClose, если оно определено. Этот механизм существует уже давно, однако, из-за того, что раньше закрытие формы с анимацией выполнялось через хелпер TfgAnimationHelper, не возможно было им воспользоваться так как удаление формы нужно производить только после того, как закончиться анимация. Теперь же, когда анимация является частью формы, этот механзим полностью с ней синхронизирован. Модальные формыВ этом релизе для форм добавлен асинхронный режим модальности. Чтобы отобразить форму в модальном режиме, необходимо воспользоваться новыми методами: procedure ShowModal(const APresentationStyle: TfgModalFormPresentationStyle = TfgModalFormPresentationStyle.Default); overload;
procedure ShowModal(const ACloseCallback: TfgCloseModalCallback;
const APresentationStyle: TfgModalFormPresentationStyle = TfgModalFormPresentationStyle.Default); overload;Форма будет отображена на экране с анимацией (по умолчанию), а результат отображения формы TModalResult будет передан в функцию обратного вызова ACloseCallback. Пример использования: MyForm.ShowModal(
procedure (const AModalResult: TModalResult)
begin
case AModalResult of
mrCancel:
TfgToastFactory.Show('Cancel was pressed');
mrOk:
TfgToastFactory.Show('OK was pressed');
end;
end);Возвращаемое значение модального результата задается через новой свойство формы TfgForm.ModalResult. Помимо этого, теперь у кнопки TfgButton появилось публичное свойство ModalResult. При нажатии на кнопку, это значение автоматически задается в TfgForm.ModalResult. Кнопка vkHardwareBack на Android 16+Начиная с приложений, разработанных для Android 16+, Google отключила работу кнопки vkHarwareBack. Это значит, что в ваших приложениях, обработка этой кнопки не работала. Мы сэмулировали вызов нажатия этой кнопки, как было ранее. GradleОбновлена система сборки Gradle для Android приложений с версии 8.13 до 9.6.1. Внимание: При первой сборке FGX Native приложения под Android будет скачен и установлен дистрибутив Gradle 9.6.1 со всеми вспомогательными плагинами и библиотеками, необходимыми для сборки приложений. Для этого требуется доступ к сети Интернет и время. Последующие сборки будут выполняться быстро. Обновление Android библиотекВ этом релизе обновлены следующие используемые Android библиотеки до последних версий и используемые их сервисы FGX Native: 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 Помимо этого обновлены все заголовочные файлы Android.Api.* до последних версий библиотек. TfgCollectionViewВ 1.19.6.0 был изменен подход к расчету размера элементов списка. В результате которого, событие OnBindItem может вызываться для одного и того же элемента несколько раз. В одном случае для расчета размера элемента, в другом для его отображения. В iOS при первом отображении идет запрос размеров всех элементов. И если список предполагает отображение изображений, загружаемых асинхронно, это приводит к проблеме массовой загрузки всех изображений сразу. В результате чего, может как кончится оперативная память, отводимая под приложение, так и замедлиться все приложение в целом. Теперь же вы можете определить назначение связывания данных (вызов OnBindItem) с элементам при помощи нового свойства TfgItemWrapper.Purpose и пропустить загрузку или связывание изображений с компонентами элемента тем самым, ускорив расчет размеров элементов. /// <summary>
/// <para>
/// Назначение элемента в списке
/// </para>
/// <para>
/// <list>
/// <item><b>Measure</b> - Элемент используется для расчета своего размера.</item>
/// <item><b>Display</b> - Элемент используется для отображения на экране.</item>
/// </list>
/// </para>
/// </summary>
TfgItemWrapperPurpose = (Measure, Display);
TfgItemWrapperPurposes = set of TfgItemWrapperPurpose;Совет: Если вы используете списки с элементами с динамической высотой и отображаете изображения, то для TfgItemWrapperPurpose.Measure необходимо пропустить загрузку и отображение этих изображений в целях ускорения работы списка. Улучшения 🙌Java2DelphiУлучшена работа вспомогательной утилиты для генерации заголовочных файлов для Java/Kotlin библиотек: Если при импорте встречались два одноименных Java класса, встречающиеся в разных пакетах, то они могли неверно использоваться в качестве родительского класса. Раньше генератор не учитывал регистр имен классов, в результате чего некорректно могли обрабатываться классы package.MyClass и package.myClass. Поправлена генерация сеттеров для статических полей джава классов. Название Java метода inline является ключевым слово и обрабатывается отдельно. TfgComboBoxДобавлена возможность указать ширину выпадающего окна для TfgComboBox. Свойство имеет смысл только под Android. FGX-511 Как вычислить ширину выпадающего списка? Исправление ошибок 🐛Для TfgLabel не применялся пользовательский шрифт и горизонтальное выравнивание режиме TfgTextType.HTML. FGX-245 TfgPickerPhotoFactory не возможно выбрать фото из галереи (Android). FGX-463 TfgSwitch. При динамическом создании некорректно работает свойство TintColorName (Android). FGX-512 Yandex SDK давно не обновлялся (Android). FGX-513 Сильная просадка производительности на iOS при задействовании TfgCollectionViewStyle.VariableSize (iOS). FGX-514 Некорректное значение AVKFrame.Height на Android 15+ (Android).