3D Animation

Скрипт 3D Animation 09.06

Нет прав для скачивания

audiofeel

Старожил
audiofeel submitted a new resource:

Atomic Heart - FMXInno

3D Animation
за основу взят проект на Delphi от Razor12911
7 страниц (FTabControl)
Проверка сис. требований (не запрет)
Установка доп. ПО
Выбор компонентов
Принятие лицензионного соглашения (при файла рядом)
Мгновенная смена цвета инсталятора и кнопок (FColorComboBox)
Все отлично масштабируется на 200%
Thanks to Hitman797 and Blackfire69 за функции и процедуры по запросу.
Это демо версия возможностей, не используйте данный скрипт в реале.
Посмотреть вложение 7371Посмотреть вложение 7372Посмотреть вложение 7373

Read more about this resource...
 
Последнее редактирование:

audiofeel

Старожил
Просьба. Тест на мониторах 2к-8к.
Есть ли правильное масштабирование и как оно вообще выглядит. Так же интересует белый квадрат при запуске по центру формы (появляется или не).
 

Вложения

Krinkels

Он где то тут
Администратор
Снимок экрана 2023-08-31 202501-min.jpg
Выглядит прикольно, никакого белого квадрата я не увидел. Есть недостаток, если перетащить и отпустить мышку то установщик моргает
 

audiofeel

Старожил
Посмотреть вложение 7800
Выглядит прикольно, никакого белого квадрата я не увидел. Есть недостаток, если перетащить и отпустить мышку то установщик моргает
Сенкью за тесты! Это какое разрешение экрана? То есть с масштабом будто бы все нормально?
Судя по Corner система Windows 10?
 

Вложения

Последнее редактирование:

Krinkels

Он где то тут
Администратор

Krinkels

Он где то тут
Администратор
Снимок экрана 2023-09-01 163923-min.jpg
При перетаскивании прозрачность становится 100%, это так и задумано?
 

audiofeel

Старожил
Посмотреть вложение 7802
При перетаскивании прозрачность становится 100%, это так и задумано?
Сейчас да (FluentApi v2.0)
Для Windows 10 и ниже можно ставить на паузу при перемещении
code_language.pascal:
procedure PauseFormUpdateOnMove(FValue: Boolean);
procedure PauseFluentEffectsOnDeacive(FValue: Boolean);
 

audiofeel

Старожил
audiofeel обновил(а) ресурс Atomic Heart новой записью:

Обновление

Обновлено:
FMXInno (beta) 02.09.2023.
Теперь поддерживается масштабируемость.
Теперь два языка.
Компилится без ошибок на Inno Setup 6.2.2
Заменен файл стиля на 'RegalBlueClear_Win' (Отредактированный).
Заменен шрифт на 'Play'.
Добавлено WriteIni
Удалено 'не нужное'
Это демо версия возможностей DLL, не используйте в реальных ваших проектах.
Посмотреть вложение 7806
Узнать больше об этом обновлении...
 

Leserg

Участник
Просьба. Тест на мониторах 2к-8к.
Есть ли правильное масштабирование и как оно вообще выглядит. Так же интересует белый квадрат при запуске по центру формы (появляется или не).
OC Windows 11 22H2
Разрешение экран 1920х1080
После диалога выбора языка появляется два прямоугольника наложенные друг на друга, а уже потом главное окно инсталлятора.

Гифка (большая - 4Мб)


Такое поведение с обеими вашими примерами: Output.7z и Output1.7z. У меня был похожий глюк при попытке сделать заставку (сплешскрин) с использованием функции UpdateLayeredWindow и наложением на неё формы с компонентами. Я уже не помню, как я её поборол, но крутился вокруг параметра BLENDFUNCTION и временем инициализации одного окна после другого. Что получилось, во вложении: скомпилированный пример и сценарий (сценарий представляет собой отдельный модуль, который нужно включать (include) в основной сценарий, также используется приватная сборка Inno, но сам модуль в упрощенном виде можно адаптировать под стандартную Inno).
 

Вложения

audiofeel

Старожил
OC Windows 11 22H2
Разрешение экран 1920х1080
После диалога выбора языка появляется два прямоугольника наложенные друг на друга, а уже потом главное окно инсталлятора.
Спасибо за тест. Не удается повторить ваш опыт (что бы я не делал, у меня нет такого). Нужно последнюю версию на тест и там крутить если получится.
Я думаю.... Что то не спрятано до FMXForm.Show;
сейчас сделал все странички (FCustomPage) на Visible(False) до FMXForm.Show.
009 (1).gif
 

Вложения

Последнее редактирование:

Leserg

