FMXBridge.dll для Inno Setup

DLL FMXBridge.dll для Inno Setup 17.07

Нет прав для скачивания
Небольшое обновление

Добавлен новый компонент FPicShow - слайдшоу с поддержкой анимированных переходов между изображениями.

Основные возможности:
Настройка времени показа каждого слайда.
Настройка длительности анимации перехода.
Поддержка выбора конкретного эффекта перехода.
Режим случайного выбора эффектов.
Настраиваемая рамка (цвет и толщина).
Реализован на базе FireMonkey Canvas.

Управление:
AddImage
Clear
Start
Stop
SetEffect
SetRandom
SetDuration
SetDelay
SetBorder


Эффекты:
Доступны различные эффекты переходов:
Fade
Build up from...
Quarters...
Bars in...
Uneven shred from...
Criss Cross reveal from...
Starburst...
Speckle appear...
Diagonal sweep
Reveal from...
Random squares...
Blind...
Dissolve


Список эффектов можно получить программно, что позволяет заполнить FComboBox или FComboEdit без ручного перечисления.

Вместо таймера используется
code_language.pascal:
property AnimationValue: Single read FAnimationValue write FAnimationValue;
что позволило добиться плавных переходов.

Пример - Example_PicShow.iss

Все идеи эффектов были бессовестно взяты отсюда Delphi Area/PicShow
Небольшое обновление:

Добавлен компонент FPageControl.
Новая реализация страниц по принципу TabControl:

FPageControl - контейнер страниц.
FPageItem - отдельная страница.

Добавлена поддержка переключения страниц с анимацией:
pdNone - мгновенное переключение.
pdHorizontal - горизонтальная смена страниц.
pdVertical - вертикальная смена страниц.
pdFade - плавное изменение прозрачности.

Добавлены направления перехода:
pmNormal
pmReverse


Новые методы:
ActivePage(Index, Move)
NextPage(Move)
BackPage(Move)
FirstPage(Move)
LastPage(Move)


Добавлены настройки анимации:
Duration
Interpolation


Поддерживаемые типы интерполяции:
Все

Добавлено событие OnChange для отслеживания смены активной страницы.

code_language.pascal:
PageControl.FCreate(FormLayer.Handle);
PageControl.SetBounds(20, 75, 760, 310);
PageControl.Direction(pdHorizontal);
PageControl.Duration(0.8);
PageControl.Interpolation(itBack);
PageControl.OnChange(@PageChange);

Page1.FCreate(PageControl.Handle);
Page2.FCreate(PageControl.Handle);

PageControl.NextPage(pmNormal);

Функции по запросу:

Добавлен универсальный callback обработки Drag & Drop.
В текущей версии поддерживается компонентами FDropTarget и FListBox.

FDropTarget - загрузка например StyleBook простым перетаскиванием файла:
DropTarget.Filter('Styles (*.fsf;*.style)|*.fsf;*.style');
SetFileDropCallback(@FileDropped);

FListBox
- приём списка файлов с последующей обработкой каждого файла:
DropListBox.FileDropEnabled(True);
SetFileDropCallback(@FileDropped);
  • Like
Реакции: Giperson
Исправлено:

OnMouseDown (и аналогичные события) у кастомных контролов теперь передают корректный Sender. Ранее вместо объекта контрола передавался Self, из-за чего обработчики с case Sender of ... могли работать некорректно.
(Self > Sender)
Примеры в архиве:
Example_Botva2-Like.iss
Example_ShapeControls.iss
Добавлены новые интерфейсы:

FShapeArc - круговой прогресс-бар с поддержкой stroke, font, value, opacity, rotation, events и базовых layout-параметров.
FShapeSwitch - переключатель (on/off) с настройкой цветов, толщины, слайдера, состояния и событий OnChange.
FShapeButton - кнопка с текстом, стилем, скруглением, цветами, шрифтом и обработкой мыши/клика.
FShapeGradientButton - кнопка с градиентной заливкой, кастомной позицией градиента и расширенными визуальными настройками.
FShapeProgressBar - прогресс-бар с поддержкой градиентов, анимации, stroke, corner, value/min/max и событий.

расширены возможности кастомных Shape-контролов для тех кому нужно быстро и без участия -подключения стилями минимально офорить UI.
все как обычно - добавлена единая событийная модель (click/mouse/enter/leave)
есть визуальные параметры (opacity, rotation, hit-test, clipping, layout)

