VCL Styles for Inno Setup

DLL VCL Styles for Inno Setup 1.5.4.1

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

Andreo Fadio

Старожил
Leserg, я компилировал чисто пример (ссылка на него ниже) из папки Examples с прикреплением файла (*.txt) через стандартную для Inno секцию
Код:
InfoBeforeFile=*.txt
Стиль использован из вашего архива: Glossy2.vsf
Тип установки: Измененные файлы из IS6.0.3FullVclMod.7z поверх 6.0.3
Опер.система: Windows 10 1903

Просвет виден, если попереходить со страницы на страницу - просвечивает по границе окна с текстом, участок с другой страницы.
Именно на страницах из секций:
Код:
LicenseFile=
InfoBeforeFile=
InfoAfterFile=
Так же, что стиль установки modern или classic ничего не меняется, одно и тоже.
P.S. Тест на системе Windows 8.1 показывает тоже самое наложение и просвет.
 

Вложения

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

Leserg

Участник
Andreo Fadio, у себя я такой ошибки не наблюдаю.

My Program01.png

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

Andreo Fadio

Старожил
Вроде бы разобрался почему было:
Ошибочка - использовал версию innosetup-6.0.3VCL.rar полную установочную.
Пересобрал ручками поверх чистой 6.0.3 и нет проблем вроде бы :)

Почему-то даты измененных файлов не совпадают у установочной версии от 12.10, а для ручной установки от 15.10
 

Leserg

Участник
Ошибочка - использовал версию innosetup-6.0.3VCL.rar полную установочную.
Я хочу уточнить. Вы использовали установку Inno Setup из архива innosetup-6.0.3VCL.rar, потом вручную
Измененные файлы из IS6.0.3FullVclMod.7z поверх 6.0.3
Правильно? И в этом случае проявлялась ошибка.

После этого, вы установили Inno Setup из официального релиза, а потом вручную
Измененные файлы из IS6.0.3FullVclMod.7z поверх 6.0.3
Так? И проблема ушла.

Почему-то даты измененных файлов не совпадают у установочной версии от 12.10, а для ручной установки от 15.10
Даты разные, но файлы одинаковые. :)

Глянул ваш собранный пример. Да, действительно баг с отображением компонента TRichEditViewer - в нем отсутствует стиль WS_EX_CLIENTEDGE. Теперь бы ещё разобраться, почему так вышло. :scratchhead:
 

Andreo Fadio

Старожил
Я хочу уточнить. Вы использовали установку Inno Setup из архива innosetup-6.0.3VCL.rar. Правильно?
И в этом случае проявлялась ошибка.
После этого, вы установили Inno Setup из официального релиза, а потом вручную
Так? И проблема ушла.
Да.
Да, действительно баг с отображением компонента TRichEditViewer - в нем отсутствует стиль WS_EX_CLIENTEDGE. Теперь бы ещё разобраться, почему так вышло. :scratchhead:
Да там все просто.
При установке как оказалось побился чуть-чуть файл (Setup.e32) в сравнение по HEX содержанию пару строк оказалось сдвину и занулены.
Сам не пойму как так получилось :scratchhead: (в первой такое)
 

Andreo Fadio

Старожил
Leserg, подскажите ответ на вопрос. Как присвоить TNewStaticText и TLabel цвет при подключение скина?
Если выключить скин - все как надо собирает (надпись - красная, текст - оранжевый, ссылки - синие), со скином все в один тон красит и команда
Код:
....Font.Color:=
как бы не работает.
 

Leserg

Участник
Как присвоить TNewStaticText и TLabel цвет при подключение скина?
Никак (в рамках проекта Inno Setup).