Участник
Я думаю.... Что то не спрятано до FMXForm.Show;
сейчас сделал все странички (FCustomPage) на Visible(False) до FMXForm.Show.
Ничего не изменилось. :(
Прогнал ваш сценарий через отладчик Inno в поиске проблемы.
Так вот, этой проблемой оказался вызов функции FCreateFluentColor из библиотеки FMXInno.dll.



Но прежде чем будет вызвана эта функция, в процедуре InitializeWizard() вы изменяете первоначальные размеры окна установки на новые.



Это окно уже создано и пока не видимо, но последующий вызов функции FCreateFluentColor делает его видимым и перед пользователем на экране мелькает его форма.



Поэтому необходимо корректировать функцию FCreateFluentColor (и другие, подобные ей) в библиотеке FMXInno.dll.

Или использовать в сценарии "костыли": загнать окно за пределы экрана, провести его инициализацию, а потом вернуть обратно. Бред, конечно, проще закрыть на это глаза (так, мысли вслух).

P.S. Если в настройках электропитания Windows установить режим "Высокая производительность", то описанный процесс происходит так быстро, что глаз ничего не успевает заметить. У меня по умолчанию установлен режим экономии, что даже программа захвата экрана успевает записать это безобразие.

P.P.S. Файл плагина FMXInno.dll сжат РЕ-упаковщиком, что также вносит существенные задержки по разворачиванию его образа в памяти ПК и последующую инициализацию. Рекомендовал бы этого не делать. Компрессором самого Inno он может быть сжать намного лучше и развернут намного быстрее. Поэтому предпочел бы использовать исходную версию файла плагина без сжатия.

;)
 

audiofeel

Старожил
@Leserg,
Это и есть, по сути, костыли. Так он борется с этим белым квадратом при запуске. Раньше квадрат был еще дольше, и еще белее (иногда зависит от количества объектов) .
FCreateFluentColor - создается форма и сразу прячется = procedure Hide (Настройками это не изменить, это его решение. Естественно, он советовался и спрашивал - а нужно ли оно нам? Конечно, получив столько негатива из-за этого белого квадрата, при запуске я ответил, что - скорее делайте, нас это устраивает); Сделано это все им чтобы минимизировать этот белый квадрат. И получилось гораздо лучше чем было до этого.
Далее, когда все инициализировалось, нужно все спрятать = Visible(False), иначе все станет видимым на долю секунду. Затем руками вызвать procedure Show;.
P.S. Если в настройках электропитания Windows установить режим "Высокая производительность", то описанный процесс происходит так быстро, что глаз ничего не успевает заметить. У меня по умолчанию установлен режим экономии, что даже программа захвата экрана успевает записать это безобразие.
Я все тестил естественно так же в режиме - 'экономия энергии'. Пока как у вас не получилось.
Но прежде чем будет вызвана эта функция, в процедуре InitializeWizard() вы изменяете первоначальные размеры окна установки на новые.
Хорошо. Мы можем вообще это убрать и воспользоваться = FCreateFluentColorEx
code_language.pascal:
procedure InitializeWizard();
begin
//  with WizardForm do
//  begin
//    Height:= 578;
//    Width:= 904;
//  end;
  FMXDesigning;
  BasePage.Visible(False);
  Page1.Visible(False);
  Page2.Visible(False);
  Page3.Visible(False);
  Page4.Visible(False);
  Page5.Visible(False);
  Page6.Visible(False);
  Page7.Visible(False);
  FMXForm.Show;
  pTaskbarPreviewEx(FMXForm.HandleHWND, True);
end;
Если это поможет...
Создаем расширенный тип формы FCreateFluentColorEx (Где есть возможность задать координаты)
code_language.pascal:
procedure FMXDesigning;
begin
//  FMXForm.FCreateFluentColor(WizardForm.Handle, $004BA6D6, False, 0.5, 0)
  FMXForm.FCreateFluentColorEx(WizardForm.Handle, 0, 0, 904, 578, $004BA6D6, False, 0.5, 0);
P.S. Мой кунг фу в этом не на столько хорошо как Ваш и как у автора плагина.
 

Вложения

  • 4.9 MB Просмотры: 7
Последнее редактирование:

Leserg

Участник
@audiofeel, в вашем последнем примере (бинарнике SF.7z) вы отключили диалог выбора языка (ShowLanguageDialog=no). В итоге бага с прямоугольниками окон не наблюдается. Теперь, если в вашем начальном сценарии просто отключить диалог с выбором языка и не делать никаких дальнейших изменений в коде, указанных вами в предыдущем сообщении, то визуально все нормально.
Но если предоставить пользователю выбрать язык, то начинаются визуальные проблемы. Оно и понятно, код Inno выполняет инициализацию окна установки согласно выбранному языку. Оно ещё не видимо, но в этот момент мы его перехватываем и направляем в FMXInno.dll, по итогу получаем визуальный баг. То есть изначальная проблема находится в FMXInno.dll. Но я могу ошибаться, это всего лишь предположения.

