Jump to content

Yaroslav Brovin

Administrators
  • Posts

    2,567
  • Joined

  • Last visited

  • Days Won

    647

Posts posted by Yaroslav Brovin

  1. On 6/4/2023 at 9:11 PM, Alex O said:

    нет, у меня с любыми размерами демо падает сразу же после запуска (((

    1. Есть что в стек трейсе, в логе на устройстве?
    2. Запускаете демо-пример или свой проект делаете?
    On 6/3/2023 at 3:38 AM, Alex O said:

    а вот идентификатор приложения не могу понять куда прописывать 

    Идентификатор проекта нигде не нужно указывать для Yandex Mobile Ads, на сколько я знаю. Только AdUnitID у баннера.

    On 6/3/2023 at 5:32 PM, dervish00 said:

    да. у меня выскакивала ошибка. я поменял smartbanner на другое значение и всё получилось.

    SmartBanner не поддерживается официально в Yandex Mobile Ads. Правку внес.

  2. Hello @Angel,

    The first as I mentioned before this components depends on FMX, so they will not work in FGX Native. Now it is clearly visible by opening almost any module of this library. FMX is used everywhere.* modules.

    The second we are providing trial for testing purposes. One of the goal is a testing compatibility with 3-d party components. You can check any components in FGX Native project.

    Thank you.

  3. 1 hour ago, Alex O said:

    Стесняюсь спросить, но что означает: возможность прокрутки списка интерактивным способом?

    Значит пальцем. Обычно есть два способа:

    • Программным. Когда программист при вызове метода выполняет какое-то взаимодействие пользователя (например, прокрутка)
    • Интерактивное. Пользователь пальцем взаимодействуя с компонентом заставляет его крутиться.
    1 hour ago, dervish00 said:

    а у меня вопрос такой: можно ли в рантайме менять провайдера рекламы в зависимости от страны? к сожалению, проверить не могу, т.к. ключ активации последний не подходит, жду нового (((

    Можно использовать два разных провайдера рекламы и переподключать их на лету. Однако, нужно иметь в виду, что AdMob требует указания ключа на уровне андроид манифеста. Поэтому AdMob всегда будет инициализироваться.

    1 hour ago, dervish00 said:

    Можно использовать один провайдер в приложении. У провайдера связь один ко многим.

    Это формулировка говорит о том, что можно использовать один провайдер для всех компонентов баннеров и полностраничной рекламы.

    • Thanks 1
  4. Download:
    The distributive is available by request only.

    Release date:
    1 June 2023


    Warning 🚨

    1. The architecture of advertising components were refactored, so now it supports different adv providers (not only AdMob). In case if you are using components TfgBannerAd or TfgInterstitialAd, you have to do follow steps:

    • Put on form new component TfgGoogleAdMobProvider, where you use TfgBannerAd or TfgInterstitialAd componsnts. The one instance TfgGoogleAdMobProvider can be used in all components.
    • Link TfgBannerAd and TfgInterstitialAd with provider via Provider property.

    If you don't do this steps, than advertising will not be displayed in runtime.

    2. There was a renaming of two types used for TfgPickerPhoto:

    • TfgPickerPhotoSource replaced by TfgPickerMediaSource
    • TfgPhotoFiles replaced by TfgMediaFiles

    Please update the declarations if you use these types directly in your projects.

    New

    TfgRegionPicker

    The new component was developed for interactive selecting rectangle region.

    TfgBannerAd and TfgInterstitialAd

    The ad placement components have been refactored, as a result of which different advertising providers (Google AdMob, Yandex Mobile Ads) are now supported.

    Previously, the advertising platform Google AdMob was integrated directly into the components TfgBannerAd and TfgInterstitialAd. Now we have separated the advertising provider into separate components TfgGoogleAdMobProvider called the advertising provider. And the components TfgBannerAd and TfgInterstitialAd simply use information from the provider. Therefore, now to use advertising, it is necessary to use the provider of the required advertising platform and link it with the components TfgBannerAd and TfgInterstitialAd. You can use one provider per application. The provider has a one-to-many connection.

    Yandex Mobile Ads

    We added support for advertising in the "banner" and "full-page advertising" format from the Yandex Mobile Ads advertising platform. A new provider TfgYandexMobileAdsProvider has been developed.
    Currently, the advertising components are implemented only for Android.

    • Added a new demo example: "Components" -> "TfgBannerAd" -> "Example of displaying an advertising banner (Yandex Mobile Ads)"

    Setup on Android

    In order to use the mobile version of Yandex, you need to add "com.yandex.android:mobileads:5.7.0" in the application settings "Project" -> "FGX Native Android Libraries".

    Crop, preview and other helpers for TfgBitmap

    The new unit FGX.Bitmap.Helpers was added. It expands features of TfgBitmap and adds additional transformation methods: Crop and Thumbnail.

      TfgBitmapHelper = class helper for TfgBitmap
      public
        {$REGION 'Creating new bitmaps'}
        /// Create thumbnail image, which can be used for preview. The image is fit into specified size with saving aspect ration.
        /// If the specified zize is zero, the method raises exception.
        function CreateThumbnail(const ASize: TSize): TfgBitmap;
    
        /// Creates new cropped image from specified region. ARegion - physical coordinates of region.
        function CreateCroppedBitmap(const ARegion: TRect): TfgBitmap;
    
        /// Creates new bitmap and apply specified tint color.
        function CreateTinted(const ATintColor: TAlphaColor): TfgBitmap;
    
        /// Creates new bitmap and rotate it on specified angle.
        function CreateRotated(const AAngle: TfgRotation): TfgBitmap;
        {$ENDREGION}
    
        {$REGION 'Transformation'}
        /// Crops bitmap by specified region. ARegion - physical coordinates of region.
        /// If region coordinates ARegion are bigger than bitmap bounds, then region size is cropped by bitmap bounds.
        /// If the specified zize is zero, then result bitmap became empty.
        procedure Crop(const ARegion: TRect);
        {$ENDREGION}
      end;

    To use the new methods, you need to add the FGX.Bitmap.Helpers to the uses section and call new methods on the instance of TfgBitmap.

    Exif

    The new service for extracting Exif meta-information. To request Exif information, you need to use the class FGX.Exif.TfgExif. A typical usage example looks like this:

    uses  
      FGX.Exif;
      
    var 
      Properties: TfgExifProperties;
      
      if TfgExif.TryLoad(AFileName, Properties) then
      begin
        // Properties.Rotation;
      end;

    Rotate gesture

    The supporting of Rotation gesture was added. You should do follow for usage new gesture recognizer:

    • Include Rotate: GestureKinds = GestureKinds + TGestureKind.Rotate
    • Add TfgControl.OnRotate event handler.

    Argument of TfgControl.OnRotate includes usefull values about rotation:

    /// <summary>Initial coordinates of first finger (<c>Phase = TfgGesturePhase.Begin</c>).</summary>
    /// <remarks>In Local coordinate system of control.</remarks>
    InitialPoint1: TPointF;
    /// <summary>Initial coordinates of second finger (<c>Phase = TfgGesturePhase.Begin</c>).</summary>
    /// <remarks>In Local coordinate system of control.</remarks>
    InitialPoint2: TPointF;
    /// <summary>Current coordinates of first finger.</summary>
    /// <remarks>In Local coordinate system of control.</remarks>
    Point1: TPointF;
    /// <summary>Current coordinates of second finger.</summary>
    /// <remarks>In Local coordinate system of control.</remarks>
    Point2: TPointF;
    /// <summary>Current delta angle related to initial in counterclockwise (in degrees).</summary>
    DeltaAngle: Single;
    /// <summary>Curren gesture phase.</summary>
    Phase: TfgGesturePhase;

    TfgPickerVideo

    Added video file picker. You can select one or more video files from the gallery (TfgPickerVideoFactory.PickVideoFromLibrary, TfgPickerVideoFactory.PickVideosFromLibrary), as well as record your own video using the system interface (TfgPickerVideoFactory.PickVideoFromCamera). 
    When recording a video, it is possible to specify the maximum video duration in seconds (TfgPickerVideo.DurationLimit). 

    Warning: This option is not guaranteed to work on Android, as directly depends on the camera vendor.

    TfgCalendar

    Added implementation for iOS.

    Improvements 🙌

    TfgDrawerLayout

    The new property SwipeEnabled was added. It's responsible for disabling sliding drawer by interactive way. Use it instead of Enabled.

    TfgCollectionView

    The new property ScrollEnabled was added. It's responsible for list scrolling by interactive way.

    SVG

    Improved support for SVG files:

    • Added recognition of gradient point parameters via style (Attribute Style).
    • Added predictive reading of gradients and styles after using them directly.
    • Added support for using ',' as a separator in the assignment of transformation matrices.

    Bug Fixes 🐛

    • Like 1
  5. Скачать:
    Релиз доступен только по запросу.

    Дата релиза:
    1 июня 2023


    Внимание 🚨

    1. Выполнен рефакторинг компонентов размещения рекламы, в результате чего теперь поддерживаются разные поставщики рекламы (Помимо Google AdMob). Если вы используете в своих проектах компоненты TfgBannerAd или TfgInterstitialAd, то вам необходимо выполнить следующие действия:

    • Разместить на форме, где вы используете TfgBannerAd или TfgInterstitialAd, новый компонент TfgGoogleAdMobProvider. Достаточно одного экземпляра на все.
    • Связать TfgBannerAd и TfgInterstitialAd с компонентом при помощи свойства Provider.

    Если не выполнить эти шаги, то в рантайме реклама не будет отображаться.

    2. Произошло переименование двух типов, используемых для TfgPickerPhoto:

    • fgPickerPhotoSource заменен на TfgPickerMediaSource
    • fgPhotoFiles заменен на TfgMediaFiles

    Пожалуйста, обновите декларации, если вы используете в своих проектах данные типы напрямую.

    Новое

    TfgRegionPicker

    Разработан новый компонент для осуществления интерактивного выбора области.

    Реклама TfgBannerAd и TfgInterstitialAd

    Выполнен рефакторинг компонентов размещения рекламы, в результате чего теперь поддерживаются разные поставщики рекламы (Google AdMob, Yandex Mobile Ads).

    Раньше рекламная площадка Google AdMob была интегрирована прямо в компоненты TfgBannerAd и TfgInterstitialAd. Сейчас же мы выделили поставщика рекламы в отдельные компоненты TfgGoogleAdMobProvider называемый провайдером рекламы. А компоненты TfgBannerAd и TfgInterstitialAd просто используют информацию от провайдера. Поэтому теперь для использования рекламы необходимо использовать провайдер требуемой рекламной площадки и связать его с компонентами TfgBannerAd и TfgInterstitialAd. Можно использовать один провайдер в приложении. У провайдера связь один ко многим.

    Реклама Yandex Mobile Ads

    Добавлена поддержка рекламы в формате "баннер" и "полностраничная реклама" от рекламной площадки Yandex Mobile Ads. Разработан новый провайдер TfgYandexMobileAdsProvider.
    На текущий момент компоненты рекламы реализованы только для Android.

    • Добавлен новый демо-пример: "Компоненты" -> "TfgBannerAd" -> "Пример отображения рекламного баннера (Yandex Mobile Ads)"

    Настройка для Android

    Для того, чтобы использовать Yandex Mobile Ads необходимо добавить зависимость "com.yandex.android:mobileads:5.7.0" в настройках библиотек "Project" -> "FGX Native Android Libraries".

    Обрезка, превью и другие хелперы для TfgBitmap

    Добавлен новый модуль FGX.Bitmap.Helpers, расширяющий возможности TfgBitmap и добавляющий дополнительные методы по трансформации и редактированию битмапа: вырезание области (Crop), создание превью (Thumbnail).

      TfgBitmapHelper = class helper for TfgBitmap
      public
        {$REGION 'Creating new bitmaps'}
        /// <summary>
        ///   Создает миниатюрное изображение, которое может использовать в виде превью. Изображение вписывается в
        ///   указанный размер с сохранение пропорций и центрируется.
        /// </summary>
        /// <remarks>Если передается нулевой размер, то метод поднимает исключение.</remarks>
        function CreateThumbnail(const ASize: TSize): TfgBitmap;
    
        /// <summary>
        ///   Создает новое изображение сформированное из указанной области. <c>ARegion</c> - физические координаты области.
        /// </summary>
        function CreateCropped(const ARegion: TRect): TfgBitmap;
    
        /// <summary>Создает новое изображение и применяет указанный оттенок.</summary>
        function CreateTinted(const ATintColor: TAlphaColor): TfgBitmap;
    
        /// <summary>Создает новое изображение и поворачивает его на указанный угол.</summary>
        function CreateRotated(const AAngle: TfgRotation): TfgBitmap;
        {$ENDREGION}
    
        {$REGION 'Transformation'}
        /// <summary>Выполняет вырезание указанной области изображения. <c>ARegion</c> - физические координаты области.</summary>
        /// <remarks>
        ///   <para>
        ///     Если координаты области <c>ARegion</c> выходят за пределы физического размера изоюбражения, то они отсекаются
        ///     по размеру изображения.
        ///   </para>
        ///   <para>
        ///     Если результирующая область имеет нулевой размер, то текущий битмап принимает нулевой размер.
        ///   </para>
        /// </remarks>
        procedure Crop(const ARegion: TRect);
    
        /// <summary>Симметричное отражение изображения по горизонтальной оси.</summary>
        procedure FlipHorizontal;
    
        /// <summary>Симметричное отражение изображения по вертикальной оси.</summary>
        procedure FlipVertical;
        {$ENDREGION}
      end;

    Чтобы воспользоваться новыми методами, необходимо подключить в секцию uses модуль FGX.Bitmap.Helpers и вызывать новые методы на экземпляре TfgBitmap.

    Exif

    Добавлен новый сервис для получения мета информации Exif. Чтобы запросить Exif информацию нужно воспользоваться классом FGX.Exif.TfgExif. Типовой пример использования выглядит так:

    uses  
      FGX.Exif;
      
    var 
      Properties: TfgExifProperties;
      
      if TfgExif.TryLoad(AFileName, Properties) then
      begin
        // Properties.Rotation;
      end;

    Жест поворота

    Добавлена поддержка нового жеста поворота. Для того, чтобы воспользоваться жестом нужно:

    • Включить его через свойство GestureKinds = GestureKinds + TGestureKind.Rotate
    • Написать обработчик TfgControl.OnRotate.

    В параметрах события TfgControl.OnRotate передается информация о текущем повороте:

      TfgRotateInfo = record
        /// <summary>Первоначальные координаты первого пальца (<c>Phase = TfgGesturePhase.Begin</c>).</summary>
        /// <remarks>Указывается в локальных координатах контрола.</remarks>
        InitialPoint1: TPointF;
        /// <summary>Первоначальные координаты второго пальца (<c>Phase = TfgGesturePhase.Begin</c>).</summary>
        /// <remarks>Указывается в локальных координатах контрола.</remarks>
        InitialPoint2: TPointF;
        /// <summary>Текущие координаты первого пальца.</summary>
        /// <remarks>Указывается в локальных координатах контрола.</remarks>
        Point1: TPointF;
        /// <summary>Текущие координаты второго пальца.</summary>
        /// <remarks>Указывается в локальных координатах контрола.</remarks>
        Point2: TPointF;
        /// <summary>Текущий угол поворота относительно начального (В градусах).</summary>
        DeltaAngle: Single;
        /// <summary>Текущая фаза жеста.</summary>
        Phase: TfgGesturePhase;
    
        function ToString: string;
      end;

    TfgPickerVideo

    Добавлен пикер видео файлов. Вы можете выбрать один или несколько видео файлов из галереи (TfgPickerVideoFactory.PickVideoFromLibrary, TfgPickerVideoFactory.PickVideosFromLibrary), а так же снять свое видео используя системный интерфейс (TfgPickerVideoFactory.PickVideoFromCamera). 

    При съемке видео есть возможность указать максимальную длину видео в секундах (TfgPickerVideo.DurationLimit).

    Внимание: На Android работа данной опции не гарантируется, т.к. напрямую зависит от поставщика камеры.

    TfgCalendar

    Добавлена реализация для iOS.

    Улучшения 🙌

    TfgDrawerLayout

    Добавлено новое свойство SwipeEnabled, которое отвечает за возможность выдвижения/задвигания панели интерактивным способом. Используйте это свойство вместо Enabled.

    TfgCollectionView

    Добавлено новое свойство ScrollEnabled, которое отвечает за возможность прокрутки списка интерактивным способом.

    SVG

    Улучшение поддержки SVG файлов:

    • Добавлено распознавание параметров точек градиента через стиль (Атрибут Style).
    • Добавлено предиктивное чтение градиентов и стилей после непосредственного использования таковых.
    • Добавлена поддержка использования ',', как разделителя в задании матриц трансформации.

    Исправление ошибок 🐛

    • Like 7
  6. Hello @Robson Rodrigues,

    Some 3-d party components spoils system Path variable value in IDE. It doesn't let to IDE loads all required dll and packages. So please, check it first:

    IDE Main Menu ->  Tools -> Options -> IDE -> Enviroument Variables

    Look at the PATH variable in "User System Overrides". Please send me this value here. If this variable has value it should contains "$(PATH);"

    • We have App Payments implementation in FGX Native: TfgInAppPurchase, TfgAndroidPay and TfgApplePay (not tested yet, but implemented).
    • We have implementation for AdMob (banner and Interstitial) for Android.
    • If you need working with AdMobStorage, you can use free FB4D components https://github.com/SchneiderInfosystems/FB4D/tree/master/Source It's compatible with FGX Native.
    16 minutes ago, Angel said:

    Another question, CollectionView is AutoSize (Height and Width)?

    This question requires more clarification on your part. If we are talking about automatic list size, then no.

  7. Hello @Angel,

    I'm not able to download any demo samples from JVESuite. However, I guess it's not compatible with FGX Native because:

    • The site points on components for FMX
      image.png
    • Component set includes several visual controls, label for example. But visual components always linked to some visual framework.

    What components are you interesting in from this set?

    Thank you,
    Yaroslav

  8. Download:
    The distributive is available by request only.

    Release date:
    25 April 2023


    Improvements 🙌

    SVG

    Now our SVG parser supports "style" attribute in SVG nodes. Also when you drop SVG file to Assets designer, it automatically takes logical size from SVG document.

    Bug Fixes 🐛

    • The regression of working Enabled property was fixed for Android. Because of it, clicking on the elements TfgCollectionView, the work TfgDrawerLayout and so on could not work.

     

  9. Скачать:
    Релиз доступен только по запросу.

    Дата релиза:
    25 апреля 2023


    Улучшения 🙌

    SVG

    Добавлено распознавание встраиваемого стиля в узлы SVG документа (Атрибут Style).

    Теперь при бросании SVG файла в дерево ресурсов дизайнера ассетов автоматически проставляется логический размер на основании размера, указанного в SVG файле.

    Исправление ошибок 🐛

    • Исправлена регрессия связанная с исправлением работы свойства Enabled под Android. Из-за нее могли не срабатывать нажатия на элементы TfgCollectionView, работа TfgDrawerLayout и т.д.
    • Like 4
  10. 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.

  11. 13 hours ago, dervish00 said:

    В чем проблема нашёл. Как решить - пока не знаю. Дело в том, что формы-фреймы встраиваются в лайаут, который лежит на Content дровера. При открытии некоторых форм я закрываю доступ к дроверу, делаю его Enabled = False и ToggleControl = nil, соответственно, как я понимаю, у всех дочерних элементов Enabled становится False. Я сразу же попробовал поставить для моего лайаута Enabled = True, но, как ни странно, не помогает.

    Нужен демо-проект. Вы мне показываете часть кода, который мне не много о чем-то говорит. 

    13 hours ago, dervish00 said:

    но это еще не все проблемы с новой версией: что-то перестали нормально тапаться элементы TCollectionView. Раз двадцать тапнешь, и вдруг, о чудо, она выделилась. И здесь точно не связано с Enabled, т.к. это для тех форм, у которых дровер не запрещаю.

    В этом релизе никаких изменений, связанных с CollectionView не было. Поэтому если вы считаете, что они появились и есть какие-то проблемы, то скидывайте проект, на котором это можно воспроизвести. Я посмотрю.

    P.S. Так решение будет продуктивнее. Если в вашем проекте ошибка, то вы ее таким образом найдете. Если Вы не можете найти решение, то опять же демо-проект поможет мне вам быстрее помочь и предложить решение. И если же действительно есть ошибка, то демо-проект даст возможность оперативно поправить ее и выпустить исправление.

  12. 25 minutes ago, dervish00 said:

    Судя по всему, с исправлением ошибки Enabled, по-крайней мере у меня, что-то пошло не так. Подробно пока не смотрел, но ни одно поле в работающем до обновления приложении, недоступно. Так, как будто Enabled = False.

    У кого-то из компонентов предков стоит Enabled = False ?

×
×
  • Create New...