При включении стиля визуализации все пользовательские настройки компонентов игнорируются и устанавливаются те, которые заданы в используемом стиле. Это не я придумал, так работают стили от любого разработчика. Или вы используете стиль, или вы его не используете. Одно из двух. Если вы создаете приложение в среде разработки, допустим в Embarcadero Delphi, и используете стилевое оформление GUI, то вы можете отменить применение стиля для заданного класса, например для TLabel, и присвоить ему нужные свойства (например, цвет текста). Для этого нужно создать перехватчик стиля, который будет перерисовывать нужный вам компонент с указанными свойствами. Пример того, как это можно осуществить, можно посмотреть здесь. Но сделать это в Inno Setup - архисложная задача. Нужно заново переписать Inno Setup и дополнить стороннюю библиотеку Pascal Script, которая используется для обработки секции Code, соответствующим кодом.
 

Andreo Fadio

Старожил
Leserg, нашел проблему просвета элемента при одновременном использование:
Код:
[Setup]
DisableWelcomePage=no
SetupStyleFile="....vsf"
и
Код:
procedure InitializeWizard();
begin
  //удаление пункта О программе
  WizardForm.Position:= poScreenCenter;
end;
Наблюдаем ту проблему отсутствия стиля WS_EX_CLIENTEDGE
Убираем какую-нибудь одну из трех строчек и все компилируется нормально без проблемы.
 

Вложения

Andreo Fadio

Старожил
это сточка

делает destroy, потом create окна, создание окна должно хуком перехватываться, там и добавить нужный стиль (если это не сделано)
Так если стиль использовать и эту сточку - то все нормально срабатывает и работает. Только при совпадение 3 строк компилятор как-то странно реагирует на такое совпадение.
 

Leserg

Участник
Наблюдаем ту проблему отсутствия стиля WS_EX_CLIENTEDGE
Как раз здесь со стилем WS_EX_CLIENTEDGE все в порядке. Причина бага в другом. Я пока не могу разобраться, почему так происходит. Поэтому пока воздержитесь от использования WizardForm.Position. По умолчанию окно инсталлятора и так размещается по центру экрана.
 

Andreo Fadio

Старожил
Leserg, при стандартных сообщениях (предупреждениях) на SelectDirPage:

или использование стандартных строк секции [setup], например:
Код:
[Setup]
EnableDirDoesntExistWarning=yes
при переходе на страницу с компонентами или задачами - ломается скин чекбоксов.
должен быть, к примеру:

будет так:

листаем вперед и возвращаемся назад скин на чекбоксах опять такой какой должен быть.
 

Leserg

Участник
а почему именно от нее? Так-то она работает со стилем и командой на показ начальной страницы по-отдельности.
Потому что при использовании "LicenseFile=", "InfoBeforeFile=" или "InfoAfterFile=" также проявляется данная ошибка отображения контролла. Поэтому пока воздержитесь от использования WizardForm.Position. По умолчанию окно инсталлятора и так размещается по центру экрана.

при стандартных сообщениях (предупреждениях) на SelectDirPage
Пожалуйста, давайте полный текст сценария. Если я просто добавлю "EnableDirDoesntExistWarning=", то описанной вами проблемы не наблюдаю.
 

Leserg

Участник
Кстати, такая же ошибка (отмена стиля для CheckBox'ов на странице выбора компонентов при вызове MessageBox) происходит с оригинальным плагином VCL Style.
 

Leserg

Участник
Обновил файлы Inno с использованием VCL Style.

Поправил (как смог) ошибки для стандартных страниц инсталлятора:

- просвет в компоненте TRichEditViewer при использовании в секции кода команды WizardForm.Position;
- потеря скина у чекбоксов на странице с компонентами при использовании в секции Setup параметра
EnableDirDoesntExistWarning=yes или DirExistsWarning=yes.

При использовании собственных страниц с этими компонентами и проявлении вышеописанных ошибок (возможные решения):
- для компонента TRichEditViewer необходимо задать свойство BevelKind := bkNone;
- для компонента TNewCheckListBox (список с чекбоксами) в процедуре CurPageChanged (когда происходит переход на страницу с этим компонентом) необходимо переназначить свойство компонента: сначала установить BorderStyle := bsNone, а следующей командой BorderStyle := bsSingle вернуть исходное значение. Этим действием мы заставим библиотеку перерисовать элемент заново, что восстановит скин.
 
Сверху