Update:
Проверил на других ПК: даже с отключенным диалогом выбора языка все равно мелькают прямоугольники. В общем, пока проблема не будет решена в FMXInno.dll, мы ничего не сделаем.

Создаем расширенный тип формы FCreateFluentColorEx (Где есть возможность задать координаты)
Здесь кроется другая засада. Как вы разместите окно по центру экрана? Разрешение у пользователей разное. Нужно будет лепить дополнительную функцию по детекту информации о разрешении экрана и на базе полученных данных и размеров окна инсталлятора вычислять новые координаты его положения, которые затем подставлять в данную функцию. Или использовать дополнительные функции API, для передачи созданному окну сообщения о новой позиции. Это всё сложно. Лучше бы такая возможность была предусмотрена в самой функции.
:yes:
 
Последнее редактирование:

BLACKFIRE69

Новичок
OS Windows 11 22H2
Screen resolution 1920x1080
After the language selection dialog, two rectangles appear superimposed on each other, and only then the main installer window.


Форматирование (BB-код):
* Updated FCreate* functions.
* Disabled runtime integrity checks.
* Removed lzma2 algorithm and used the lowest compression level.
  - FinalSize(old): 2.86 MB
  - FinalSize(new): 3.41 MB

* Added new functions.
Форматирование (BB-код):
{ PowerPlan ID }
const
  USER_PP_POWER_SAVER          = $0002;
  USER_PP_BALANCED             = $0004;
  USER_PP_HIGH_PERFORMANCE     = $0006;
  USER_PP_ULTIMATE_PERFORMANCE = $0008;
  USER_PP_UNKNOWN              = $0001;
 
function wPowerPlanGetActivePlan: Byte;
function wPowerPlanExist(const PowerPlanID: Byte): Boolean;
function wPowerPlanSetOrCreate(const PowerPlanID: Byte): Boolean;


// ------------------

var
   CurActivePowerPlanID: Byte;

function InitializeSetup(): Boolean;
begin
  CurActivePowerPlanID := wPowerPlanGetActivePlan;

  if (CurActivePowerPlanID = USER_PP_POWER_SAVER) or // Power saver
     (CurActivePowerPlanID = USER_PP_BALANCED) or // Balanced
     (CurActivePowerPlanID = USER_PP_UNKNOWN) then // Unknown (optional)
  begin
    if (not wPowerPlanSetOrCreate(USER_PP_HIGH_PERFORMANCE)) then // High performance
      MsgBox('High performance powerplan error.', mbError, MB_OK);
  end;

  FMXInnoInit;
  Result := True;
end;

procedure DeinitializeSetup();
begin
  wPowerPlanSetOrCreate(CurActivePowerPlanID);

  FMXInnoShutDown;
end;
 

Вложения

Leserg

Участник
@BLACKFIRE69, спасибо.
Updated FCreate* functions.
Сейчас уже намного лучше чем было. На слабых ПК на доли секунды всё ещё проскакивает пустой прямоугольник окна, но это уже не критично, как по мне.

@audiofeel, с вашим последним примером также при запуске порядок. Но есть ещё другие ошибки.
Функция MinimizeWindowCustomAnimated, которая навешена на кнопку сворачивания окна.



Она очень криво работает в визуальном плане и анимация какая-то рваная. Пример на видео:


Стоп-кадры визуальных багов:

При сворачивании

При восстановлении


Плюс, вообще не ясно назначение функции MinimizeWindowCustomAnimated, если потом все равно нужно ещё сворачивать окно инсталлятора, используя дополнительную команду pMinimizeWindow(WizardForm.Handle). Если же её убрать, то окно сворачивается не в Панель задач, а в маленькое окошко над ней.



Во-вторых, при создании FMXForm (в процедуре FMXDesigning) мы его привязывали к дескриптору окна инсталлятора, здесь

FMXForm.FCreateFluentColor(WizardForm.Handle, $004BA6D6, False, 0.5, 0);

Т.е. по факту получается, что после создания FMXForm оно стало WizardForm.Handle. А теперь при сворачивании окна инсталлятора нужно сворачивать и то и другое, хотя это одно и тоже. Здесь достаточно только коданды pMinimizeWindow(WizardForm.Handle), а вызов MinimizeWindowCustomAnimated является лишним. Налицо или неверное использование функции MinimizeWindowCustomAnimated, или её недоработка, или я чего-то не понимаю и не знаю.

Еще один момент: если окно инсталлятора трижды свернуть/восстановить, то на 4-том сворачивании программа установки аварийно завершает свою работу. По крайней мере такое поведение установщика наблюдается на моих ПК. Для компиляции вашего примера сценария я использовал официальную версию Inno Setup 6.2.2.

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



Вот так никаких визуальных багов нет. Окно нормально сворачивается и восстанавливается. Возможно вы использовали её в своем сценарии в качестве примера и демонстраций возможности.
 
Сверху