не требует создания собственных стилей через StyleBook;

shape.png



Добавлены новые компоненты к предыдущим обновлениям (FImageButton, FImageCheckbox):

FImageRadioButton - радиокнопка на основе спрайта с поддержкой группировки, кастомного текста, шрифтов, состояний hover/down и обработкой мыши. Реализована логика взаимоисключающих групп (GroupName) и событие изменения состояния.
FImageProgressBar - прогресс-бар на текстурах (back/fill) с поддержкой min/max/value и отрисовкой заполнения через спрайты.

унифицированы почти все базовые свойства управления (layout, input, events)
botva.png
  • Like
Реакции: MarsBar
Добавлены новые компоненты:

FImageButton, FImageCheckbox. По сути это графическая кнопка со спрайтом состояний, рассчитанная на сценарии, где внешний вид кнопки полностью задаётся изображением.

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

- Обычное состояние
- Наведение мыши
- Нажатие
- Enabled = False

Изображения располагаются вертикально друг под другом.
Например, если кнопка должна отображаться размером: 120 x 25
то компонент автоматически ожидает спрайт: 120 x 100 и самостоятельно разделяет его на 4-8 кадра без дополнительных настроек и расчётов со стороны Inno Setup.

Основные возможности:
code_language.pascal:
function FCreate(FParent: NativeInt): NativeInt;
procedure SetImage(const FImage: WideString);
procedure Text(const AText: WideString);
procedure FontSetting(const FontName: WideString; FontSize: Single; FontColor: Cardinal);
procedure TextColor(FontColor: Cardinal);
procedure OnClick(Event: TNotifyEvent);
procedure OnChange(Event: TNotifyEvent);
procedure OnMouseEnter(Event: TNotifyEvent);
procedure OnMouseLeave(Event: TNotifyEvent);

Особенности:

автоматическое масштабирование изображения под размер кнопки;
поддержка текста поверх изображения;
настройка шрифта и цвета текста;
корректная обработка состояний Hover / Pressed / Disabled;
поддержка стандартного OnClick;
поддержка OnChange;
не требует style-файлов FMX;
не требует создания собственных стилей через StyleBook;
вся логика рендеринга находится внутри DLL.

Компонент создавался как более простой вариант для задач, где раньше обычно использовали botva.dll: подготовили изображение со всеми состояниями, загрузили его в кнопку и получили готовый элемент.

Добавлена новая функция:

code_language.pascal:
function ExtractIconFromResource(
  const ModuleFile, OutFile: WideString;
  ResourceIndex: Integer;
  IconSize: Integer
): Boolean;
Позволяет извлекать иконки напрямую из ресурсов Windows и сторонних DLL/EXE с сохранением в PNG.

Поддерживаемые размеры зависят от конкретного ресурса и обычно включают:
16x16
32x32
48x48
64x64
128x128
256x256

Пример получения нескольких системных иконок из imageres.dll.mun:
code_language.pascal:
Module := 'C:\Windows\SystemResources\imageres.dll.mun';

ImageIdx[1] := 31;
ImageIdx[2] := 27;
ImageIdx[3] := 103;
ImageIdx[4] := 105;
ImageIdx[5] := 175;
ImageIdx[6] := 107;

