August 13, 2025Aug 13 Administrators Скачать:setup_1.18.14.0_release.rus.zipДата релиза:13 августа 2025Новое ✨TfgCanvasCохранение состоянияПереработан подход к управлению состоянием канвы, а именно методы SaveState / RestoreState. Раньше при сохранении состояния вы получали объект состояния, который в дальнейшем надо было использовать для восстановления в методе RestoreState. Такой подход оказался избыточным, так как команды отрисовки выполняются последовательно и управление состоянием идет тоже последовательно (восстановление до предыдущего состояния). Теперь при сохранении состояния оно автоматически сохраняется во внутреннем стеке состояний канвы. Добавлен новый парный метод RestoreState(), который извлекает последнее состояние из стека и восстанавливает его.Теперь шаблон работы с состоянием канвы выглядит так:ACanvas.SaveState; try // Выполняем отрисовку finally ACanvas.RestoreState; end;Внимание: Теперь нельзя восстанавливать любое состояние, только последнее. Это связано также с принципом работы нативной канвы в Android / iOS, которые не предусматривают такой возможности.Обрезание по путиДобавлена поддержка обрезания области отображения по указанному пути. Новый метод TfgCanvas.ClipPath позволяет добавить к текущей области отсечения новую.Например, отрисовка красного круга обрезанного центральным кругом, вписанным в область TfgPaintBox:procedure TFormMain.fgPaintBoxPaint(Sender: TObject; const ACanvas: TfgCanvas); var CirclePath: TfgPath; begin ACanvas.SaveState; CirclePath := TfgPath.Create(nil); try CirclePath.AddArc(fgPaintBox.LocalBounds, 0, 360) .ClosePath; ACanvas.ClipPath(CirclePath); ACanvas.Fill.Kind := TfgBrushKind.Solid; ACanvas.Fill.Color := TAlphaColorRec.Red; ACanvas.FillCircle(TPointF.Create(0, fgPaintBox.Height / 2), fgPaintBox.Height / 2); finally CirclePath.Free; end; ACanvas.RestoreState;Восстановление области отсечения осуществляется только при помощи восстановления состояния канвы SaveState / RestoreState.Внимание: Данный функционал не поддерживается в дизайнере.Заполнение путейДобавлена возможность управлять способом заполнения путей Canvas.FillPathRule.Детали.Внимание: Данный функционал не поддерживается в дизайнере.Пользовательский штрих StrokeДобавлена возможность использовать пользовательский шаблон штриха в кисти TfgBrushStroke. Задание пользовательского штриха осуществляется при помощи метода:procedure SetCustomDash(const ADash: TDashArray; const AOffset: Single); TfgSvgPathДобавлено новое свойство FillRule (NonZero, EvenOdd).Детали.Дизайнер формыДобавлен новый редактор градиентной кисти.Детали.Провайдер тайлов от Яндекс картДля TfgMap добавлен новый провайдер тайлов от Яндекс карт TfgYandexMapTileProvider. Провайдер тайлов поддерживает кастомизацию внешнего вида в рамках API.Для использования необходимо получить бесплатный API ключ. Подробности по ссылке.Новый сервис IFGXApplicationMetaDataServiceДобавлен новый сервис для получения метаданных приложения. Чтобы прочитать значение переменной с именем `test_value` вы можете использовать код var value: string; value := Application.MetaData.Values['test_value'];Для iOS метаданные хранятся в файле info.plist, для Android в манифесте AndroidManifest.xml в тегах meta-data.Перетаскивание контролов (Drag & Drop)Для всех контролов (за исключением некоторых композитных контролов типа TfgDrawerLayout, TfgBottomSheetLayout и т.д.) добавлена возможность перетаскивания на другие контролы по Long Tap. За возможность перетаскивания отвечает свойство DragEnabled. Чтобы узнать, находится ли в настоящее время контрол в состоянии перетаскивания, обратитесь к свойству `IsDragged`. Так же в процессе перетаскивания у контрола возникают события OnDragStarted (в начале) и OnDragFinished (в конце перетаскивания).Для возможности приёма перетаскиваемых контролов добавлено свойство AcceptDropMode. По умолчанию приём перетаскивавых контролов запрещён (TfgAcceptDropMode.Restricted). Однако, вы можете разрешить приём всех контролов (TfgAcceptDropMode.AcceptAll), либо же в рантайм контролировать приём с помощью события OnCanAcceptDrop (режим TfgAcceptDropMode.AcceptByEvent). Основное событие OnDragDrop оповещает о бросании перетаскиваемого контрола на контрол приёмник.OnDragEntered - перетаскиваемый контрол оказался над принимающим контролом, OnDragExited перетаскиваемый контрол покинул пределы принимающего контрола. Событие OnDragOver возникает при перемещении перетаскиваего контрола над принимающим контролом.Типичный пример обработки бросания компонента:procedure TFrameDrop.fgFrameDragDrop(Sender: TObject; const AData: TfgDragObject; const APoint: TPointF); var LTarget: TfgControl; LDragged: TfgControl; begin LTarget := Sender as TfgControl; LDragged := AData.Control as TfgControl; LDragged.Position.SetPointF(APoint - AData.DragPoint); LTarget.InsertControl(LDragged); end;Добавлен новый демонстрационный проект "Перетаскивание" -> "Базовый пример".Улучшения 🙌SVGДобавлена поддержка следующих атрибутов: stroke-dasharray, stroke-dashoffset, stroke-linecap, stroke-linejoin, fill-rule.Связанный вопрос.TfgMapДобавлен новый метод TfgMap.FindVisibleMarkersRegion для определения видимого региона на карте, охватывающего все видимые маркеры на карте. Один из вариантов использования отображения видимого региона всех маркеров:var VisibleMarkerRegion: TfgMapRect; if fgMap1.FindVisibleMarkersRegion(VisibleMarkerRegion) then fgMap1.MoveCameraToVisibleRegion(VisibleMarkerRegion, 20);Добавлен дополнительный параметр Animate в метод MoveCameraToVisibleRegion, позволяющий управлять применением анимации при перемещении камеры.TfgControlДобавлен новый метод TfgControl.LocalTo, предназначенный для конвертации точки в локальной системе координат контрола в систему координат указанного контрола ATo.Android ApiОбновлен заголовочный файл Android.Api.ActivityAndView для типа android.app.ActivityManager. Теперь можно узнать запущенные процессы и потребляемую ими память. РазноеТеперь все окна библиотеки используют темизированный заголовок, как остальные окна IDE.Исправление ошибок 🐛FGX-449 Событие TfgMap.OnTap не работает.FGX-450 Под IOS невозможно убрать все окна маркеров на карте (iOS).Исправлена работа Bluetooth BLE для Delphi 12.2 и ниже.Приложение могло падать при использовании двух экземпляров TfgWebBrowser с инициацией процесса выбора файла на странице.Приложение могло падать при использовании TfgMap в ландшафтной ориентации при изменении зума (iOS). FGX-457 Под IOS не работает TfgMap.CameraZoom (iOS).FGX-458 Примеры с картой не рассчитаны под iOS (iOS).FGX-461 AccessViolation при использовании TfgAppleIdButton (iOS).FGX-462 Баг с отображением TfgArch.Для Android могли не сохраняться параметры на странице "Основные настройки" в настройках проекта.
August 13, 2025Aug 13 Поставил новую версию. В приложении пропали все прямоугольники (TfgRectangle). А их много!Они не пропали, но не отображаются как раньше
August 13, 2025Aug 13 Author Administrators 4 hours ago, Mineev said:Они не пропали, но не отображаются как раньшеЕсть более подробная информация, о чем речь идет?3 hours ago, Mineev said:Проблемы с цветами в разных местах.Аналогично, в каких местах и что за цвета?
August 13, 2025Aug 13 Создал пустой проект. Кинул прямоугольник. Если цвет задан через ColorName, рамка не отображается. Если задать Color, то рамка начинает отображаться цветом ColorName
August 13, 2025Aug 13 Author Administrators Just now, Mineev said:Создал пустой проект. Кинул прямоугольник. Если цвет задан через ColorName, рамка не отображается. Если задать Color, то рамка начинает отображаться цветом ColorNameСпасибо, это воспроизвел. Сейчас поправлю и сделаю хотфикс. Что-то еще?Рамка не отображается, если указан Color = Null.
August 13, 2025Aug 13 Еще куча проблем с цветами под iOS. Сейчас буду разбираться что и где не так. Там и цвета текста и цвета фона испортились. Может это одна и та же проблема? Edited August 13, 2025Aug 13 by Mineev
August 13, 2025Aug 13 Author Administrators 4 minutes ago, Mineev said:Еще куча проблем с цветами под iOS. Сейчас буду разбираться что и где не так. Там и цвета текста и цвета фона испортились. Может это одна и та же проблема?Скорее всего. Вот исправленный файл FGX.Canvas.Types.pasЕго нужно добавить в проект и пересобрать.
August 13, 2025Aug 13 Проблема с прямоугольниками и цветами под iOS ушла. В дизайнере бы еще хотелось нормально увидеть.
August 13, 2025Aug 13 Author Administrators Just now, Mineev said:Проблема с прямоугольниками и цветами под iOS ушла. В дизайнере бы еще хотелось нормально увидеть.Поставил релиз на сборку, как соберется, выложу.
August 13, 2025Aug 13 Еще под iOS вылезла такая вот ошибка карты (TfgMap)Это явно не моё. Под android данный код работает. Возможно это связано с FGX-457?!
August 13, 2025Aug 13 Author Administrators Нужно больше информации:Шаги для воспроизведения.В идеале приложить проект.
August 13, 2025Aug 13 Author Administrators Тогда попробовать поймать исключение в отладчике или локализовать место. Без этого, исправления не будет. Потому что на ваших проектах в баг трекер я падение не ловил. Ошибка у вас возникает в момент создания формы. Видимо, что-то вы там делаете при создании формы, что приводит к падению. Если вы считаете, что это связано с картой. То как минимум можно локализовать форму и найти строчку, которая приводит к этому падению.
August 13, 2025Aug 13 Author Administrators 30 minutes ago, Mineev said:Ошибка возникает в событии OnMapReady1 hour ago, Yaroslav Brovin said:То как минимум можно локализовать форму и найти строчку, которая приводит к этому падению.
August 13, 2025Aug 13 Author Administrators 4 hours ago, Yaroslav Brovin said:Поставил релиз на сборку, как соберется, выложу.