FMXBridge.dll для Inno Setup

DLL FMXBridge.dll для Inno Setup 26.04

Нет прав для скачивания
Небольшой апдейт с добавлением новых функций и расширением существующих возможностей.

Добавлена функция определения Windows 11
code_language.pascal:
function IsWindows11: Boolean;
  external 'IsWindows11@files:FMXBridge.dll stdcall delayload';

code_language.pascal:
if IsWindows11 then
begin
  FMXForm.FCreateTabbedForm(WizardForm.Handle, IsWinDark, True);
end
else
begin
  if IsWinDark then
    FMXForm.FCreateBlurForm(WizardForm.Handle, ColorSetOpacity($FF000000, 0.7), True)
  else
    FMXForm.FCreateBlurForm(WizardForm.Handle, ColorSetOpacity($FFFFFFFF, 0.7), True);
end;

if IsWinDark then
  FMXForm.LoadStyleFromFile(ExtractAndLoad('dark.style'), GetWinAccentColor)
else
  FMXForm.LoadStyleFromFile(ExtractAndLoad('light.style'), GetWinAccentColor);

12.png

1b.png

Добавлен новый компонент FNumberBox
числовая обёртка с расширенными настройками:

Основные методы:
code_language.pascal:
procedure DecimalDigits(FDigits: Integer);
procedure HorzIncrement(FValue: Single);
procedure VertIncrement(FValue: Single);
procedure VerticalMode(FEnabled: Boolean);
procedure Max(FMax: Single);
procedure Min(FMin: Single);
procedure Value(FValue: Single);
procedure ValueType(FFloat: Boolean);

function GetHorzIncrement: Single;
function GetVertIncrement: Single;
function IsVerticalMode: Boolean;
function GetValue: Single;

Расширена обёртка FUserInfo
Обновлён интерфейс пользователя: (по запросу, требовалось локализация типа учётки)
code_language.pascal:
type
  FUserInfo = interface(IUnknown)
    '{FF655E8A-2C5A-4DF4-80EB-81CBAFD100C1}'
    function Name: WideString;
    function Domain: WideString;
    function ProfilePath: WideString;
    function UserType: TUserType;
    function IsElevated: Boolean;
  end;
Добавлена типизация учётных записей:
code_language.pascal:
TUserType = (utUnknown, utUser, utAdmin, utGuest, utSystem);
И функция преобразования:
code_language.pascal:
function UserTypeToStr(AType: TUserType): string;
begin
  case AType of
    utUser:   Result := 'User';
    utAdmin:  Result := 'Admin';
    utGuest:  Result := 'Guest';
    utSystem: Result := 'System';
  else
    Result := 'Unknown';
  end;
end;

Прочие изменения
Небольшие внутренние правки и стабилизация работы компонентов.
Добавлены новые возможности:
FComboBox
метод StyledSettings
метод FontSetting (настройка шрифта и цвета элементов ComboBox)

code_language.pascal:
 procedure StyledSettings(FStyledSettings: TStyledSettings);
 procedure FontSetting(const FontName: WideString; FontSize: Single; FontColor: TAlphaColor);

демонстрационный пример: Example_ComboBox.iss

Вложения

  • a1.png
    a1.png
    83.7 KB · Просмотры: 5
  • Like
Реакции: Giperson и Salamandra
Добавлен компонент: FUWPTiles

Основные возможности:

Создание и управление контейнером плиток
Полный контроль расположения и размеров
Добавление и настройка Tile-элементов
Управление стилями, текстом и изображениями
Поддержка событий клика и взаимодействия
Работа напрямую через NativeInt handle

Позиция и размер:
FCreate(FParent: NativeInt): NativeInt
Left
Top
Width
Height
SetBounds(FLeft, FTop, FWidth, FHeight: Single)
Position(X, Y: Single)
Align(Al: TAlignLayout)
Margins(FLeft, FTop, FRight, FBottom: Single)
Padding(FLeft, FTop, FRight, FBottom: Single)

Управление слоем:
BringToFront
SendToBack
Offset(X, Y: Single)
Opacity(FOpacity: Single)
RotationAngle(FValue: Single)
RotationCenter(X, Y: Single)

