Jump to content

Yaroslav Brovin

Administrators
  • Posts

    2,567
  • Joined

  • Last visited

  • Days Won

    647

Everything posted by Yaroslav Brovin

  1. Понял. Это можно решить, указав дополнительно модуль: FGX.Animation.TfgAnimationHelper.ShowModalForm(MyModalForm) В следующей версии переименуем хелпер для TfgControl, чтобы он не конфликтовал с одноименным типом.
  2. Правильно ли я понимаю, что проблема решена?
  3. Используются ли свои транслированные Java хедеры?
  4. Добрый день, Нет, не планируется. Текущей триал-версии достаточно, чтобы понять о том, как работает библиотека в целом. Ошибки исправляются. С исправлениями и нововведениями вы можете ознакомиться в блоге или в истории изменений.
  5. 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).
  6. Скачать: Релиз доступен только по запросу. Дата релиза: 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).
  7. Продолжаем анонсировать интересные возможности новой версии FGX Native 1.11.0.0. И в этот раз - это компонент локализации TfgTranslator. В этой версии мы поставляем отдельный bpl-пакет с компонентом локализации TfgTranslator, который мы сами уже давно и успешно используем в реализации FGX Native дизайнера. Однако, мы не рекомендуем его использовать в мобильных приложениях, поскольку все словари с переводами всегда загружаются при создании формы, а так же, поскольку у нас есть иное видение того, как должен осуществляться перевод в мобильных приложениях. Несмотря на сказанное - это рабочее решение, которое может помочь вам с локализацией ваших проектов. Мы поставляем этот компонент по правилу "as-is", то есть нет никаких гарантий (в том числе и поддержки) с нашей стороны по его работе. Этот пакет не является постоянным и может быть в будущем исключен из поставки при появлении рекомендованного решения. Как установить? Чтобы установить компонент локализации нужно выполнить регистрацию нового пакета компонента в среде. Для этого: Открываем менеджер пакетов: Main menu -> Component -> Install Packages. Нажимаем кнопку "Add..." Открываем каталог, где установлен FGX Native и открываем каталог, соответствующий версии вашей IDE. Если вы не меняли место установки библиотеки, то: "C:\Users\Yaroslav\AppData\Local\FGX Native\Libs\<версия IDE>\Win32\Release" Выбираем "FGXTranslatorD.<версия IDE>.bpl": Для 10.3 - 260 Для 10.4 - 270 Закрываем окно нажатием на кнопку OK. Теперь компонент TfgTranslator доступен для использования на панели "Pallette": FGX: Translator -> TfgTranslator. Как использовать? Компонент TfgTranslator выполняет перевод всех строковых свойств в рамках одной формы. Чтобы им воспользоваться, нужно бросить компонент на форму. Чтобы выполнить первичную настройку, необходимо создать список поддерживаемых языков и, по желанию, выполнить перевод текущих строк. По двойному нажатию на компонент открывается редактор: Добавление языков По умолчанию, в компоненте есть только один язык "default", который используется для всех языков, если перевода нет. Вы можете добавить любое количество дополнительных языков. Для этого нажмите кнопку с глобусом и введите код языка (например "en"). После добавления всех языков, необходимо выполнить перевод доступных строковых ресурсов или завести свои строковые константы. Сканирование строковых ресурсов Компонент позволяет автоматически собрать все доступные строковые значения свойств компонентов формы. Для этого нужно нажать на кнопку с двумя стрелками. Это автоматически добавит в словарь все строковые ресурсы. В столбце "Ключ" указаны уникальные идентификаторы переводимых строк, в остальных столбцах содержатся переводы на доступные языки. С большой долей вероятности, после сканирования строк, вам будет необходимо удалить все лишние строки. Вы можете это сделать при помощи кнопки Delete. Ручные строковые ресурсы Вы можете указать свои строковые ресурсы для использования их в рантайме. Для этого надо нажать на кнопку "T+" и указать код строки и ее переводы. Перевод Выполните перевод текущего словаря путем двойного нажатия на ячейку таблицы. Смена языка Смена языка осуществляется при помощи свойства TfgTranslator.LangId, где нужно указать нужный язык. При смене кода языка, компонент автоматически выполнит перевод указанных свойств. Русский (по умолчанию): Английский:
  8. Добрый день, После получения фотографии выполняется ее автоматический поворот, чтобы она была в правильной ориентации. Клиенту прилетает изображение с нормализованной ориентацией. Нет. Это системное приложение. Для его использования разрешение на камеру не требуется.
  9. Продолжаем серию статей, посвященных новинкам релиза FGX Native 1.11.0.0. И в этой статье поговорим о самой главной и ожидаемой новинке - поддержка полноценных анимаций 🔥🔥🔥. TfgAnimationManager - центр управления анимациями Главным центром управления анимации любого компонента является менеджер анимаций, доступ к которому можно получить через свойство TfgControl.AnimationManager. Именно он отвечает за создание, добавление и удаление аниматоров. Создание аниматора Чтобы создать нужный аниматор нужно воспользоваться одним из следующих методов TfgAnimationManager: function AddOpacityAnimation(const AStartOpacity, AFinishOpacity: Single; const ADuration: Integer = TfgAnimation.DurationPlatformValue): TfgAnimation; function AddBoundsAnimation(const AStartBounds, AFinishBounds: TRectF; const ADuration: Integer = TfgAnimation.DurationPlatformValue): TfgAnimation; function AddScaleAnimation(const AStartScaleX, AFinishScaleX, AStartScaleY, AFinishScaleY: Single; const ADuration: Integer = TfgAnimation.DurationPlatformValue): TfgAnimation; function AddRotationAnimation(const AStartAngle, ASweepAngle: Single; const ADuration: Integer = TfgAnimation.DurationPlatformValue): TfgAnimation; function AddTranslationAnimation(const AStartPoint, AFinishPoint: TPointF; const ADuration: Integer = TfgAnimation.DurationPlatformValue): TfgAnimation; function AddGroupAnimation: TfgAnimationGroup; Каждый метод создает соответствующий своему названию тип аниматора с указанными стартовыми и конечными значениями. Например, если вы хотите плавно показать кнопку в течении 1 секунды, достаточно выполнить следующий код. uses FGX.Animation; var Animation := Button.AnimationManager.AddOpacityAnimation(0 {start opacity}, 1 {finish opacity}, 1000 {msec}); Animation.Start; Обратите внимание, что в данном случае, созданный аниматор "Animation" останется у компонента и не будет удален, пока вы не сделаете это сами или компонент не будет уничтожен. Если вы планируете часто использовать один и тот же вид анимации на конкретном компоненте, то предпочтительным способом будет являться именование анимации. Например: uses FGX.Animaton.Helpers; // Создаем аниматор один раз Button.AnimationManager.AddOpacityAnimation(0 {start opacity}, 1 {finish opacity}, 1000 {msec}) .SetName('fade-in'); // Будущие запуски анимации Button.AnimationManager['fade-in'].Start; Если же вам достаточно выполнить анимацию всего лишь один раз, то имеет смысл пометить ее для автоматического удаления опцией TfgAnimationOption.ReleaseOnFinish: uses FGX.Animation.Types, FGX.Animation.Helpers; Button.AnimationManager.AddOpacityAnimation(0 {start opacity}, 1 {finish opacity}, 1000 {msec}) .AddOption(TfgAnimationOption.ReleaseAnimationOnFinish) .Start; Хелпер анимации Для удобного создания аниматоров мы предлагаем вам готовый хелпер FGX.Animation.Helpers, который позволяет использовать цепочку вызовов методов аниматора и облегчить визуальное восприятие готового кода. Без хелпера: uses FGX.Animation; var OpacityAnimation: TfgAnimation; OpacityAnimation := Button.AnimationManager.AddOpacityAnimation(0 {start opacity}, 1 {finish opacity}); OpacityAnimation.Duration := 1000 {msec}; OpacityAnimation.AutoReverse := True; OpacityAnimation.Delay := 500 {msec}; OpacityAnimation.Options := OpacityAnimation.Options + [TfgAnimationOption.ReleaseAnimationOnFinish]; OpacityAnimation.Start; С хелпером: uses FGX.Animation.Types, FGX.Animation.Helpers; Button.AnimationManager.AddOpacityAnimation(0 {start opacity}) .SetDuration(1000 {msec}) .SetDelay(500 {msec}) .SetAutoReverse .SetReleaseAnimationOnFinish .Start; Чтобы воспользоваться хелперами, необходимо подключить модуль FGX.Animation.Helpers. Обзор базовых аниматоров Поддерживается 5 базовых типов анимаций: Opacity. Изменение прозрачности (TfgControl.Opacity). Bounds. Изменение положения и размера (TfgControl.Position + TfgControl.Size). Scale. Изменение масштаба отображения компонента. Rotation. Изменение угла поворота компонента. Translate. Выполнение смещения компонента относительно его текущей позиции (TfgControl.Position). Анимация прозрачности (TfgAnimationManager.AddOpacityAnimation) Чтобы выполнить анимацию прозрачности нужно создать аниматор через метод TfgAnimationManager.AddOpacityAnimation и указать стартовое и конечное значение свойства TfgControl.Opacity. Image.AnimationManager.AddOpacityAnimation(0 {start opacity}, 1 {finish opacity}, 2000 {msec}) .Start; opacity.mp4 Анимация перемещения и изменения размера (TfgAnimationManager.AddBoundsAnimation) Чтобы выполнить анимацию изменения размера и позиции нужно создать аниматор через метод TfgAnimationManager.AddBoundsAnimation и указать стартовый и конечный прямоугольник. Пример ниже демонстрирует интересный прием акцентирования внимания на компоненте через визуальное расширение и сжатие компонента. var StartRect: TRectF; StopRect: TRectF; begin StopRect := imgPhoto.Bounds; StartRect := imgPhoto.Bounds; StartRect.Inflate(16, 16); Image.AnimationManager.AddBoundsAnimation(StartRect, StopRect) .Start; bounds.mp4 Анимация изменения масштаба (TfgAnimationManager.AddScaleAnimation) Чтобы выполнить анимацию изменения масштаба нужно создать аниматор через метод TfgAnimationManager.AddScaleAnimation и указать стартовые и конечные значения коэффициентов масштабирования по горизонтали и вертикали. Image.AnimationManager.AddScaleAnimation(0.5, 1, 0.5, 1, 1000) .Start; scale.mp4 Анимация поворота компонента (TfgAnimationManager.AddRotationAnimation) Чтобы выполнить анимацию поворота компонента нужно создать аниматор через метод TfgAnimationManager.AddRotationAnimation и указать стартовое значение угла и на сколько градусов нужно совершить поворот (в градусах). При этом, если угол поворота положительный, то поворот осуществляется по часовой стрелки, а если отрицательный, то против часовой стрелки. Image.AnimationManager.AddRotationAnimation(0 {start}, 360 {Sweep}, 1000) .Start; rotate.mp4 Анимация смещения (TfgAnimationManager.AddTranslationAnimation) Чтобы выполнить анимацию смещения компонента нужно создать аниматор через метод TfgAnimationManager.AddTranslationAnimation и указать стартовое и конечное смещения значения позиции компонента. Image.AnimationManager.AddTranslationAnimation(TPointF.Create(-16, 0), TPointF.Create(16, 0), 1000) .Start; translate.mp4 TfgAnimation - основа анимации После того, как мы посмотрели несколько примеров создания аниматоров вживую, пришло время рассмотреть их настройки детальнее. Длительность анимации (TfgAnimation.Duration) Общая длительность выполнения текущей анимации в миллисекундах в одну сторону (от стартового значения до конечного). Задержка перед запуском (TfgAnimation.Delay) Если вам необходимо выполнить анимацию с задержкой, то вы можете это сделать указав значение задержки в миллисекундах в свойстве TfgAnimation.Delay. Количество повторений (TfgAnimation.RepeatCount) Если вам необходимо повторить анимацию несколько раз или сделать ее бесконечной, то вы можете это сделать при помощи этого свойства, где RepeatCount = 0 - повторение анимации бесконечное число раз. RepeatCount > 0 - повторение анимации ровно "RepeatCount" раз. Например при помощи этого свойства легко сделать анимацию тряски: повторим 4 раза движение компонента по горизонтальной оси. shake+repeatCount.mp4 Интерполяция (TfgAnimation.CurveKind) Это свойство отвечает за формулу интерполяции значений анимируемых свойств. Пока поддерживается 4 самых распространенных типов интерполяции. TfgAnimationCurveKind = (Linear, EaseIn, EaseOut, EaseInOut); Краткое описание стратегии изменения анимируемого значения на протяжении всей длительности анимации в зависимости от типа интерполяции: Linear - равномерное изменение. Варианты типичного применения: короткие анимации, изменение цвета. EaseIn - медленное начало с постепенным нарастанием скорости к концу анимации. Варианты типичного применения: исчезновения объекта. EaseOut - быстрое начало с постепенным замедлением скорости к концу анимации. Варианты типичного применения: появления объекта. EaseInOut - медленное начало с нарастанием скорости посередине и постепенным замедлением скорости к концу анимации. Варианты типичного применения: перемещение объекта, изменение масштаба. Порядок запуска (TfgAnimation.RunOrder) Это свойство актуально только в контексте групповых аниматоров и позволяет указывать порядок запуска текущей анимации в группе. Подробнее это будет рассмотрено в разделе "Групповые анимации". TfgAnimationRunOrder.Immediately - запуск анимации в момент старта родительского группового аниматора, либо вместо с предыдущим одноуровневым аниматором. TfgAnimationRunOrder.AfterPrevious - запуск анимации после окончания предыдущей анимации в рамках группового аниматора. Дополнительные настройки (TfgAnimation.Options) TfgAnimationOption.StartFromCurrent - Начинать анимацию с текущего значения свойства компонента, а не указанного стартового значения. TfgAnimationOption.AlwaysSetFinalValue - При остановке анимации, эта опция позволяет указать сразу конечное значение свойства компоненту, иначе конечное значение останется таким, какое оно было на момент остановки. TfgAnimationOption.AutoReverse - Нужно ли автоматически выполнить анимацию в обратном порядке после окончания прямой анимации. Актуально для RepeatCount > 0. TfgAnimationOption.ReleaseControlOnFinish - позволяет автоматически удалить компонент по окончании анимации. TfgAnimationOption.ReleaseAnimationOnFinish - позволяет автоматически удалить аниматор по окончании анимации. Название (TfgAnimation.Name) Вы можете присвоить уникальное название аниматору, чтобы в последствии обращаться к нему напрямую по его имени. Например: var FadeAnimation: TfgAnimation; FadeInAnimation := Button.AnimationManager['fade-in']; Групповые анимации Для создания сложных анимаций мы предлагаем использовать групповые аниматоры, задача которых сгруппировать несколько анимаций и задать правила их запуска. По умолчанию групповой аниматор запускает все вложенные анимации одновременно. Например, такой аниматор ниже позволяет реализовать анимацию модального открытия формы на Android: var AnimationGroup: TfgAnimationGroup; AnimationGroup := LForm.AnimationManager.AddGroupAnimation .Add(LForm.AnimationManager.CreateScaleAnimation(1.125, 1, 1.125, 1)) .Add(LForm.AnimationManager.CreateOpacityAnimation(0, 1)); Мы создаем два аниматора, объединенные в группу, один из которых масштабирует форму, а второй меняет ее прозрачность. Групповой аниматор TfgAnimationGroup по сути так же является аниматором TfgAnimation. А это значит, что вы можете их вкладывать друг в друга добиваясь анимации любой сложности. Пример ниже показывает последовательно выполнение анимаций: вначале смещение компонента, а затем поворот: Image.AnimationManager.AddGroupAnimation .Add(Image.AnimationManager.AddTranslationAnimation(TPointF.Create(-16, 0), TPointF.Create(16, 0), 1000)) .Add(Image.AnimationManager.AddRotationAnimation(0, 360, 1000) .SetRunOrder(TfgAnimationRunOrder.AfterPrevious)) .Start; group-animation-1.mp4 Вы можете выделить создание подобной анимации в отдельный метод и затем применять к любому компоненту. Шаблоны анимаций Это приятный бонус для наших пользователей. Мы предлагаем базовый набор уже готовых анимаций, которые вы можете использовать в своих проектах всего лишь одной строчкой кода. Для того, чтобы воспользоваться шаблонами, нужно подключить модуль FGX.Animation.Templates. Чтобы просто потрясти компонент, достаточно просто написать: Image.Shake; А если требуется настроить параметры на свой вкус и цвет, можно воспользоваться перегруженной версией: Image.Shake(TfgShakeAnimationParams.Default .SetDuration(2000) .SetRepeatCount(10)); Видео ниже демонстрирует все текущие доступные для использования шаблоны: templates.mp4 Среди шаблонов так же доступны различные варианты появления и скрытия компонентов с переносами и без. Вы можете ознакомиться с текущим набором в демо проекте: "Анимация" -> "Шаблоны анимаций". Ограничения Несмотря на то, что анимации уже работают, у них есть ряд ограничений, часть из которых мы будем постепенно убирать в будущих версиях. Нельзя менять стартовые и конечные значения уже созданных анимаций. Это можно делать только путем удаление старого и создания нового аниматора. Изменение свойств анимации во время ее выполнения не приведет их к применению. Все свойства применяются в момент старта анимации. Изменение размера компонента-контейнера через анимацию не приводит к выравниванию дочерних компонентов. Если вам нужно выполнить выравнивание содержимого, то надо добавлять дополнительные аниматоры для перемещения и изменения размеров вложенных компонентов отдельно. Устаревшее API Из-за создания полноценной анимации и выделения старых хелперов анимации TfgAnimationHelper в шаблоны анимации FGX.Animation.Templates, мы помечаем существующие методы анимации FadeIn, FadeOut, как устаревшие. Через несколько релизов мы удалим эти методы из TfgAnimationHelper, чтобы вы пользовались более удобными средствами анимации. На текущий момент методы анимации формы остаются как есть. В ближайших релизах эту анимацию мы встроим прямо в TfgForm, в результате чего анимация открытия/закрытия форм будет осуществляться автоматически и не будет требовать от вас лишних строчек кода. Итог Мы продолжим развивать и совершенствовать реализацию анимаций. Поэтому нам очень важно получить от вам обратную связь о том, что удобно, что нет и чего не хватает. Эта информация поможет нам сделать анимацию лучше и удобнее для всех.
  10. В следующем релизе FGX Native 1.11.0.0 будет много новых интересных возможностей, которые безусловно найдут свое место в ваших приложениях. В этой статье поговорим о первой новинке: получение фотографии с камеры или из системной галереи изображений. До версии 1.11.0.0 получение фотографии с камеры, было не самой тривиальной задачей. Было два решения, которым обычно пользовались разработчики: Использование напрямую камеры и разработка своего решение на базе демонстрационного проекта "Компоненты" -> "TfgCamer" -> "Фотокамера". Несмотря на то, что этот способ рабочий и он дает возможности по кастомизации внешнего вида видеоискателя, зачастую требуется просто получить фотографию от пользователя. Использование нативного API каждой платформы для отправки запроса на получение фотографии системным приложениям. TfgPhotoPicker В этом релизе мы предлагаем кроссплатформенное решение в виде специального типа пикера, используемого для выбора фотографии из системной галереи изображений или снятия фотографии с системной камеры. video_2021-05-12_01-16-46.mp4 Чтобы отправить запрос на получение фотографии с камеры достаточно написать всего три строчки кода: uses FGX.Assets, FGX.Assets.Helpers, FGX.Pickers.Photo; procedure TFormMain.btnTakePhotoFromCameraTap(Sender: TObject); begin TfgPickerPhotoFactory.PickPhotoFromCamera(btnTakePhotoFromCamera, procedure(const AFileName: TFileName) begin TfgAssetsManager.Current.AddBitmapFromFile('Photo', AFileName, True); end); end; Для получения фотографии из галереи: procedure TFormMain.btnTakePhotoFromLibraryTap(Sender: TObject); begin TfgPickerPhotoFactory.PickPhotoFromLibrary(btnTakePhotoFromLibrary, procedure(const AFileName: TFileName) begin TfgAssetsManager.Current.AddBitmapFromFile('Photo', AFileName, True); end); end; Запрос отправляет через специальную фабрику FGX.Pickers.TfgPickerPhotoFactory, которая предлагает три метода: TfgPickerPhotoFactory = class public /// <summary>Создает и возвращает платформенный пикер получения фотографии для ручной работы.</summary> /// <remarks>Удаление пикера лежит на плечах вызываемого кода.</remarks> class function CreatePicker(const AOwner: TObject): TfgPickerPhoto; /// <summary> /// Иницирует получение фотографии с системного приложения камеры. Фотография возвращается в переданную /// анонимную процедуру <c>AOnDidFinishPickingCallback</c>. /// </summary> /// <remarks> /// Вам не требуется следить за временем жизни возвращаемого пикера. Пикер автоматически удалится после того, /// как он будет закрыт пользователем. /// </remarks> class function PickPhotoFromCamera(const AOwner: TObject; const AOnDidFinishPickingCallback: TfgDidFinishPickingCallback): TfgPickerPhoto; /// <summary> /// Иницирует получение фотографии с системного приложения галереи изображений. Фотография возвращается в /// переданную анонимную процедуру <c>AOnDidFinishPickingCallback</c>. /// </summary> /// <remarks> /// Вам не требуется следить за временем жизни возвращаемого пикера. Пикер автоматически удалится после того, /// как он будет закрыт пользователем. /// </remarks> class function PickPhotoFromLibrary(const AOwner: TObject; const AOnDidFinishPickingCallback: TfgDidFinishPickingCallback): TfgPickerPhoto; end; Второй и третий метод предназначены для быстрого получения фотографии с камеры или из галереи. Первый же метод предназначен для ручной настройки пикера и отлова всех событий (открытие, закрытие, отмена и тд.). Внимание! Для корректной работы пикера на платформе Android необходимо в настройках проекта включить опцию: Project -> Options... -> Application -> Entitlement List -> Security File Sharing = True. Также мы подготовили демонстрационный проект, который позволит вам попробовать эту возможность самостоятельно: "Компоненты" -> "Пикеры" -> "Получение фотографии". Всем хорошей рабочей недели. Следите за будущими анонсами FGX Native 1.11.0.0.
  11. Download: The distributive is available by request only. Release date: 28 April 2021 New ✨ The new demo sample was added: "Components" -> "TfgCollectionView" -> "Items ordering". Improvements 🙌 FGX-52 Showing white icons in Object Inspector. Bug Fixes 🐛 FGX-48 Cannot select TfgScrollBox child, if scrollbox is scrolled to bottom (IDE). FGX-49 Swithcing Code<->Design doesn't work with F12 hotkey. FGX-50 "Segmentation fault (11)" when application is terminated with TfgComboBox (Android). FGX-51 TfgPageControl doesn't delete page via RemovePage method. FGX-53 Drag&Drop TfgPage leads to IDE crash in Desingtime. FGX-55 Properties Enabled and HitTest are ignored in TfgEdit (Android). Fixed translation issue with "Класс устройства" in form designer.
  12. Скачать: Релиз доступен только по запросу. Дата релиза: 29 апреля 2021 Новое ✨ Добавлен новый демонстрационный проект: "Компоненты" -> "TfgCollectionView" -> "Перемещение элементов между собой". Улучшения 🙌 FGX-52 Отображение белых картинок в инспекторе объектов. Исправление ошибок 🐛 FGX-48 Прокрутка ScrollBox'a в Design формы. FGX-49 Переключение Code->Design по F12. FGX-50 "Segmentation fault (11)" при завершении приложения, если было изменение ItemIndex у TfgComboBox (Android). FGX-51 Удаление страниц в редакторе формы у fgPageControl. FGX-53 Падение IDE при перетаскивании TfgPage в Desingtime. FGX-55 Игнорируются свойство Enabled и HitTest у TfgEdit (Android).
  13. Добрый день, Эту ошибку поправлю. На этой неделе будет хотфикс (ориентировочно пятница/суббота). Спасибо
  14. Download: The distributive is available by request only. Release date: 18 April 2021 Important notes 🚨 We removed value TfgSystemStatusBarVisibility.VisibleAndPush from TfgForm.SystemStatusBar.Visibility. If you use this value in forms, then re-open these forms in the IDE and ignore the absence of this value. New ✨ Supporting the iOS style in the IDE We added supporting the iOS style in the form designer. The switcher is placed on the toolbar of Form Designer on the right side of device class combobox. The switcher is shown only for "Universal" device class. The iOS style supports only half of all controls at this moment, the supporting of remaining controls will be added later in the next releases. Other The TfgForm.SystemStatusBar property is implemented for iOS (iOS). The value TfgSystemStatusBarVisibility.VisibleAndPush was removed. New iOS API headers were added: PhotoKit и ImageIO. Improvements 🙌 Form designer We improved the work of the form designer by revising the logic of changing the size of the form. Previously, the resizable size included a decorative element "system navigation bar", which could be misleading as to what the actual size is set to the form. Now, when you change the size of the form, it is displayed exactly its size without taking into account the decorative elements. Other In older projects, some of the paths for the iOS app icons were not relevant. Therefore, the launch of FGX Native demo projects could end in failure. Now, when you open any old project, the settings are automatically migrated, taking into account the updated icon paths to the current ones. All demo samples were updated for supporting in the latest FGX Native version. Bug Fixes 🐛 FGX-28 Scrolling a TfgScrollBox in designer. FGX-41 The application with TfgCalendar is crashed on Android 5.0 (Android). FGX-42 The first openning form in designer. FGX-43 TfgWebBrowser Access Violation (iOS). FGX-44 PullToRefresh doesn't work, if TfgCollectionView is empty (iOS). FGX-45 Extracting file assets (iOS). FGX-46 Error is rising, when application is using location in TfgMap (iOS). FGX-47 Strange behavior of TfgAssetsManager.Current.AddBitmapFromUrl when clicking on the map marker (iOS). If the form did not fit in the entire form designer, the grid was not displayed in the areas below and to the right. Every time an FGX Native project was opened, the IDE always marked the project as modified, even though there were no actual changes. We fixed it.
  15. Скачать: Релиз доступен только по запросу. Дата релиза: 18 апреля 2021 Внимание 🚨 В этом релизе удалена поддержка значения TfgSystemStatusBarVisibility.VisibleAndPush для TfgForm.SystemStatusBar.Visibility. Если вы использовали это значение в формах, то переоткройте в IDE эти формы проигнорируйте отсутствие данного значения. Новое ✨ Поддержка iOS стиля в IDE Мы добавили поддержку стиля iOS в дизайнер формы. Переключатель стиля расположен на панели инструментов дизайнера формы справа от выпадающего списка класса устройств. Переключатель отображается только для "Universal" класса устройств. На текущий момент времени iOS стиль поддерживает только половину основных компонентов, оставшиеся стили будут добавлены в течении следующих релизов. Прочее Реализовано TfgForm.SystemStatusBar для iOS (iOS). Удалено значение TfgSystemStatusBarVisibility.VisibleAndPush. Добавлены заголовочные файлы для iOS API: PhotoKit и ImageIO. Улучшения 🙌 Дизайнер форм Мы улучшили работу дизайнера формы, пересмотрев логику работы изменения размера формы. Раньше в изменяемый размер входил декоративный элемент "панель навигации", что могло вводить в заблуждение относительно того, какой реально размер задается форме. Сейчас же при изменении размера формы, выводится именно ее размер без учета декоративных элементов. Прочее В старых проектах, часть путей для иконок iOS приложения была не актуальна. Поэтому запуск демонстрационных проектов FGX Native мог заканчиваться неудачей. Теперь при открытии любого старого проекта, автоматически происходит миграция настроек с учетом обновленных путей иконок до актуальных. Все демонстрационные проекты обновлен до последней версии FGX Native. Исправление ошибок 🐛 FGX-28 Прокрутка ScrollBox'a в Design формы. FGX-41 TfgCalendar Падает приложение на Android версии 5.0 (Android). FGX-42 Первое открытие формы в дизайнере. FGX-43 TfgWebBrowser Access Violation (iOS). FGX-44 PullToRefresh не срабатывает если нет данных в коллекции (iOS). FGX-45 Распаковка ресурсов (iOS). FGX-46 Ошибка при использовании местоположения в TfgMap (iOS). FGX-47 Странное поведение TfgAssetsManager.Current.AddBitmapFromUrl при нажатии на маркер карты (iOS). Если форма не помещалась в дизайнере формы целиком, то в областях снизу и справа сетка не отображалась. При каждом открытии FGX Native проекта, среда всегда помечала такой проект, как измененный, несмотря на то, что никаких изменений реально не было. Мы это исправили.
  16. Добрый день, Починили. Проверил ваш заказ, попробуйте оплатить еще раз. Сейчас не должно быть никаких проблем. Спасибо.
  17. Я понял, что проверить. Тему скопирую в трекер.
  18. Hello, We don't sell English version of library for foreign countries at this moment. So you are not able to pay for it. We are going to make public International release later, when iOS is ready. Thank you
×
×
  • Create New...