Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Небольшое обновление
Добавлен новый компонент 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);
Исправлено:
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;
![]()
Добавлены новые компоненты к предыдущим обновлениям (FImageButton, FImageCheckbox):
FImageRadioButton - радиокнопка на основе спрайта с поддержкой группировки, кастомного текста, шрифтов, состояний hover/down и обработкой мыши. Реализована логика взаимоисключающих групп (GroupName) и событие изменения состояния.
FImageProgressBar - прогресс-бар на текстурах (back/fill) с поддержкой min/max/value и отрисовкой заполнения через спрайты.
унифицированы почти все базовые свойства управления (layout, input, events)
![]()
Добавлены новые компоненты:
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: подготовили изображение со всеми состояниями, загрузили его в кнопку и получили готовый элемент.
Добавлена новая функция:
Позволяет извлекать иконки напрямую из ресурсов Windows и сторонних DLL/EXE с сохранением в PNG.code_language.pascal:function ExtractIconFromResource( const ModuleFile, OutFile: WideString; ResourceIndex: Integer; IconSize: Integer ): Boolean;
Поддерживаемые размеры зависят от конкретного ресурса и обычно включают:
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;
Добавлена функция захвата мыши для 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;
Интерфейс был запрошен пользователями (заморскими) достаточно давно, но до реализации руки дошли только сейчас.
![]()
Исправлено отображение миниатюры окна в панели задач на 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;
Небольшой апдейт с добавлением новых функций и расширением существующих возможностей.
Добавлена функция определения 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);
![]()
![]()
Добавлен новый компонент 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;
Прочие изменения
Небольшие внутренние правки и стабилизация работы компонентов.