Skip to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Yaroslav Brovin

Administrators
  • Joined

  • Last visited

Everything posted by Yaroslav Brovin

  1. Добрый вечер, Для возможности использования Java классов из нативного кода используется JNI - это специальная прослойка между виртуальной машиной JAVA и нативным кодом. По скольку JVM работает со счетчиками ссылок на нативные объекты, а нативный код нет, то в JNI есть таблицы в которые занесены текущие ссылки из нативного кода на Java объекты. Эта таблица имеет ограничение на максимальный размер, которые может разнится между устройствами. Ошибка JNI ERROR (app bug): global reference table overflow (max=51200) говорит о том, что данная таблица полностью заполнена количество используемых ссылок. Обычно причиной этому является утечка памяти. То есть ссылка на Java Объект захвачена, но не возвращена после использования. Я посмотрю ваш демо проект и попозже отпишусь о результатах.
  2. В эту среду совместно с компанией Embarcadero проводим вебинар посвященный разработке мобильного приложения с использованием FGX Native. На вебинаре разберем одну из возможных архитектур мобильного приложения, применим шаблон MVVM для построения экранов. И познакомимся с приемами создания мобильных интерфейсов с FGX Native. Когда: 23 июня 2021 в 12:00 МСК Язык: русский Заголовок: Примеры использования библиотеки FGX Native для создания макетов реальных мобильных приложений. Ссылка на регистрацию: https://lp.embarcadero.com/fgx-native Анонс:
  3. Download: The distributive is available by request only. Release date: 19 June 2021 New ✨ Drop down window TfgPopup This release adds the ability to display any content as a drop-down window attached to the specified component. To create the TfgPopup drop-down window you need to use the TfgPopupFactory factory and pass the displayed component there. As a component, you can specify any visual component, including a form. FPopup := TfgPopupFactory.CreatePopup(FPopupContent); FPopup.Size := TSizeF.Create(200, 300); You must specify the component that the drop-down window should be displayed relative to. An additional parameter can be used to specify the popup offset. FPopup.DropDown(fgButton1); If you use themes in your application, then you can specify theme name via property ThemeName. By default, the drop-down window displays a shadow. However, you can use the transparent style of the drop-down window. This is managed via the Transparent property. New demo sample was added: "Components" -> "TfgPopup" -> "Basic sample". Details: https://translate.yandex.ru/translate?lang=ru-en&url=https%3A%2F%2Fforum.fgx-native.com%2Fblogs%2Fentry%2F29-выпадающие-окна-tfgpopup%2F Improvements 🙌 TfgBitmap Added the ability to work with raw data TfgBitmap using IFGXBitmapData. To get started, call TfgBitmap.MapData and TfgBitmap.UnmapData when finished. Added the ability to rotate TfgBitmap by a fixed angle. Turns are available 90, 180 and 270 degrees. New demo sample was added: "Canvas" -> "TfgBitmap - working with raw data". Details: https://translate.yandex.ru/translate?lang=ru-en&url=https%3A%2F%2Fforum.fgx-native.com%2Fblogs%2Fentry%2F30-новые-возможности-tfgbitmap%2F TfgWebBrowser Revised the handling of opening sites with problematic certificates. Now, by default, such sites are not opened. If you want to allow them to be displayed, you need to use the new event TfgWebBrowser.OnSSLError and use the AHandler parameter to prohibit or allow loading of such resources. New demo sample was added: "Components" -> "TfgWebBrowser" -> "Handling certificate errors". TfgCamera We added possibility to setup flash mode in the moment of taking photo. You can set this mode via the new property TfgCamera.FlashMode. Also you can use flash as a torch, while camera works only in preview mode. You can do it via the new property TfgCamera.TorchMode. Pay attention, it works only in preview and doesn't work in moment of taking photo. FGX-75 TfgCamera Add functionality for enabling flash. The demo sample was updated: "Components" -> "TfgCamera" -> "Camera". New controls were added for switching flash and torch modes. Bug Fixes 🐛 Dynamical changes of TfgBitmap size could lead to raising exception (Android). TfgCanvas.DrawBitmap and TfgCanvas.DrawBitmapWithMask methods rendered an image with the TfgBitmap scale instead of the TfgCanvas scale, which resulted in an incorrect image size (Android). FGX-77 TfgAnimationHelper Access Violation (iOS). FGX-78 TfgEdit has no focus after enabled-false/true (Android). FGX-79 Raising TfgCollectionView events after TfgForm.OnDestroy. FGX-80 SSL Error Handler (Android). The demo sample was fixed: "Android Api" -> "AlarmManager". The additional Android Studio project was added for building Java part.
  4. Скачать: Релиз доступен только по запросу. Дата релиза: 19 июня 2021 Новое ✨ Выпадающие окна TfgPopup В этом релизе добавлена возможность отображать любое содержимое в виде выпадающего окна, прикрепленного к указанному компоненту. Чтобы создать выпадающее окно TfgPopup необходимо воспользоваться фабрикой TfgPopupFactory и передать туда отображаемый компонент. В качестве компонента можно указывать любой визуальный компонент, в том числе и форму. FPopup := TfgPopupFactory.CreatePopup(FPopupContent); FPopup.Size := TSizeF.Create(200, 300); Чтобы отобразить попап необходимо указать компонент, относительно которого должно отобразиться выпадающее окно. Дополнительным параметром можно указать смещение. FPopup.DropDown(fgButton1); Если вы используете темы в вашем приложении, то вы можете указать название темы через свойство ThemeName. По умолчанию выпадающее окно отбрасывает тень. Однако, вы можете использовать прозрачный стиль выпадающего окна. Это управляется через свойство IsTransparent. Добавлен новый демонстрационный проект: "Компоненты" -> "TfgPopup" -> "Базовый пример". Детали: Улучшения 🙌 TfgBitmap Добавлена возможность работы с "сырыми" данными TfgBitmap с помощью IFGXBitmapData. Для начала работы вызовите TfgBitmap.MapData и TfgBitmap.UnmapData по окончанию. Добавлена возможность поворота TfgBitmap на фиксированный угол. Доступны повороты на 90, 180 и 270 градусов. Добавлен новый демонстрационный проект: "Графика" -> "TfgBitmap - работа с "сырыми" данными". Подробнее: TfgWebBrowser Пересмотрена обработка открытия ресурсов с проблемными сертификатами. Теперь по умолчанию, такие сайты не открываются. Если вы хотите допустить их отображение, необходимо использовать новое событие TfgWebBrowser.OnSSLError и через параметр AHandler запретить или разрешить загрузку таких ресурсов. Добавлен новый демонстрационный проект: "Компоненты" -> "TfgWebBrowser" -> "Обработка ошибок сертификатов". TfgCamera Для камеры добавлена возможность указывать режим работы вспышки в момент снятия фотографии. Это поведение управляется новым свойством TfgCamera.FlashMode. Дополнительно можно использовать вспышку в качестве фонарики в процессе работы предпросмотра (Preview). Это задается через новое свойство TfgCamera.TorchMode. Обратите внимание, что фонарик работает только в режиме превью и игнорируется в момент съемки фотографии. FGX-75 TfgCamera добавить функционал включения вспышки. Обновлен демонстрационный пример: "Компоненты" -> "TfgCamera" -> "Фотокамера". Добавлены элементы управления для включения вспышки и режима фонарика. Исправление ошибок 🐛 Динамическое изменение размера TfgBitmap могло приводить к исключению (Android). Методы TfgCanvas.DrawBitmap и TfgCanvas.DrawBitmapWithMask отрисовывали изображение со скейлом TfgBitmap вместо скейла TfgCanvas, что приводило к неверному размеру изображения (Android). FGX-77 TfgAnimationHelper Access Violation (iOS). FGX-78 TfgEdit нет фокуса после enabled-false/true (Android). FGX-79 Вызов событий TfgCollectionView после TfgForm.OnDestroy. FGX-80 SSL Error Handler (Android). Исправлен демонстрационный проект: "Android Api" -> "AlarmManager". Добавлен проект для сборки Java части в Android Studio.
  5. Добавлено в 11.1.0.0.
  6. Доброго дня! В ближайшем релизе 1.11.2.0 всех нас ждет появление поддержки выпадающих окон TfgPopup. Если вам необходимо отобразить содержимое в виде выпадающего окна, то эта возможность непременно вам пригодится. Создание В качестве содержимого выпадающего окна можно использовать как любой визуальный компонент так и форму. Удобнее всего использовать форму, поскольку она позволяет создать содержимое выпадающего окна прямо в дизайнере. При создании формы важно указать: Отключить полноэкранный режим формы TfgForm.FullScreen = False. Опционально сделать фон прозрачным через TfgForm.Transparent = True . В качестве начинки окна, я сделал форму с TfgCollectionView, используемым для отображения содержимого Чтобы создать выпадающее окно нужно обязательно иметь содержимое, которое вы планируете показать в этом выпадающем окне. Создание выполняется через фабрику FGX.Popup.TfgPopupFactory, как и тосты, пикеры, диалоги и тд. var FPopup: TfgPopup; FPopupContent: TFrameList; FPopupContent := TFrameList.Create(nil); FPopup := TfgPopupFactory.CreatePopup(FPopupContent); После создания TfgPopup становится владельцем вашего содержимого. Это значит, что содержимое будет уничтожено, как только TfgPopup будет удален. Если вы хотите сами контролировать время жизни содержимого, вы можете передать вторым параметром значение False. В этом случае, после уничтожения TfgPopup, ваше содержимое останется жить. FPopup := TfgPopupFactory.CreatePopup(FPopupContent, False); После создания необходимо указать размер выпадающего окна при помощи свойства TfgPopup.Size. Например, если выпадающее окно прикреплено к кнопке. то имеет смысл в качестве ширины брать ширину кнопки: FPopup.Size := TSizeF.Create(fgButton1.Width, 200); Отображение Для отображения выпадающего окна существует два одноименных метода TfgPopup.DropDown, оба которых привязывают отображение окна к указанному компоненту. /// <summary> /// Открывает выпадающее окно, прикрепленное к указанному компоненту <c>AAnchor</c> со смещением <c>AOffset</c>. /// </summary> procedure DropDown(const AAnchor: TfgControl; const AOffset: TPointF); overload; virtual; abstract; /// <summary>Открывает выпадающее окно, прикрепленное к указанному компоненту <c>AAnchor</c>.</summary> procedure DropDown(const AAnchor: TfgControl); overload; FPopup.DropDown(fgButton1); Если вам необходимо выполнить отображение выпадающего окна со смещением, то вы можете передать это смещение вторым параметром: FPopup.DropDown(fgButton1, TPointF.Create(0, 8)); Эта версия метода удобна в случаях, когда вы самостоятельно делаете внешний вид выпадающего окна и хотите добавить отступы между выпадающим окном и компонентом, вызывающим это окно. Для закрытия окна используйте метод Close. /// <summary>Закрывает выпадающее окно.</summary> procedure Close; virtual; abstract; Настройка внешнего вида По умолчанию TfgPopup выглядит, как TfgCardPanel с тенью и рамкой. Однако, если вы хотите сделать свой внешний вид окна, то вы можете отключить отображение по умолчанию через свойство TfgPopup.IsTransparent. В этом случае содержимое будет отображено прямо под привязанным компонентом. /// <summary>Прозрачное выпадающее окно или нет?</summary> property IsTransparent: Boolean read FIsTransparent write SetIsTransparent; Если вы используете в своих приложениях темы, то вы можете использовать темы и для содержимого выпадающего окна. Для этого необходимо указать название темы в свойстве TfgPopup.ThemeName. Таким образом можно добавить поддержку темной темы и детальнее настроить внешний вид попапов. /// <summary>Название темы, используемой для содержимого выпадающего окна.</summary> property ThemeName: TfgThemeName read FThemeName write SetThemeName; ios.mp4 android.mp4 События В TfgPopup поддерживается два типа событий, OnOpened и OnClosed, вызываемые при открытии и закрытии выпадающего окна соответственно. Так же мы предлагаем две версии каждого события для использования совместно с анонимными функциями и событиями. /// <summary>Вызывается, когда выпадающее окно отображается на экране.</summary> property OnOpened: TNotifyEvent read FOnOpened write FOnOpened; /// <summary>Вызывается, когда выпадающее окно отображается на экране.</summary> property OnOpenedCallback: TfgCallback read FOnOpenedCallback write FOnOpenedCallback; /// <summary>Вызывается, когда выпадающее окно скрывается с экрана.</summary> property OnClosed: TNotifyEvent read FOnClosed write FOnClosed; /// <summary>Вызывается, когда выпадающее окно скрывается с экрана.</summary> property OnClosedCallback: TfgCallback read FOnClosedCallback write FOnClosedCallback;
  7. Добрый день, Судя по описанию - это однозначно баг. После OnDestroy никакие события компонентов формы не должны вызываться, конечно.
  8. Добрый вечер, нужна демка
  9. Download: The distributive is available by request only. Release date: 26 May 2021 Improvements 🙌 TfgBottomSheetLayout The new group settings property were added TfgBottomSheetLayout.BlockContentSettings. It allows to specify default action, when user taps blocked content area. The old property BlockContentMode was moved to BlockContentSettings.Mode. Now you can choose which action to perform automatically when clicking on the blocked area of the main content via the BlockContentSettings.AutoCloseAction. You can also now catch the touch event of this area via the new TfgBottomSheetLayoutOnBlockedContentTap event for manual page manipulation. FGX-60 Hide/Close TfgBottomSheetLayout. FGX-61 TfgBottomSheetLayout AutoHide. Assets manager The new method TfgAssetsFactory.SaveConfigToFile was added, which allows to save information about filtered assets in file. Example of saving all resources whose name starts with the Cache prefix: const CachePrefix = 'Cache'; TfgAssetsFactory.SaveConfigToFile(TfgAssetsManager.Current, ConfigFileName, function (const AAsset: TfgAsset): Boolean begin Result := string(AAsset.Name).StartsWith(CachePrefix); end, [TfgWritingOption.EmitEmptyAssets]); FGX-35 Add a possibility to save filtered assets to config file. Other TfgWebBrowser can open https pages with certificate issues (Android). The new helpers methods ToString and ToARGBHex were added for TAlphaColor. The new header file Android.Api.Accessibility was added for using Android Accessibility. Bug Fixes 🐛 FGX-62 TfgAnimationHelper Access Violation (iOS). FGX-63 Incorect rendering background of fgNavigationBar (iOS). FGX-64 TfgBottomSheet doesn't store AlignmentChildren.Direction value. FGX-66 TfgCardPanel wrong rendering background color (iOS). FGX-67 TfgAnimationHelper.ShowForm(FrameName) is crashed (iOS). FGX-68 Application was crashed, when the HideForm was invoked. FGX-69 AddBitmapFromUrlAsync could led to exception sometimes (Android). The TfgBottomSheetLayout.BlockContentMode property didn't work, if ContentShadingSettings.Enabled = False (Android). The transation of TfgTranslation designer was fixed.
  10. Скачать: Релиз доступен только по запросу. Дата релиза: 26 мая 2021 Улучшения 🙌 TfgBottomSheetLayout Добавлена группа настроек TfgBottomSheetLayout.BlockContentSettings позволяющая автоматически свернуть/закрыть страницу в модальном режиме при касании заблокированной области основного содержимого. В эту группу перемещено свойство BlockContentMode -> BlockContentSettings.Mode. Теперь вы можете выбрать, какое действие нужно совершить автоматически при нажатии на заблокированную область основного содержимого через свойство BlockContentSettings.AutoCloseAction. Так же вы можете теперь поймать событие касания этой области через новое событие TfgBottomSheetLayout.OnBlockedContentTap для ручных манипуляций со страницей. FGX-60 Hide/Close TfgBottomSheetLayout. FGX-61 TfgBottomSheetLayout AutoHide. Менеджер ресурсов Добавлен новый метод TfgAssetsFactory.SaveConfigToFile, который позволяет сохранить информацию об отфильтрованных ресурсов в любой файл. Пример сохранения всех ресурсов, у которых имя начинается с префикса 'Cache': const CachePrefix = 'Cache'; TfgAssetsFactory.SaveConfigToFile(TfgAssetsManager.Current, ConfigFileName, function (const AAsset: TfgAsset): Boolean begin Result := string(AAsset.Name).StartsWith(CachePrefix); end, [TfgWritingOption.EmitEmptyAssets]); FGX-35 Assets Добавить возможность сохранять информацию об ассетах в файл. Прочее Теперь TfgWebBrowser может открывать https страницы, которые имеют проблемы с сертификатом (Android). Добавлены хелперы ToString и ToARGBHex для TAlphaColor. Добавлен заголовочный файл Android.Api.Accessibility для возможности использования Android Accessibility. Исправление ошибок 🐛 FGX-62 TfgAnimationHelper Access Violation (iOS). FGX-63 Некорректная работа fgNavigationBar (iOS). FGX-64 TfgBottomSheet не сохраняет AlignmentChildren.Direction. FGX-66 TfgCardPanel Магические способности(iOS). FGX-67 TfgAnimationHelper.ShowForm(FrameName) падает (iOS). FGX-68 Новая анимация - крашится приложение при вызове HideForm. FGX-69 Исключение при загрузке изображений (Android). Свойство TfgBottomSheetLayout.BlockContentMode не работало, если ContentShadingSettings.Enabled = False (Android).
  11. Добавил две задачи:
  12. Давайте предметные вопросы задавать в соответствующих ветках форума с деталями, что делается и как. Желательно с кусками кода или демо проектом. А то такие вопросы легко теряются именно здесь среди других комментариев. Спасибо
  13. Хотя, я понял в чем дело. Посмотрим. Как минимум не должно быть вызова отображения формы при ее скрытии. Разберемся с этим. Но и создание компонентов в любом случае не надо делать в OnShow.
  14. При каждом отображении формы вызывается ее обработчик OnShow. Собственно, если вы кнопки создаете в OnShow, то вы их создаете на каждого отображение формы. Что не верно. Их надо создать один раз, например в конструкторе или в событии OnCreate.
  15. Добрый день, Какая платформа? Какая версия IDE используется? Демо проект? В каком месте вы создаете компоненты в рантайме? Спасибо
  16. Нам очень приятно поделиться с вами этой новостью. Одно из приложений, написанных на FGX Native, победило в ежемесячном конкурсе Delphi приложений от Embarcadero. Это приложение - аудио-гид по достопримечательностям разных городов с поддержкой нескольких языков. Поздравляем Романа с успехом и желаем ему не останавливаться на достигнутом! Приложение в Play Market: https://play.google.com/store/apps/details?id=ru.wc2.welcome&hl=ru&gl=US Ссылка на конкурс Embarcadero: https://delphi.embarcadero.com/delphi26th-welcome-a-spectacular-mobile-app-for-travelers-made-in-delphi/ Автор: @Roman
  17. Понял. Это можно решить, указав дополнительно модуль: FGX.Animation.TfgAnimationHelper.ShowModalForm(MyModalForm) В следующей версии переименуем хелпер для TfgControl, чтобы он не конфликтовал с одноименным типом.
  18. Правильно ли я понимаю, что проблема решена?
  19. Используются ли свои транслированные Java хедеры?
  20. Добрый день, Нет, не планируется. Текущей триал-версии достаточно, чтобы понять о том, как работает библиотека в целом. Ошибки исправляются. С исправлениями и нововведениями вы можете ознакомиться в блоге или в истории изменений.
  21. Download: The distributive is available by request only. Release date: 18 May 2021 Important notes 🚨 The auxiliary animation types were moved from FGX.Animation -> FGX.Animation.Types. If your project is not going to build due to the lack of these types, connect the FGX.Animation module.Types. New ✨ Animation Added basic animation implementation. New demo sample was added: "Animation" -> "Animation templates". Description and details are avaiable here. Taking photo from Camera or Gallery Now you can take photo from camera or system gallery. Use on of the FGX.Pickers.Photo.TfgPickerPhotoFactory methods. New demo sample was added: "Components" -> "Pickers" -> "Taking photo". Description and details are avaiable here. Localization component In this version, we deliver a separate bpl-package with the localization component TfgTranslator, which we ourselves have been successfully using in the implementation of the FGX Native designer for a long time. However, we do not recommend using it in mobile applications, since all dictionaries with translations are always loaded when creating a form, and since we have a vision of how translation should be performed in mobile applications. Despite this, it is a working solution that can help you with localization of your projects. We deliver this component according to the "as-is" rule, that is, there are no guarantees on our part about its operation. Description and details are avaiable here. Other TfgDialog.InputQuery and TfgDialog.InputBox were implemented (iOS). New Android API methods were aded for working with "Drag&Drop" (Android). Bug Fixes 🐛 FGX-9 The scrolling TfgScrollBox doesn't work in TfgBottomSheet (Android). FGX-56 TfgForm lost property SystemStatusBar.Visibility (Android). FGX-59 [TfgTimeEdit] Segmentation fault, when user deletes form with TfgTimeEdit (Android). The method MeasureSize didn't work correctly for TfgNavigationBar (iOS). The event TfgNavigationBar.ActionButtons.OnTap doesn'didn't work on Android 6 in some cases (Android).
  22. Скачать: Релиз доступен только по запросу. Дата релиза: 18 мая 2021 Внимание 🚨 Вспомогательные типы анимации были перенесены из FGX.Animation -> FGX.Animation.Types. Если ваш проект не собирается из-за отсутствия этих типов, подключите модуль FGX.Animation.Types. Новое ✨ Анимация Добавлена базовая реализация анимаций. Добавлен новый демонстрационный проект: "Анимация" -> "Готовые шаблоны анимации". Описание и детали использования доступны в статье. Получение фотографии с камеры или библиотеки Добавлена возможность программно запросить у системы получениe фотографии с камеры или системной галереи изображений. Для этого необходимо воспользоваться одним из методов FGX.Pickers.Photo.TfgPickerPhotoFactory. Добавлен новый демонстрационный проект: "Компоненты" -> "Пикеры" -> "Получение фотографии". Описание и детали использования доступны в статье. Компонент локализации В этой версии мы поставляем отдельный bpl-пакет с компонентом локализации TfgTranslator, который мы сами уже давно успешно используем в реализации FGX Native дизайнера. Однако, мы не рекомендуем его использовать в мобильных приложениях, поскольку все словари с переводами всегда загружаются при создании формы, и поскольку у нас есть видение того, как перевод должен осуществляться в мобильных приложениях. Несмотря на это, это рабочее решение, которое может помочь вам с локализацией ваших проектах. Мы поставляем этот компонент по правилу "as-is", то есть нет никаких гарантий, в том числе же поддержки с нашей стороны о его работе. Этот пакет не является постоянным и может в будущем быть исключен из поставки. Описание и детали установки доступны в статье. Прочее Реализован TfgDialog.InputQuery и TfgDialog.InputBox (iOS). Добавлены методы и типы Android API для работы с "Drag&Drop" (Android). Исправление ошибок 🐛 FGX-9 Не работает обратная прокрутка ScrollBox в TfgBottomSheet (Android). FGX-56 TfgForm теряется свойство SystemStatusBar.Visibility (Android). FGX-59 TfgTimeEdit Segmentation fault при удалении формы, содержащей TfgTimeEdit (Android). Исправление метода MeasureSize, который мог работать некорректно для некоторых компонентов (iOS). Иногда событие TfgNavigationBar.ActionButtons.OnTap могло не работать на Android 6 (Android).

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.