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. Скачать: Релиз доступен только по запросу. Дата релиза: 25 апреля 2023 Улучшения 🙌 SVG Добавлено распознавание встраиваемого стиля в узлы SVG документа (Атрибут Style). Теперь при бросании SVG файла в дерево ресурсов дизайнера ассетов автоматически проставляется логический размер на основании размера, указанного в SVG файле. Исправление ошибок 🐛 Исправлена регрессия связанная с исправлением работы свойства Enabled под Android. Из-за нее могли не срабатывать нажатия на элементы TfgCollectionView, работа TfgDrawerLayout и т.д.
  2. Проблему смог воспроизвести. Подготовлю хотфикс.
  3. Hello @Multsoft.com, If TfgEdit is not touchable and some parent has Enabled=False, so it's another issue. I believe that the input field does not completely block the possibility of editing. In particular, the operation of the context menu. The native input field on Android does not have a full readonly mode. Therefore, we will look for a separate solution to block the context menu.
  4. Нужен демо-проект. Вы мне показываете часть кода, который мне не много о чем-то говорит. В этом релизе никаких изменений, связанных с CollectionView не было. Поэтому если вы считаете, что они появились и есть какие-то проблемы, то скидывайте проект, на котором это можно воспроизвести. Я посмотрю. P.S. Так решение будет продуктивнее. Если в вашем проекте ошибка, то вы ее таким образом найдете. Если Вы не можете найти решение, то опять же демо-проект поможет мне вам быстрее помочь и предложить решение. И если же действительно есть ошибка, то демо-проект даст возможность оперативно поправить ее и выпустить исправление.
  5. Если можете, то скиньте мне проект, я посмотрю.
  6. У кого-то из компонентов предков стоит Enabled = False ?
  7. Hello, Thank you. Looks like we forgot change constant value in FGX.Platform. It doesn't affect release.
  8. Download: The distributive is available by request only. Release date: 22 April 2023 New ✨ SVG Vector Images The support of vector SVG images was added. In the new version, a new type of asset has been added - SVG image. You can upload an SVG file to the assets designer for further use in components. Adding an SVG image is available in the Assets Designer: Project -> FGX Assets Manager. When using this image in components, the TfgBitmap bitmap image is automatically generated with the required current window scaling factor and the specified icon size. At the same time, the logical size (dp, without taking into account the zoom factor) of the icon is indicated in the SVG file editing window. We tested our SVG parser on icons from different vendors from MaterialDesign, Microsoft Visual Studio Icons and up to Icons 8. However, the SVG standard is quite large and writing a full-fledged parser in such a short time is not an easy task. Despite this, we would like you to share with us SVG files that cannot be read or displayed correctly. This will help us to expand the parser more quickly in the directions that are needed to display massive SVG images. When loading an image in the designer, the icon will have a special error icon if it is not supported. Details. TfgCanvas Transformation matrix Now you can use transformation canvas. To get the current transformation matrix or set a new one, use the Canvas.Matrix property. With the help of transformation matrices, you can perform any Athenian transformations on the objects being drawn. For example, to scale the shape figure, you can use the following code: Canvas.Matrix := TMatrix.CreateScale(2) * Canvas.Matrix; Saving states Now, in the process of drawing on the canvas TfgCanvas, you can save and restore the state of the canvas. The brush parameters and the current transformation matrix are saved as the canvas state. A typical scenario for working with states may look like this: var State: IFGXCanvasState; State := Canvas.SaveState; try // Modify transformation matrix, brushes // Painting finally Canvas.RestoreState(State); end; TfgSvgPath Arc commands were implemented in SVG Path. Now we supports all path commands Path by SVG standard. Commands T and Q were fixed in TfgSvgPath. Nullable We added our implementation of nullable type FGX.Types.TfgNullable. This type allows to use null value. Improvements 🙌 Assets Desginer Now you can search for SVG icons among the supplied Material Design icons. In addition, now you can drop any files directly into the designer's tree. Depending on the extension, the appropriate resource type will be created. TfgGradient The working with gradient points were improved. Now all points are stored in collection. You can get this collection via TfgGradient.Points property. Thanks to the use of the collection, it is now possible to use batch modification of points using the methods TfgGradient.Points.BeginUpdate and TfgGradient.Points.BeginUpdate. Android API New Android API class android.os.Environment was translated. Bug Fixes 🐛 SUPPORT-135 Problem with PageIndex of TfgPageLayout (iOS). SUPPORT-138 TfgPagerLayout resets current page on the first when user taps on context menu in TfgNavigationBar (iOS). FGX-176 TfgLabel ignores color in case of usage TextType=HTML (iOS). FGX-252 Changing Enabled didn't affect children (Android). FGX-262 Saving in Asset Manager destory DPR - File. FGX-263 Adding Items to TfgListMenu at runtime hangs app. TfgCollectionView didn't display items in case of usage Padding (iOS). TfgBarcode drawn content even when it didn't have data. The gradient with more than 2 points wasn't rendered (Android). Commands T and Q were fixed in TfgSvgPath.
  9. Скачать: Релиз доступен только по запросу. Дата релиза: 22 апреля 2023 Новое ✨ Векторные изображения SVG Добавлена поддержка векторных SVG изображений. В новой версии добавлен новый тип ресурсов - SVG изображение. В него вы можете загрузить SVG файл в дизайнере ресурсов для дальнейшего использования в компонентах. Добавление SVG изображения доступно в дизайнере ресурсов: Project -> FGX Assets Manager. При использовании данного изображения в компонентах, происходит автоматическое формирование растрового изображения TfgBitmap с требуемым текущим коэффициентом масштабирования окна и указанным размером иконки. При этом логический размер (dp, без учета коэффициента масштабирования) иконки указывается в окне редактирования SVG файла. Мы проверили наш SVG парсер на иконках разных поставщиков от MaterialDesign, Microsoft Visual Studio Icons и до Icons 8. Однако, стандарт SVG довольно большой и написать за такое короткое время полноценный парсер задача довольно непростая. Несмотря на это, мы хотели бы, чтобы вы делились с нами SVG файлами, которые не смогут прочитаться или отобразиться корректно. Это поможет нам оперативнее расширять парсер в тех направлениях, которые нужны для отображения массовых SVG изображений. При загрузке изображения в дизайнере, у иконки появится специальный значок ошибки, если она не поддерживается. Детали. TfgCanvas Матрицы преобразования Добавлена возможность использовать матрицы преобразования. Для того, чтобы получить текущую матрицу преобразования или задать новую, используйте свойство TfgCanvas.Matrix. При помощи матриц преобразований, можно совершать любые аффинные преобразования над рисуемыми объектами. Например, чтобы выполнить масштабирование рисуемой фигуры в 2 раза, можно использовать такой код: Canvas.Matrix := TMatrix.CreateScale(2) * Canvas.Matrix; Сохранение состояний Теперь в процессе отрисовки на канве ```TfgCanvas``` вы можете сохранять и восстанавливать состояние канвы. В качестве состояния канвы сохраняются параметры кисти и текущая матрица преобразования. Типичный сценарий работы с состояниями может выглядеть так: var State: IFGXCanvasState; State := Canvas.SaveState; try // Модифицируем матрицу трансформации, параметры кистей // Выполняем отрисовку finally Canvas.RestoreState(State); end; TfgSvgPath Реализована поддержка отрисовки дуг в SVG Path. Теперь мы поддерживаем все команды отрисовки Path по стандарту SVG. Исправлено отображение команды T и Q в TfgSvgPath. Nullable Добавлена своя реализация типа FGX.Types.TfgNullable. Этот тип позволяет указать Null значение. Улучшения 🙌 Дизайнер ассетов Теперь вы можете выполнять поиск SVG иконок среди поставляемых иконок Material Design. Помимо этого теперь вы можете кидать любые файлы прямо в дерево дизайнера. В зависимости от расширения, будет создан соответствующий тип ресурса. TfgGradient Улучшена работа с точками градиента. Теперь точки градиента хранятся в коллекции. Получить коллекцию точек можно через свойство TfgGradient.Points. Благодаря использования коллекции, теперь можно использовать пакетное изменение точек при помощи методов TfgGradient.Points.BeginUpdate и TfgGradient.Points.BeginUpdate. Градиент с более, чем двумя точками, не рисовался (Android). Android API Добавлена трансляция типа android.os.Environment. Исправление ошибок 🐛 SUPPORT-135 Не работает PageIndex для динамически добавенных компонентов в TfgPageLayout (iOS). SUPPORT-138 TfgPagerLayout сбрасывает текущую вкладку на первую при открытии контекстного меню в TfgNavigationBar (iOS). FGX-176 TfgLabel не окрашивает текст в заданный цвет при TextType=HTML (iOS). FGX-252 Изменение свойства Enabled у родителя не влияет на дочерние компоненты (Android). FGX-262 Сохранение ассетов всегда обновляет проектный файл. FGX-263 Добавление элементов в TfgListMenu в рантайме приводит приложение к ошибке. TfgCollectionView не отображал свои элементы при использовании отступов (iOS). TfgBarcode рисовал свое содержимое, даже при сбросе данных штрихкода. Градиент с более, чем двумя точками, не рисовался (Android). Исправлено отображение команды T и Q в TfgSvgPath.
  10. Нужно в настройках проекта поставил галку Push Notification. Указанный класс из Push-нотификации Firebase. Он подключается только при включении настройки в проекте.
  11. Добрый вечер, Что в логах приложения? Что в стектрейсе, если запускать с отладкой. Вам нужно обновить список используемых Jar-библиотек в FMX. Для этого на ветке Libraries нужно в контекстном меню выбрать Reverts to default. После этого, указанные выше ошибки сборки, должны пройти.
  12. Добрый день, уважаемые разработчики. Спешим порадовать вас главным нововведением 1.15.5.0 - это поддержка векторных изображений SVG. Добавление и использование В новой версии добавлен новый тип ресурсов - SVG изображение. В него вы можете загрузить SVG файл в дизайнере ресурсов для дальнейшего использования в компонентах. Добавление SVG изображения доступно в дизайнере ресурсов: Project -> FGX Assets Manager. При использовании данного изображения в компонентах, происходит автоматическое формирование растрового изображения TfgBitmap с требуемым текущим коэффициентом масштабирования окна и указанным размером иконки. При этом логический размер (dp, без учета коэффициента масштабирования) иконки указывается в окне редактирования SVG файла. Особенности реализации Как выяснилось в ходе разработки, iOS и Android не поддерживают SVG изображения. Вместо этого, они конвертируют SVG файлы в Android Studio / XCode в свой внутренний промежуточный формат, которыйв свою очередь уже используется для формирования растровых изображений. В связи с этим, нам пришлось полностью своими силами разработать парсер и рендер SVG. В итоге мы выполняем обработку SVG файла на стороне Delphi и формируем наш формат, используемый для отрисовки SVG. Далее в рантайме по файлам нашего формата, генерируем изображения. Генерация При необходимости вы можете сформировать экземпляр растрового изображения TfgBitmap по SVG изображению любого размера. Для этого вам нужно запросить ресурс у TfgAssetsManager. При этом вы отвечаете за удаление экземпляра TfgBitmap: uses FGX.Canvas, FGX.Canvas.Types, FGX.Assets, FGX.Assets.SVG; var Asset: TfgAssetSVG; Bitmap: TfgBitmap; begin if TfgAssetsManager.Current.Find<TfgAssetSVG>('SVG asset name', Asset) then begin Bitmap := Asset.CreateBitmap(TSizeF.Create(100, 20)); try // Works with bitmap. finally Bitmap.Free; end; end; end; Ограничения 1. Неполноценная поддержка спецификации SVG. Мы проверили наш SVG парсер на иконках разных поставщиков от MaterialDesign, Microsoft Visual Studio Icons и до Icons 8. Однако, стандарт SVG довольно большой и написать за такое короткое время полноценный парсер задача довольно непростая. Несмотря на это, мы хотели бы, чтобы вы делились с нами SVG файлами, которые не могут прочитаться и отобразиться корректно. Это поможет нам оперативнее расширять парсер в тех направлениях, которые нужны для отображения массовых SVG изображений. При загрузке изображения в дизайнере, у иконки появится специальный значок ошибки, если она не поддерживается. Если файл загрузился и может быть отображен, но при чтении не удалось распознать какие-либо элементы, то он помечается значком-предупреждением: Это означает, что теоретически изображение может отобразиться, но оно может отображаться не корректно. 2. Отображение превью svg иконки в дизайнере ассетов не говорит о поддержке SVG файла. Для отображения SVG изображений в IDE мы используем Skia4Delphi. Однако, практика показала, что иногда SVG иконки, которые мы отображаем успешно на устройствах, не отображаются корректно в Skia4Delphi. Например, отображение иконки в Runtime через FGX Native: В то же время, Skia4Delphi (дизайнер IDE) просто показывает черный квадрат: Поэтому вам необходимо временно проверять корректно отображения SVG иконки именно на основании Runtime. Несмотря на то, что мы можем формировать SVG изображения и в дизайнере тоже нашим средство, мы пока используем Skia4Delphi, чтобы была возможность сравнить, как иконки должны отображаться корректно (парсер SVG должен по идее поддерживать больше функций). Спустя время, как только наш парсер будет поддерживать все ваши иконки, мы заменим в дизайнере рендер SVG иконок в дизайнере на наш. 3. Временно недоступна возможность динамически добавлять SVG файл в рантайме. Например, вы загрузили SVG файл в рантайме и хотите его отобразить. Несмотря на то, что технически у нас уже есть такая возможность, наш парсер пока не оптимизирован, чтобы выполнять преобразование SVG формата достаточно быстро. Чтобы потенциально не побуждать пользователей к проседанию производительности, данная возможность временно недоступна. При этом мы считаем, что такой сценарий довольно редкий. И по большей части, вы будете использовать именно заранее добавленные SVG изображения.
  13. Добрый вечер, Если захотите продлить на год, то это будет переход на годовую лицензию, но без покупки новой. Но на форуме нету возможности пока сделать апгрейд покупки с 3-х месячной до годичной. Так что если надумаете, обратитесь ко мне, я оформлю, как новую годовую но по цене годового продления. Спасибо
  14. Download: The distributive is available by request only. Release date: 22 March 2023 Improvements 🙌 TfgBarcodeScanner The new InvertedDataMatrix format was added for Android. The Codabar format was added for iOS. Gradle The gradle version was updated up to 8.0. Now you can use the latest Java JDK version (Java 19). TfgMap The new method SnapshotAsync was added for taking map snapshot asynchronously. fgMap1.SnapshotAsync(procedure (const ASnapshot: TfgBitmap) begin TfgAssetsManager.Current.AddBitmap('screenshot', ASnapshot); end); Dialog demo samples Added search for examples by name/components/description. Scrolling the list of examples by the mouse wheel (Delphi 11.3). Opening an example by double clicking. Added the ability to open the example folder in Explorer. Android Headers The new headers Android.Api.Location was added for "android.location" package. Other The new demo sample was added: "Components" -> "TfgMap" -> "Alternative Tile Providers". TfgPageControl displays border in Form designer now. FGX-254 Add color's code to "Assets.Consts.pas". Bug Fixes 🐛 When using frames, it is not possible to build the application. Suppress the unsupported framework message when adding a new form and frames for Delphi 11.3. FGX Native designer couldn't be loaded in RAD Studio 10.4. The rendering TfgPageControl component border was added to IDE.
  15. Скачать: Релиз доступен только по запросу. Дата релиза: 22 марта 2023 Улучшения 🙌 TfgBarcodeScanner Добавлена поддержка нового формата штрихкодов InvertedDataMatrix для Android. Добавлена поддержка формата Codabar для iOS. TfgMap Добавлен новый метод для асинхронного получения скриншота карты SnapshotAsync. fgMap1.SnapshotAsync(procedure (const ASnapshot: TfgBitmap) begin TfgAssetsManager.Current.AddBitmap('screenshot', ASnapshot); end); Gradle Обновили версию Gradle до 8.0. Теперь вы можете использовать последнюю версию Java JDK (Java 19). Диалог демо примеров Добавлен поиск примеров по названию/компонентам/описанию. Прокрутка списка примеров колесом мыши (Delphi 11.3). Открытие примера по двойному клику. Добавлена возможность открыть папку примера в проводнике. Android Headers Добавлены заголовочный файл Android.Api.Location для пакета "android.location". Прочее Добавлен новый демонстрационный пример: "Компоненты" -> "TfgMap" -> "Альтернативные поставщики тайлов". Добавлено отображение границ TfgPageControl в дизайнере. FGX-254 Добавить в файл "Assets.Consts.pas" в комментарии коды цветов. Исправление ошибок 🐛 При использовании фреймов невозможно собрать приложение. Подавление сообщения о неподдерживаемом фреймворке при добавлении новой формы и фреймов для Delphi 11.3. Дизайнер FGX Native не загружался в RAD Studio 10.4.
  16. Hello @Delphi64, As you can see Device Class in Form designer is just preview feature. It's special preset for testing your form on specified class. So this option just sets predefined size and style for form in designer and nothing more. Therefore, when you run the program on the device, it will take up the entire screen of the device, regardless of its type. To make the program look good on different screens, use the power of FlexBox. FlexBox allows you to make automatic transfers of elements and make a real rubber layout. Some of our clients develop application for tablet. As far as I know, these are some kind of terminals for working with clients - restaurants, hotels, etc. Thank you, Yaroslav
  17. Hello @Stefan Diestelmann, We have special broadcast of FGX.Platform.iOS.TfgiOSOpenURLWithOptionsMessage. TfgiOSOpenURLWithOptionsMessage = class(TMessage) Url: NSUrl; Options: NSDictionary; Result: Boolean; end; So technically you should subscribe on this message and handle like you did in FMX. Thank you
  18. .android-build - это общие скрипты на все конфигурации. Она используется для сборки и релиза и отладочной версии и AAB. Поэтому если размещать такую папку согласно конфигурации приведет к дублированию этого каталога для каждой конфигурации.
  19. Добрый вечер, Просто введите название библиотеки вручную в первое поле "com.google.firebase:firebase-analytics:21.2.0". Поиск сделан только для одного репозитория из двух (maven). Для Google репозитория апи поиска не доступно.
  20. По идеи, любые дополнительные цвета надо добавлять именно в тему, если цвет зависит от нее. В этом случае, одноименные ресурсы в папке темы, будут автоматически подхватываться при ее смене. Вы, наверное, про это и написали 🙂
  21. Download: The distributive is available by request only. Release date: 15 February 2023 New ✨ Frames Added full support for Delphi frames. TfgMap Added support for using third-party tiles in the TfgMap map, including Open Street Maps (OSM) tiles. To add tiles to maps, it is enough to throw the component TfgOSMMapTileProvider (when using OSM tiles) or TfgEventMapTileProvider (when adding your tiles) on the form and bind it to the map via the new property TfgMap.TileProvide. Details. Firebase Analytics The new component TfgFirebaseAnalytics was added for collecting usage analytics of your application. This component allows you to collect information about the use of your application by users. For example, you can define: Which form users open most often. Which versions of your application are running successfully. How many users launched the app for the first time. What purchases are most often made in your app. Which components are most often interacted with. And much more. Useful information: Details of setting up and using the component. Firebase Analytics. TfgForm Two new events OnActivated and OnDeactivated were added to detect when a form comes to the foreground and leaves the foreground on the screen. Dark Theme Added the ability to track the switching of the system theme using the new event TfgForm.OnSystemAppearanceChanged. The event is triggered when the operating system changes its appearance and it is indicated that the FGX Native application supports a dark theme. If you would like to use dark theme in your FGX Native application, you have to do: iOS: change value of property UIUserInterfaceStyle on Automatic for all iOS project configurations in "Project -> Options... -> Version Info". Android: change base theme of application in "styles.xml" file from "Theme.AppCompat.Light" to "Theme.MaterialComponents.DayNight". Look at the updated sample for understanding, how to implement automatic switching theme based on OS theme: "Resources" -> "Themes" -> "Using multiple themes". In addition, you can request the operating system appearance parameters at any time via FGX.SystemInfo.TfgSystemInfo.Appearance. New components icons New icons were added for TfgMap, TfgLottieImage, TfgCamera, TfgCameraPreview, TfgBarcode, TfgBarcodeScanner, TfgVideoControl, TfgCollectionView, TfgListMenu. Improvements 🙌 Form designer Added the ability to change only the width or only the height of the form/frames in the form designer. TfgBarcodeScanner Now the component returns the type of the recognized barcode via the TfgBarcode.Format. Java-Delphi bridge Added thread safety when using Java types in different threads for the first time at the same time. Bug Fixes 🐛 In case of usage font settings in TfgEdit and switchig IsPassword mode, component losts font settings (Android). The rendering TfgEdit / TfgMemo was fixed in IDE designer for HiDPI screens (IDE). The rendering of text with hyphenation was fixed in TfgLabel for designer (IDE). FGX-246 TfgBarcodeScanner error reading QR code. The application crashes (Android). FGX-247 Non-standard paths for compiled binaries (Android).
  22. Скачать: Релиз доступен только по запросу. Дата релиза: 15 февраля 2023 Новое ✨ Фреймы Добавлена полноценная поддержка Delphi фреймов. TfgMap Добавлена поддержка использования сторонних тайлов в карте TfgMap в том числе тайлы OpenStreetMap (OSM). Чтобы добавить тайлы в карты, достаточно кинуть компонент TfgOSMMapTileProvider (при использовании тайлов OSM) или TfgEventMapTileProvider (при добавлении своих тайлов) на форму и привязать его к карте через новое свойство TfgMap.TileProvide. Подробности. Firebase Analytics Добавлен новый компонент для сборка аналитики использования вашего приложения TfgFirebaseAnalytics. Данный компонент позволяет собрать информацию об использовании вашего приложения пользователями. Например, вы можете определить: Какую форму пользователи открывают чаще всего. Какие версии вашего приложения успешно запускаются. Сколько пользователей первый раз запустили приложение. Какие покупки чаще всего делают в вашем приложении. С какими компонентами чаще всего взаимодействуют. И многое другое. Полезная информация: Детали настройки и использования компонента. Firebase Analytics. TfgForm Добавлены два события OnActivated и OnDeactivated для определения, когда форма выходит на передний план и уходит с переднего плана на экране. Темная тема Добавлена возможность отслеживать переключение системной темы при помощи нового события TfgForm.OnSystemAppearanceChanged. Событие вызывается, когда операционная система меняет свое представление и указано, что FGX Native приложение поддерживает темную тему. Чтобы указать, что FGX Native поддерживает темную тему необходимо: Для iOS поменять значение ключа UIUserInterfaceStyle на Automatic для всех iOS конфигураций проекта в "Project -> Options... -> Version Info". Для Android поменять базовую тему приложения в файле "styles.xml" с "Theme.AppCompat.Light" на "Theme.MaterialComponents.DayNight" Вариант реализации автоматической смены темы приложения на основании системной темы, смотрите в обновленном примере: "Ресурсы" -> "Темы" -> "Использование нескольких тем". Помимо этого, вы можете в любой момент запросить параметры отображения операционной системы через FGX.SystemInfo.TfgSystemInfo.Appearance. Подробности. Иконки компонентов Добавлены иконки для компонентов TfgMap, TfgLottieImage, TfgCamera, TfgCameraPreview, TfgBarcode, TfgBarcodeScanner, TfgVideoControl, TfgCollectionView, TfgListMenu. Улучшения 🙌 Дизайнер форм Добавлена возможность изменять только ширину или только высоту формы/фреймы в дизайнере форм. TfgBarcodeScanner Теперь при компонент возвращает тип распознанного штрих кода через свойство TfgBarcode.Format. Java-Delphi мост Добавлена потокобезопасность при одновременном первом использовании Java типов в разных потоках. Исправление ошибок 🐛 При использовании своих настроек шрифта для TfgEdit и при переключении режима скрытия пароля, сбрасывались настройки шрифта (Android). Исправлено отображение TfgEdit / TfgMemo в дизайнере для HiDPI экранах (IDE). Исправлено отображение текста с встроенными переносами в TfgLabel в дизайнере (IDE). FGX-246 TfgBarcodeScanner ошибка при определении QR кода. Приложение падает (Android). FGX-247 Нестандартные пути для скомпилированных бинарников (Android).
  23. Добрый день, уважаемые разработчики. В этой статье мы поговорим о поддержке темной темы в FGX Native приложении, о том, как ее добавить, как сделать автоматическое переключение и о том, что добавлено в 1.15.3.0 в этой области. Введение Тема - это набор цветов и способов отрисовки компонентов. В светлой теме метка использует черный цвет текста и светлый фон, а в темной теме - наоборот, белый текст на темном фоне. Используя это правило, несложно настроить параметры отображения компонентов так, чтобы добавить темную тему. Для того, чтобы добавить темную тему буквально в один клик, мы предлагаем генератор темной темы в дизайнере ресурсов (Project -> FGX Assets Manager). Выбрав темный тип темы, дизайнер автоматически создаст базовые цвета, используемые в компонентах FGX Native, для темной темы. Позже вы можете их подстроить под себя и под свой дизайн. Дальше данные цвета используются по умолчанию в свойствах компонентах. Такие значения мы выводим бледным цветом, показывая, что значение берется по умолчанию из ресурса темы с указанным именем. Далее, если вы хотите использовать темную тему в вашем приложении, вы указываете ее название (имя, которое вы задали в дизайнере ассетов) в настройках формы через свойство ThemeName. Если вы хотите переключиться на светлую тему, то либо создаете аналогично отдельно светлую тему или же просто убираете присваивание темной темы для формы. И все казалось бы выглядит отлично. Однако, есть нюансы. И их здесь два: Не все нативные компоненты предоставляют настройки, при помощи которых можно полностью подстроить отображение компонента под темную тему. Нет возможности выполнить автоматическое переключение темы на основании системной темы. Если с настройками цвета текста все просто и очевидно, то с отрисовкой не все так однозначно. Операционная система самостоятельно рисует свои родные компоненты и умеет их отображать в зависимости от текущей системной темы. Сравните два скриншота окна выбора даты для темной и светлой темы. Если у кнопок и у меток вы можете поменять цвет шрифта, то с самим барабаном возникают вопросы, так как iOS не дает возможности для изменения цвета. А значит вы не можете его корректно отобразить только при помощи цветов в FGX Native. И даже если вы примените темную тему FGX Native барабан у вас будет или с темным текстом или же он будет светлый для светлой темы, в результате чего стилизация будет некорректной. Темная тема на уровне системы Темная тема появилась в операционных системах довольно недавно, а значит возникает вопрос, а что делать с поддержкой темной темы в старых приложениях, которые не обновляются? И тут в iOS/Android поступают немного по разному. iOS Все новые приложения для iOS, которые нацелены на свежие версии iOS, где была уже добавлена тема, автоматически получают поддержку темной темы. Это значит, что система при старте приложения автоматически рисует нативный компонент согласно текущей системной темы приложения и также выбирает соответствующие системные цвета. Если разработчик не готов или не хочет использовать темную тему, то он явно указывает в настройках проекта UIUserInterfaceStyle = light. В этом случае, iOS рисует родные компоненты в светлой теме и игнорирует темную тему. Мы используем этот режим в FGX Native, так как у нас не было полноценной поддержки темной темы. Поэтому все приложения FGX Native содержат этот флаг: Android Поддержка темной темы в Android более сложная. Она чем-то похожа на iOS, за исключением того, что некоторые производители Android устройств добавляют "свою" поддержку темной темы для старых версий. Например MIUI. В этом случае, производитель автоматом принудительно пытается применить темную тему и вычислить цвета на основании текущих (сделать их автоматический реверс). В результате кто-то из вас мог столкнуться с некорректным отображением приложения. Чтобы избежать этого мы принудительно отключаем все подобные попытки при помощи специального атрибута в стиле андроид приложения <!-- MIUI automatically recolors UI in dark mode, it uses emulation mode. --> <item name="android:forceDarkAllowed">false</item> Выбор же темной темы в Android приложения строится на основании используемой темы приложения в файле styles.xml. По причинам отсутствия полноценной поддержки темной темы, мы так же используем строго светлую тему для Android приложения <!-- Basic theme for all Android versions --> <style name="BaseAppTheme" parent="Theme.AppCompat.Light"> Как добавить темную тему в FGX Native? Добавление темной темы состоит из нескольких шагов: 1. Разрешаем FGX Native приложению автоматически использовать темную системную тему (Важно! FGX Native приложения не включают темную тему по умолчанию, поэтому требуется делать этот шаг). iOS: Удаляем ключ UIUserInterfaceStyle из настроек проекта: Project -> Options -> Version Info (для iOS конфигураций) Android: Меняем базовую тему в файле styles.xml (расположен в корне вашего приложения) cо значения "Theme.AppCompat.Light" на "Theme.MaterialComponents.DayNight" <style name="BaseAppTheme" parent="Theme.MaterialComponents.DayNight"> Эти правки позволят приложению автоматически менять отрисовки нативных компонентов при смене системной темы. 2. Добавляем светлую/темную темы в FGX Native через дизайнер ресурсов при помощи генератора тем: 3. Отлавливаем изменение системной темы и применяем к форме тему из ресурсов. Для этого используем новое событие TfgForm.OnSystemAppearanceChanged, которое содержит параметры текущей системной темы и которое вызывается каждый раз при смене системной темы. procedure TFormMain.fgFormSystemThemeChanged(Sender: TObject; const AAppearance: TfgSystemAppearance); begin case AAppearance.ThemeKind of TfgSystemThemeKind.Dark: ThemeName := 'Theme Dark'; TfgSystemThemeKind.Light: ThemeName := 'Theme Light'; end; end; Для того, чтобы при старте не накатывать тему из ресурсов еще раз, мы автоматически вызываем это событие каждый раз при открытии формы. Это позволяет ограничиться заданием темы только в данном обработчике. Если по каким-то соображениям, вы хотите узнать параметры системной темы, вы можете это сделать при помощи нового свойства FGX.SystemInfo.TfgSystemInfo.Appearance. Результат работы представлен ниже: video_2023-02-08_00-03-12.mp4 video_2023-02-09_22-47-34.mp4 Планы на будущее В будущем мы будем стараться упростить этот процесс, чтобы темная тема на стороне FGX Native создавалась автоматически, если разработчик не использует темы в своем приложении, и она автоматически переключалась при смене системной темы.
  24. Модуль вставляет только тогда, когда это нужно, а не всегда. Если какой-то компонент использует что-то из этого модуля, то он автоматически добавляется. Например, использование компонента TfgApplicationEvents приводит к автоматическому добавлению модуля. Если предположить по вашему утверждению, что просто пересборка вашего приложения добавила вам 19 Мб, то вот собранный демонстрационный пример и он весит около 14 Мб. Да, мы постоянно добавляем новый функционал и сделали миграцию на AndroidX, это безусловно увеличивает размер apk, но не в три раза, как у вас получается.

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.