FMXBridge.dll для Inno Setup

DLL FMXBridge.dll для Inno Setup 24.10

Нет прав для скачивания
FMXBridge — кнопки на миниатюре панели задач


Добавил новый компонент FThumbButtons.

Теперь можно добавлять собственные кнопки прямо в миниатюру окна на панели задач Windows и назначать им любые действия.

Поддерживаются: До 7 кнопок.

Свои иконки или глифы из шрифтов.

Подсказки для кнопок.
Управление видимостью и доступностью.
Обработка нажатий с передачей индекса кнопки в Inno Setup.
Всё настраивается из Pascal Script. Можно сделать управление плеером, переключение страниц или любые другие действия.

В демо показаны возможности компонента и работа с BASSPlayer.

Пример: Example_BASSPlayer.iss. Example_ThumbButtons.iss

Вложения

  • tb.jpg
    tb.jpg
    40.1 KB · Просмотры: 6
  • Сн9(2).png
    Сн9(2).png
    244.3 KB · Просмотры: 6
  • Like
Реакции: Salamandra
1. Массовое изменение сигнатур
Практически во ВСЕХ интерфейсах метод создания переделан:
Т.е. раньше FCreate возвращал Handle/..., теперь просто инициализирует объект, а Handle берётся через .Handle.

2. Удалённые типы-обёртки (заменены на TFmxObject)
Убраны алиасы (все были NativeInt):
IMenuItem, IMainMenu, ISearchBox, IListBoxGroupFooter, IListBoxGroupHeader, IListBoxHeader, IListBoxItem, ITreeViewItem, ICamera, IControl3D, ILight, IDummy, IColorMaterialSource, ITextureMaterialSource, ILightMaterialSource, TArrayOfHWND.

Остались только: TFmxObject, IImageList, ITabItem, IMaterialSource.

3. Что ДОБАВЛЕНО (новые интерфейсы и обёртки)
FAnimation - базовый интерфейс анимаций + InitAnimation (обёртка над TAnimation).

FSpinner - новый контрол + enum TSpinnerKind (Win11, Arcs, DoubleBounce, FlipPlane, Pulse, ArcsRing, Ring, ThreeDots, Wave, BallClipRotate…) + InitSpinnerHandle.

FMediaPlayer (переименован из FVideoPlayer) + InitMediaPlayer.

FForm: методы ChangeDarkMode, OnShow, OnActivate, OnDeactivate.

FMsgForm: методы Caption, StartWindowDrag.

FLockScreen: метод ShowDelay.

FSVGImage: SetFocus, CanFocus, LoadFromText (замена SVGText).

FMemo: события OnChange, OnChangeTracking.

FWinTitleBar: переименования - ChangeTheme>ChangeDarkMode, ExitBtnEnabled>CloseBtnEnabled, ExitBtnOnClick>CloseBtnOnClick, GetObjectExitBtn>GetObjectCloseBtn.

Enum TCanvasQuality: значения переименованы - cqSystemDefault>SystemDefault и т.д.

4. Что УДАЛЕНО
FMacTitleBar и InitMacTitleBarHandle - выпилены полностью.

FVideoPlayer - заменён на FMediaPlayer.

FWinTitleBar сильно урезан: удалены Cursor, SetClipParent/Children, BringToFront, SendToBack, Icon, IconVisible, Title, TitleVisible, TitleFontSetting, TitleTextSetting, MinBtnVisible, MinBtnEnabled, GetLeft, GetTop, GetWidth, GetObjectMinBtn, GetObject.

FLockScreen урезан: удалены AutoActivate, AutoActivateEnabled, BackPicture, BackStroke*, BackOpacity, BackText*, BackHandle.

FSVGImage: удалены MarginWrapMode, WrapMode, FixedColor, SaveToFile, BitmapZoom, GrayScale, DisableInterpolation, GetSVGText.

FForm / FMsgForm: удалён ChangeWindowTheme (заменён на ChangeDarkMode).

Dialogs: удалена BrowseLegacyDialog; в BrowseDialog / OpenDialog / SaveDialog убран параметр Owner: HWND.

5. Багфиксы
FTimer.Interval: было TAlphaColor > стало Cardinal. Это исправление очевидного бага (интервал в мс не может быть цветом).

Изменения затрагивают внешний API и сигнатуры интерфейсов, поэтому совместимость со старым кодом существенно нарушена: код, использующий изменённые методы, типы и GUID, потребуется адаптировать.
Оптимизирован PICSHOW: снижена фоновая нагрузка и улучшена работа с изображениями высокого разрешения.

WebP​

Добавил поддержку WebP, в том числе анимированных WebP.

Теперь для этого Skia не нужна - декодирование и отображение WebP сделаны отдельно в FMXBridge.

Почему отдельная обёртка: обычный TImage и так нормально работает с изображениями, а добавление туда анимации и связанных с ней настроек только запутало бы пользователя. Поэтому для анимированных WebP сделал отдельную обёртку FWebPImage которая умеет загружать WebP, проигрывать и ставить анимацию на паузу, останавливать её, переключать кадры вручную, получать количество кадров, их длительность и количество циклов, а также отслеживать смену кадра.