for i := 1 to 6 do
begin
  ImageFile[i] := ExpandConstant('{tmp}\') + IntToStr(i) + '.png';

  if ExtractIconFromResource(Module, ImageFile[i], ImageIdx[i], 64) then
    Image[i].LoadPicture(ImageFile[i], iwOriginal);
end;

Вложения

  • 1.png
    1.png
    29.8 KB · Просмотры: 12
Добавлена функция захвата мыши для FMX-контролов.
code_language.pascal:
procedure TFForm.SetCaptured(FControl: NativeInt);
begin
  if FControl = 0 then
    Exit;

  TControlAccess(Pointer(FControl)).Capture;
end;

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

Пример тут = cpi-v7
Добавлена возможность полностью кастомизировать процесс деинсталляции и использовать FMX-компоненты в окне удаления приложения.

Для этого достаточно заменить стандартные объявления функций:
code_language.pascal:
function InitLayoutHandle: FLayout;
  external 'InitLayoutHandle@files:FMXBridge.dll stdcall delayload';
на версии для деинсталлятора:
code_language.pascal:
function InitLayoutHandleUn: FLayout;
  external 'InitLayoutHandle@{tmp}\FMXBridge.dll uninstallonly stdcall delayload';

Аналогично и для остальных компонентов (Form, Label, ProgressBar, Timer и т.д.).

Это позволяет сделать свое окно деинсталляции с любыми элементами FMX: надписями, прогресс-барами, индикаторами и другим оформлением.
Добавлен новый интерфейс FTile для работы с плитками.

Поддерживаются:
создание и удаление плиток;
позиционирование и выравнивание;
настройка размеров и отступов;
фоновые изображения;
цвет, рамка и скругление углов;
текст и параметры шрифта;
прозрачность и поворот;
обработка событий мыши;
работа с тегами и подсказками.
code_language.pascal:
type
  FTile = interface(IUnknown)
    '{0669FD3A-DBAB-4AA9-890A-BC1BFD47EE09}'
    function FCreate(FParent: NativeInt): NativeInt;
    procedure Cursor(FCursor: TCursor);
    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 SetHint(const FText: WideString);
    procedure SetClipParent(FValue: Boolean);
    procedure SetClipChildren(FValue: Boolean);
    procedure BringToFront;
    procedure SendToBack;
    procedure SetTag(FTag: Integer);
    procedure TileColor(FColor: TAlphaColor);
    procedure TilePicture(const FImage: WideString; WrapMode: TWrapMode);
    procedure TileStrokeColor(FColor: TAlphaColor);
    procedure TileThickness(FThickness: Single);
    procedure TileCurve(XRadi, YRadi: Single);
    procedure Text(const FText: WideString);
    procedure FontSetting(const FontName: WideString; FontSize: Single; FontColor: TAlphaColor);
    procedure TextSetting(FHorzAlign, FVertAlign: TTextAlign);
    procedure TextBackColor(FColor: TAlphaColor);
    procedure TextColor(FontColor: TAlphaColor);
    procedure Opacity(FOpacity: Single);
    procedure RotationAngle(FValue: Single);
    procedure RotationCenter(X, Y: Single);
    procedure Enabled(FEnabled: Boolean);
    procedure Visible(FVisible: Boolean);
    procedure HitTest(FEnabled: Boolean);
    function IsVisible: Boolean;
    function GetText: WideString;
    function GetTag: Integer;
    function GetLeft: Single;
    function GetTop: Single;
    function GetHeight: Single;
    function GetWidth: Single;
    function GetObject: NativeInt;
    procedure OnClick(Event: TNotifyEvent);
    procedure OnMouseDown(Event: TMouseEventF);
    procedure OnMouseEnter(Event: TNotifyEvent);
    procedure OnMouseLeave(Event: TNotifyEvent);
    procedure OnMouseUp(Event: TMouseEventF);
    function Handle: NativeInt;
  end;

Интерфейс был запрошен пользователями (заморскими) достаточно давно, но до реализации руки дошли только сейчас.

43.png
Исправлено отображение миниатюры окна в панели задач на Windows 11 - ранее изображение могло выглядеть "размытым"/"сжатым" из-за некорректного расчёта клиентской области. Добавлена корректировка обработки с учётом системных границ окна, что устраняет искажения и обеспечивает более чёткий превью.
code_language.pascal:
WM_NCCALCSIZE

Отключено применение акцентного цвета к заголовку окна в Windows 11. Ранее верхняя полоса автоматически окрашивалась в системный цвет. Теперь заголовок остаётся нейтральным.
code_language.pascal:
DwmSetWindowAttribute(DWMWA_CAPTION_COLOR)

Улучшена загрузка и отображение иконки в FTitleBar. Ранее при использовании иконок большого размера они могли выглядеть "сжатыми" и пиксельными.
Теперь выбирается наиболее подходящий размер фрейма из .ico с учётом DPI, что в большинстве случаев даёт чёткое и корректное отображение без искажений.
code_language.pascal:
Factory: IWICImagingFactory;
Decoder: IWICBitmapDecoder;
Frame: IWICBitmapFrameDecode;
Converter: IWICFormatConverter;

Вложения

  • 32.png
    32.png
    516.7 KB · Просмотры: 37
Небольшой апдейт с добавлением новых функций и расширением существующих возможностей.

Добавлена функция определения 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;

Прочие изменения
Небольшие внутренние правки и стабилизация работы компонентов.
Назад
Сверху