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

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

Нет прав для скачивания
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 · Просмотры: 11
Добавлено:
  • Для FCheckBoxTree — двустороннее управление чекбоксами секции (главный ↔ дочерние, включая радиокнопки).
  • Для FSpeedButton — процедура Pressed(FValue: Boolean), гарантирует, что кнопка визуально выглядит нажатой при старте.
Назад
Сверху