Плюс у него есть обычные свойства TImage: размер, положение, Align, Margins, Padding, Opacity, поворот, Visible, HitTest и т. д.

Важно: если в проекте включён Skia, FWebPImage использовать не получится. Для него нужен обычный FMX-режим без Skia.
  • Like
Реакции: Salamandra
теперь можно задавать свой курсор даже анимированный
пример

code_language.pascal:
Source: "Files\Cursor\Dark.ani"; Flags: dontcopy
FMXForm.SetCursor(ExtractAndLoad('Dark.ani'));
  • Like
Реакции: Salamandra
Добавлены два новых контрола:

FGlassRectangle - Liquid Glass
Поддерживает:
- размытие фона;
- преломление изображения;
- эффект объёма и оптической толщины;
- дисперсия;
- поддержка скруглённых углов;
- отдельная настройка GlassAmount и BlurAmount.
- стандартные свойства FMX-контрола.

FBlurRectangle - Blur
Отдельный контрол только для размытия содержимого под ним, без эффекта стекла.
Поддерживает:
- настройку силы размытия;
- скруглённые углы;
- стандартные свойства FMX-контрола.
blur.png

Glass.png

  • Like
Реакции: Salamandra и MarsBar
Разделение x86 / x64

В этом обновлении разделил сборки FMXBridge.dll для двух архитектур:
- FMXBridge_x86.dll - Win32
- FMXBridge_x64.dll - Win64

Теперь Inno Setup просто выбирает нужную сборку в зависимости от архитектуры:
Код:
[Setup]
SetupArchitecture=x64

[Files]
#if SetupSetting("SetupArchitecture") == "x64"
  Source: "Modules\sk4d_x64.dll";      DestName: "sk4d.dll";      Flags: dontcopy
  Source: "Modules\FMXBridge_x64.dll"; DestName: "FMXBridge.dll"; Flags: dontcopy
#else
  Source: "Modules\sk4d_x86.dll";      DestName: "sk4d.dll";      Flags: dontcopy
  Source: "Modules\FMXBridge_x86.dll"; DestName: "FMXBridge.dll"; Flags: dontcopy
#endif

В связи с разделением по архитектурам в этой версии пришлось отказаться от статической линковки BASS. Теперь BASS находится внутри FMXBridge.dll и при необходимости извлекается во временную папку.

Также обновлено:
BASS - 2.4.18.23
Skia4Delphi - 7.3.0 (Skia 151.0.0)
Обновление FBASS Player
В компонент FBASS Player добавлена встроенная визуализация спектра воспроизводимого аудио.

Возможности:
1 - Анализ выполняется на основе BASS_DATA_FFT4096.
2 - Используется логарифмическое распределение частот.
3 - Уровень сигнала преобразуется в децибелы с последующей нормализацией.
4 - Рабочий диапазон спектра ограничен приблизительно 50–18000 Гц.
5 - По умолчанию используется 16 полос.
6 - Отображение выполняется без искусственного сглаживания.
7 - Добавлена возможность настройки внешнего вида спектра:

code_language.pascal:
    procedure SetSpectrum(FParent: TFmxObject; FLeft, FTop, FHeight: Single);
    procedure BarColor(Value: TAlphaColor);
    procedure BarWidth(Value: Single);
    procedure BarSpacing(Value: Single);
    procedure BarRadius(Value: Single);

Спектроанализатор является частью FBASS Player
33.png
  • Like
Реакции: Salamandra

Полностью переработан компонент FWinTitleBar​

Интерфейс компонента был переработан и расширен:
code_language.pascal:
FWinTitleBar = interface(IUnknown)
  '{31E29020-AF92-4FDB-9067-B8C573804370}'
  function FCreate(FParent: TFmxObject; FDark: Boolean): TFmxObject;
  procedure Cursor(FCursor: TCursor);
  procedure Height(FHeight: Single);
  procedure Offset(PY: Single);
  procedure SetClipParent(FValue: Boolean);
  procedure SetClipChildren(FValue: Boolean);
  procedure BringToFront;
  procedure SendToBack;
  procedure SetColor(FColor: TAlphaColor);
  procedure SetGradient(FColor1, FColor2: TAlphaColor; FStyle: TGradientStyle);
  procedure SetGradientLinearAngle(FAngle: Single);
  procedure SetGradientRadialAngle(FAngle: Single);
  procedure SetGradientPosition(X1, Y1, X2, Y2: Single);
  procedure Icon(const FImage: WideString);
  procedure IconVisible(FVisible: Boolean);
  procedure Title(const FText: WideString);
  procedure TitleVisible(FVisible: Boolean);
  procedure TitleFontSetting(const FontName: WideString; FontSize: Single; FontColor: TAlphaColor);
  procedure TitleTextSetting(FWordWrap: Boolean; FHorzAlign, FVertAlign: TTextAlign);
  procedure MinBtnVisible(FVisible: Boolean);
  procedure ExitBtnEnabled(FEnabled: Boolean);
  procedure MinBtnEnabled(FEnabled: Boolean);
  procedure ChangeTheme(FDark: Boolean);
  function GetLeft: Single;
  function GetTop: Single;
  function GetHeight: Single;
  function GetWidth: Single;
  function GetObjectExitBtn: TFmxObject;
  function GetObjectMinBtn: TFmxObject;
  function GetObject: TFmxObject;
  procedure ExitBtnOnClick(Event: TNotifyEvent);
  procedure MinBtnOnClick(Event: TNotifyEvent);
  function Handle: TFmxObject;
