FMXBridge для Inno Setup (внутренний проект)

DLL FMXBridge для Inno Setup (внутренний проект) 08.03

Нет прав для скачивания
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
1. Получить путь/имя текущего рабочего фона рабочего стола
code_language.pascal:
function GetDesktopImg: WideString;
  external 'GetDesktopImg@files:FMXBridge.dll stdcall delayload';

2. Получить "средний" цвет из изображения (FMX)
code_language.pascal:
function GetImgColor(const AImage: UnicodeString): TAlphaColor;
  external 'GetImgColor@files:FMXBridge.dll stdcall delayload';

3. Диалог выбора папок
code_language.pascal:
function BrowseDialog(Owner: HWND; const Caption: WideString; var InDir: WideString; var OutDir: WideString): Boolean;
  external 'BrowseDialog@files:FMXBridge.dll stdcall delayload';

4. Диалог открытия файла
code_language.pascal:
function OpenDialog(Owner: HWND; const Caption, DefExt, Filter, InitialDir: WideString; var FileName: WideString): Boolean;
  external 'OpenDialog@files:FMXBridge.dll stdcall delayload';

5. Диалог сохранения файла
code_language.pascal:
function SaveDialog(Owner: HWND; const Caption, DefExt, Filter, InitialDir: WideString; var FileName: WideString): Boolean;
  external 'SaveDialog@files:FMXBridge.dll stdcall delayload';

6. Чтение текста из файла
code_language.pascal:
function ReadAllText(const FileName: WideString; out FText: WideString): Boolean;
  external 'ReadAllText@files:FMXBridge.dll stdcall delayload';

7. Запись текста в файл (перезапись)
code_language.pascal:
function WriteAllText(const FileName, FText: WideString): Boolean;
  external 'WriteAllText@files:FMXBridge.dll stdcall delayload';

8. Добавление текста в конец файла
code_language.pascal:
function AppendAllText(const FileName, FText: WideString): Boolean;
  external 'AppendAllText@files:FMXBridge.dll stdcall delayload';

Добавлено:
# FireMonkey FMX: Property Animations and Triggers (Full List)

Примеры:

code_language.pascal:
    TObject(TESTEdit.GetSearchBtnObject):
    begin
      if OpenDialog(FMXForm.HandleHWND, 'Выберите том', 'bin', 'BIN файлы|*.bin', 'C:\', FileName) then
      begin
        MsgBox('Выбран том: ' + FileName, mbInformation, MB_OK);
      end;
    end;

    TObject(TESTButton.GetObject):
    begin
      OldDir:= ExpandConstant('{sd}');

      if BrowseDialog(FMXForm.HandleHWND, 'Выбор папки установки', OldDir, NewDir) then
      begin
        WizardForm.DirEdit.Text:= NewDir;
        TESTEdit.Text(WizardForm.DirEdit.Text);
      end;
    end;

    TObject(TESTPressedButton.GetObject):
    begin
      TextToSave := 'Пример текста для сохранения';

      if SaveDialog(FMXForm.HandleHWND, 'Сохранить текстовый документ', 'txt', 'Текстовые документы|*.txt', 'C:\', FileName) then
      begin
        if WriteAllText(FileName, TextToSave) then
          MsgBox('Файл успешно сохранён в: ' + FileName, mbInformation, MB_OK)
        else
          MsgBox('Не удалось сохранить файл: ' + FileName, mbError, MB_OK);
      end;
    end;
1. В обновлении исправлена проблема, из-за которой окно могло некорректно восстанавливаться после сворачивания в Windows 10.
Причиной оказалось служебное message-окно FMX (ApplicationHWND), которое перехватывало управление состояниями окна. Теперь используется
code_language.pascal:
SetParent(ApplicationHWND, HWND_MESSAGE)
что убирает влияние на сворачивание и разворачивание.

2. Добавлен альтернативный режим создания формы для Windows 10.
Теперь при создании окна может использоваться эффект размытия фона
code_language.pascal:
(Accent.AccentState := ACCENT_ENABLE_BLURBEHIND)
Это улучшает внешний вид и повышает совместимость в системах, где эффекты Mica, Tabbed и Acrylic не поддерживаются или не работают.

3. Добавлено обновление для установки цвета рамки окна через
code_language.pascal:
DwmSetWindowAttribute (DWMWA_BORDER_COLOR)
На Windows 10 этот параметр игнорируется.

76.png

43.jpg
  • Like
Реакции: MarsBar
Исправлена проблема с фокусом: форма больше не теряет его в пользу Inno Setup при запуске.
Восстановлена стандартная системная анимация сворачивания.

1. В новой версии убраны все псевдотипы (TFMXObject, IForm и т.п.).
Теперь используется только один универсальный тип — NativeInt.
22.jpg
Не нужно объявлять десятки фиктивных типов в Inno Setup.
2. Исправлено - FShadowText
3. Запросы - (Обратная связь) Теперь при попытке открыть медиафайл, который не поддерживается, вместо пустого Exception появляется сообщение:
54.png

4. Форма теперь независимая от Inno Setup; кнопка "Свернуть" минимизирует напрямую через HWND.
code_language.pascal:
    TObject(TitleBar.GetObjectMinBtn):
    begin
      MinimizeWindow(FMXForm.HandleHWND);
//      MinimizeWindow(WizardForm.Handle);
    end;
1. Изменил возвращаемый тип функций с LongInt на HWND, потому что так правильно с точки зрения Delphi.
code_language.pascal:
type
  FForm = interface(IUnknown)
    '{C1EF3F26-12BF-421C-9AAC-4FFB9E9D72A1}'
    function FCreateMicaForm(WParent: HWND; FDark, Round: Boolean): HWND;
    function FCreateTabbedForm(WParent: HWND; FDark, Round: Boolean): HWND;
    function FCreateAcrylicForm(WParent: HWND; FDark, Round: Boolean): HWND;
    function FCreateBlankForm(WParent: HWND; FColor: TAlphaColor; const FImage: WideString; Round: Boolean): HWND;
    function FCreateImageForm(WParent: HWND; FColor: TAlphaColor; const FImage: WideString; Opacity: Boolean): HWND;
    function FCreateGradientForm(WParent: HWND; FColor1, FColor2: TAlphaColor; FStyle: TGradientStyle; Round: Boolean): HWND;
2. Теперь окно поддерживает обновление миниатюры в панели задач в реальном времени.
Ранее миниатюра была пустой, теперь отображается текущее содержимое окна.
3. Восстановлена анимация сворачивания в панель задач.

45.jpg
Тестирование ещё требуется
Добавлено - загрузка файлов

Позволяет скачивать файлы с отображением прогресса и скорости, с возможностью остановки через колбэк или глобально через AbortAllDownloads. Поддерживает последовательную загрузку нескольких файлов, обновление интерфейса через TDownloadCallback и сохраняет данные напрямую в файл через THTTPClient.

Пример
code_language.pascal:
var
  Url, FileName: WideString;
begin
  Url := 'https://example.com/file.zip';
  FileName := 'C:\Downloads\file.zip';

  DownloadFile(Url, FileName,
    function(const Url, LocalFileName: WideString;
             const ProgressCurrent, ProgressMax, SpeedKBps: Int64): Boolean
    begin
      // Обновляем прогрессбар и текст
      ProgressBar.Value := ProgressCurrent;
      ProgressText.Text := Format('%d%% (%d KB/s)', [ProgressCurrent * 100 div ProgressMax, SpeedKBps]);
      Result := False; // вернуть True, чтобы остановить загрузку
    end);
end;

Вложения

  • 3.png
    3.png
    84.5 KB · Просмотры: 13
Добавлено:
  • Для FCheckBoxTree — двустороннее управление чекбоксами секции (главный ↔ дочерние, включая радиокнопки).
  • Для FSpeedButton — процедура Pressed(FValue: Boolean), гарантирует, что кнопка визуально выглядит нажатой при старте.
Назад
Сверху