Работа с Tile:
AddTile(const FImage, FTitle, FText: WideString; FWidth, FHeight: Single; Rounded: Boolean): NativeInt
TileGetObject(FTile: NativeInt): NativeInt
TileHandle(FTile: NativeInt): NativeInt
TileEnabled(FTile: NativeInt; FEnable: Boolean)
TileVisible(FTile: NativeInt; FVisible: Boolean)
TileOnClick(FTile: NativeInt; Event: TNotifyEvent)

Внешний вид Tile:
TileFillColor(FTile: NativeInt; FColor: TAlphaColor)
TileFillPicture(FTile: NativeInt; const FImage: WideString; WrapMode: TWrapMode)
TileBorderColor(FTile: NativeInt; FColor: TAlphaColor)
TileBorderThickness(FTile: NativeInt; FThickness: Single)
TileCornerStyle(FTile: NativeInt; XRadi, YRadi: Single; FCorners: TCorners; CornerType: TCornerType)

Текст и шрифты:
TileTitleFontSetting(FTile: NativeInt; const FontName: WideString; FontSize: Single; FontColor: TAlphaColor)
TileTextFontSetting(FTile: NativeInt; const FontName: WideString; FontSize: Single; FontColor: TAlphaColor)

Обновление и рендер:
BeginUpdate
EndUpdate
RecalcSize
Repaint

Состояние компонента:
Enabled(FEnabled: Boolean)
Visible(FVisible: Boolean)
HitTest(FEnabled: Boolean)
IsVisible: Boolean

Получение данных:
GetLeft: Single
GetTop: Single
GetWidth: Single
GetHeight: Single
GetObject: NativeInt
Handle: NativeInt


Оригинал
OSInfo: исправление нестабильности и некорректных значений.

Внесены изменения в реализацию получения информации о системе:
  • Данные (Caption / Version / Build) теперь инициализируются один раз в конструкторе объекта, вместо чтения при каждом вызове метода.
  • Устранена проблема, при которой значения могли “перемешиваться” при использовании интерфейса (зависимость от порядка методов / vtable).
  • Получение GetWinBuildNumber (build-номера) переведено на RtlGetVersion - теперь используется фактическая версия ядра, а не данные из реестра.
Добавлен компонент: FRatingBar

Основные возможности:

Отображение рейтинга (звезды).
Поддержка дробных значений.
Настройка количества звезд.
Управление максимальным значением.
Кастомизация внешнего вида (цвет, обводка, отступы).
Полный контроль через код (позиция, размеры, события).

Позиция и размер:
Left, Top, Width, Height
SetBounds
Position
Align
Margins / Padding

Внешний вид:
Color // цвет звезд
BackgroundColor // фон
StrokeColor // обводка
StrokeSetting // толщина и стиль линий
Opacity
RotationAngle

Настройки рейтинга:
NumberOfStars(FNumber: Integer) // количество звезд
MaximumRating(FMax: Single) // максимум (например 5.0)
Value(FValue: Single) // текущее значение
Space(FSpace: Single) // расстояние между звездами

События:
OnClick
OnMouseDown
OnMouseUp
OnMouseEnter
OnMouseLeave

Прочее:
Enabled
Visible
HitTest
BringToFront / SendToBack
SetTag / GetTag
Handle


Оригинал
Пример в инсталяторе
Обновление аудиоподсистемы

1. Было:
Для фоновой музыки использовался FMX TMediaPlayer.
Для его работы система запускала дополнительные службы MIDI.
Это замедляло старт DLL и появление сплеш-формы.

2. Стало:
TMediaPlayer заменён на BASS.

3. Особенности:
Мы не подключаем отдельную DLL (bass.dll), как обычно делают.
Вместо этого используется объектный файл bass-omf-d.obj, встроенный прямо в DLL:
code_language.pascal:
{$L bass-omf-d.obj}
Это значит, что весь необходимый код для воспроизведения фоновой музыки компилируется внутрь нашей DLL.

4. Плюсы такого подхода:
Быстрый старт:
нет лишних инициализаций системных служб.
Минимальные зависимости: не нужно с собой таскать bass.dll.

Итог: фоновые аудиофайлы теперь проигрываются быстрее и надёжнее.

Примеры подключения музыки
  • Like