end;

Упрощение компонента
Удалены возможности, не относящиеся к назначению титлбара:
1 - цвет Stroke;
2 - фоновое изображение;
3 - тень.
Эти параметры не соответствуют стандартному поведению заголовка окна и были исключены из компонента.

Автоматическое получение иконки и заголовка
Теперь титлбар автоматически использует:
1 - иконку, заданную для исполняемого файла Inno Setup;
2 - заголовок (Caption) исполняемого файла.
При необходимости их по-прежнему можно заменить вручную с помощью методов Icon() и Title().

Встроенная отрисовка системных кнопок
code_language.pascal:
procedure TFWinSysButton.SetCloseIcon;
var
  P: TPathData;
begin
  P := TPathData.Create;
  try
    P.MoveTo(PointF(0.7, 0));
    P.LineTo(PointF(5, 4.3));
    P.LineTo(PointF(9.3, 0));

    P.LineTo(PointF(10, 0.7));
    P.LineTo(PointF(5.7, 5));
    P.LineTo(PointF(10, 9.3));

    P.LineTo(PointF(9.3, 10));
    P.LineTo(PointF(5, 5.7));
    P.LineTo(PointF(0.7, 10));

    P.LineTo(PointF(0, 9.3));
    P.LineTo(PointF(4.3, 5));

    P.LineTo(PointF(0, 0.7));
    P.ClosePath;

    FIcon.Data.Assign(P);
  finally
    P.Free;
  end;
end;

procedure TFWinSysButton.SetMinimizeIcon;
var
  P: TPathData;
begin
  P := TPathData.Create;
  try
    P.MoveTo(PointF(0, 0));
    P.LineTo(PointF(10, 0));
    P.LineTo(PointF(10, 1));
    P.LineTo(PointF(0, 1));
    P.ClosePath;

    FIcon.Data.Assign(P);
    FIcon.Width := 10;
    FIcon.Height := 1;
  finally
    P.Free;
  end;
end;

По многочисленным просьбам пользователей кнопкам больше не требуется задавать StyleLookup.
Кнопки сворачивания и закрытия теперь полностью рисуются самим компонентом, что:
1 - упрощает использование;
2 - избавляет от зависимости от FMX-стилей;
3 - обеспечивает одинаковый внешний вид на всех проектах.

В связи с этим добавлена поддержка переключения темы оформления:
1 - светлая;
2 - тёмная.
Для этого используется метод:
code_language.pascal:
procedure ChangeTheme(FDark: Boolean);

Новые возможности формы
В интерфейс формы добавлены два новых метода:
code_language.pascal:
procedure CanvasQuality(FCanvasQuality: TCanvasQuality);
procedure Caption(const FText: WideString);

CanvasQuality
Полностью повторяет поведение свойства TForm.Quality из FMX и позволяет управлять качеством отрисовки содержимого формы.
Поддерживаются три режима:
SystemDefault - используются настройки платформы (обычно включает сглаживание).
HighPerformance - максимальная производительность и скорость отрисовки.
HighQuality - приоритет качеству изображения с использованием полного антиалиасинга.

Caption
Позволяет изменить заголовок окна программно. Метод является аналогом свойства TForm.Caption и также используется титлбаром при автоматическом отображении текста заголовка.
  • Like
Реакции: Salamandra
Основное изменение - наконец разобрались с правильной схемой владения окнами.

Раньше была неправильная модель: FMX-окно считалось отдельным top-level окном, а Inno Setup выступал просто как внешний хозяин. Из-за этого начали появляться побочные эффекты с окнами, отображением в системе.

Сейчас сделано как в обычном приложении:

окно FMX имеет правильный Owner через Application;
убрана лишняя независимость окна от приложения;
поведение окна стало ближе к обычному FMX-приложению.

После этого пришлось заново пройтись по внутреннему позиционированию и размеру клиентской области. Исправлена работа с client area - теперь содержимое окна правильно располагается относительно реального клиентского пространства, а не относительно внешнего размера окна.

Отдельно вынесена работа с окном:

скрытие стандартного заголовка;
работа с рамками;
изменение поведения окна Windows.

Эти вещи теперь делаются на уровне FMX.Platform.Win, где им и место, а не через внешние обходные решения.

Также расширен BASS-модуль:

воспроизведение отдельных файлов;
загрузка папок с музыкой;
смена папки во время работы;
playlist;
callback прогресса;
управление воспроизведением.

Исправлено поведение служебных окон сообщений:

окна больше не появляются в AeroPeek.
  • Like
Реакции: Salamandra
Назад
Сверху