Реакции: Giperson
1. Добавлены настройки для загрузки (HTTP-клиент). По запросам добавлены все доступные параметры, которые удалось реализовать.
code_language.pascal:
  THTTPCompressionMethod   = (Deflate, GZip, Brotli, Any);
  THTTPCompressionMethods  = set of THTTPCompressionMethod;
  THTTPProtocolVersion     = (UNKNOWN_HTTP, HTTP_1_0, HTTP_1_1, HTTP_2_0, HTTP_3_0);
  THTTPRedirectWithGET     = (Post301, Post302, Post303, Post307, Post308, Put301, Put302, Put303, Put307, Put308,
                               Delete301, Delete302, Delete303, Delete307, Delete308);
  THTTPRedirectsWithGET    = set of THTTPRedirectWithGET;
  THTTPSecureProtocol      = (SSL2, SSL3, TLS1, TLS11, TLS12, TLS13);
  THTTPSecureProtocols     = set of THTTPSecureProtocol;

type
  FNetHTTPClient = interface(IUnknown)
    '{B60A2468-0FF3-40B3-8812-4DCFAFD94FE4}'
    function DownloadStart(const FUrl, FOutfile: WideString; FCallback: TDownloadCallback): Int64;
    procedure Accept(FAccept: WideString);
    procedure AcceptCharSet(FCharSet: WideString);
    procedure AcceptEncoding(FEncoding: WideString);
    procedure AllowCookies(FValue: Boolean);
    procedure Asynchronous(FValue: Boolean);
    procedure AutomaticDecompression(FAutomaticDecompression: THTTPCompressionMethods);
    procedure ConnectionTimeout(FValue: Integer);
    procedure ContentType(FContentType: WideString);
    procedure HandleRedirects(FValue: Boolean);
    procedure MaxRedirects(FValue: Integer);
    procedure PreemptiveAuthentication(FValue: Boolean);
    procedure ProtocolVersion(FProtocolVersion: THTTPProtocolVersion);
    procedure RedirectsWithGET(FRedirectsWithGET: THTTPRedirectsWithGET);
    procedure ResponseTimeout(FValue: Integer);
    procedure SecureProtocols(FSecureProtocols: THTTPSecureProtocols);
    procedure SendTimeout(FValue: Integer);
    procedure SynchronizeEvents(FValue: Boolean);
    procedure UseDefaultCredentials(FValue: Boolean);
    procedure UserAgent(FUserAgent: WideString);
    procedure DownloadStop;
  end;

2. Изменения в ScrollBox. Удален FScrollBox. Оставлены только FVertScrollBox и FHorzScrollBox. В них добавлены параметры управления поведением:
code_language.pascal:
procedure Bounces(FValue: Boolean);
procedure TouchTracking(FValue: Boolean);

3. Разделение медиаплеера. TMediaPlayer разделен на два отдельных интерфейса: FAudioPlayer - только для аудио. FVideoPlayer - только для видео. Разделение сделано для упрощения логики и устранения лишнего функционала в каждом из случаев.
code_language.pascal:
type
  FAudioPlayer = interface(IUnknown)
    '{A7E91E1A-3C77-4C1B-9E4E-1A3F0A4D9E21}'
    function FCreate(FParent: NativeInt; const FAudioFile: WideString; Loop: Boolean): NativeInt;
    procedure AudioFile(const FAudioFile: WideString);
    procedure Play;
    procedure Pause;
    procedure Stop;
    procedure Resume;
    procedure Volume(FValue: Single);
    procedure Loop(FValue: Boolean);
    function IsPlaying: Boolean;
    function IsStopped: Boolean;
    function IsPaused: Boolean;
    function GetVolume: Single;
  end;

// >>>>>> FVideoPlayer <<<<<< \\
type
  FVideoPlayer = interface(IUnknown)
    '{94F5C2EF-067D-49A4-9924-68DBDEB007A1}'
    function FCreate(FParent: NativeInt; const FVideoFile: WideString; Loop: Boolean): NativeInt;
    procedure Left(FLeft: Single);
    procedure Top(FTop: Single);
    procedure Height(FHeight: Single);
    procedure Width(FWidth: Single);
    procedure SetBounds(FLeft, FTop, FWidth, FHeight: Single);
    procedure Position(X, Y: Single);
    procedure Align(Al: TAlignLayout);
    procedure Margins(FLeft, FTop, FRight, FBottom: Single);
    procedure Padding(FLeft, FTop, FRight, FBottom: Single);
    procedure BringToFront;
    procedure SendToBack;
    procedure VideoFile(const FVideoFile: WideString);
    procedure Play;
    procedure Pause;
    procedure Stop;
    procedure Resume;
    procedure Volume(FValue: Single);
    procedure Loop(FValue: Boolean);
    function IsPlaying: Boolean;
    function IsStopped: Boolean;
    function IsPaused: Boolean;
    function GetVolume: Single;
    function GetLeft: Single;
    function GetTop: Single;
    function GetWidth: Single;
    function GetHeight: Single;
  end;

3. Исправлена задержка появления SplashForm на "холодном" запуске (непрогретая система).
1. Добавил TDropTarget, (Функция по запросу, просили давно, пол года назад наверное. Но будьте готовы к тому что перетаскивание файлов работает только с пониженными правами, а при распаковке архивов FreeArc с пониженными правами будет что то по типу - Can't create read mapping!)
Настройка проста -
2.png

2. Исправил - улучшил очищение папки {tmp} при выгрузке dll. (Обратная связь - иногда в папке {tmp} остается Sk4d.dll)
3. Добавлены примеры
В DLL добавлена поддержка Skia - современной 2D графической библиотеки. Она используется для качественного рендеринга текста, изображений и анимаций. Теперь часть возможностей Skia можно использовать прямо из Inno Setup через FMX-форму.

Добавлен компонент SkLabel. Это текстовый элемент, который позволяет выводить текст с разными стилями внутри одной строки. Можно менять шрифт, размер, цвет, толщину, наклон, добавлять подчеркивание и другие эффекты для отдельных слов. Поддерживаются emoji и пользовательские шрифты. На отдельные слова можно назначать события, например обработчик клика.

Добавлена функция установки пользовательских шрифтов через InstallSkiaFonts, поэтому можно использовать шрифты, которые не установлены в системе.

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

Также добавлен компонент SkSvg для отображения SVG-графики. Поддерживается масштабирование, разные режимы размещения, перекрашивание SVG и режим grayscale.

Обновлены существующие примеры и добавлены новые примеры использования Skia-компонентов.
code_language.pascal:
function sk4d_codec_make_from_file(const file_name: PAnsiChar): THandle;
  external 'sk4d_codec_make_from_file@files:sk4d.dll cdecl';

function InitSkLabelFontStyle: FSkLabelFontStyle;
  external 'InitSkLabelFontStyle@files:FMXBridge.dll stdcall delayload';

function InitSkLabel: FSkLabel;
  external 'InitSkLabel@files:FMXBridge.dll stdcall delayload';

function InitSkAnimatedPaintBox: FSkAnimatedPaintBox;
  external 'InitSkAnimatedPaintBox@files:FMXBridge.dll stdcall delayload';

function InitSkAnimatedImage: FSkAnimatedImage;
  external 'InitSkAnimatedImage@files:FMXBridge.dll stdcall delayload';

function InitSkSvg: FSkSvg;
  external 'InitSkSvg@files:FMXBridge.dll stdcall delayload';

procedure InstallSkiaFonts(FontFile: WideString);
  external 'InstallSkiaFonts@files:FMXBridge.dll stdcall delayload';


1.png

2.png

3.png

4.png

5.png
1. Копирование, перемещение файлов (функция по запросу)
При отмене или удалении вернуть всё в зад одной строкой. По маске.
code_language.pascal:
function CopyFiles(const SourceDir, DestDir, Masks: WideString; Overwrite: Boolean): Integer;
  external 'CopyFiles@files:FMXBridge.dll stdcall delayload';

function MoveFiles(const SourceDir, DestDir, Masks: WideString; Overwrite: Boolean): Integer;
  external 'MoveFiles@files:FMXBridge.dll stdcall delayload';

2. Добавлено FCreateSplashForm (изображение, звук, длительность), Border/BorderSetting, Show и Handle.
code_language.pascal:
type
  FSplashForm = interface(IUnknown)
    '{DC82CE70-46BF-44F7-8137-2C1D6D45444F}'
    function FCreateSplashForm(const FImageFile, FSoundFile: WideString; FDuration: Single): HWND;
    procedure Border(FValue: Boolean);
    procedure BorderSetting(FRound: Boolean; FColor: TAlphaColor);
    procedure Show;
    function Handle: NativeInt;
  end;

3. Добавлено FMarquee (бугущая строка): методы создания и управления бегущей строкой (позиция, размеры, выравнивание, отступы, подсказка, текст, шрифт, цвет, скорость, направление, видимость, прозрачность, вращение, включение/выключение, порядок на форме, тег, события мыши), а также метод Handle.

Все примеры прилагаются.

  • Like
Реакции: Giperson
Назад
Сверху