Inno Setup VCL

Leserg

Участник
Это модифицированная редакция Inno Setup на русском языке, в которую встроена поддержка визуальных стилей *.vsf. Теперь вам не нужно использовать сторонние библиотеки и писать соответствующий код. Достаточно в сценарии указать директиву SetupStyleFile с выбранным файлом стиля и на этом все. Также данная модификация поддерживает расширенную палитру стандартных компонентов и дополнена некоторыми функциями и параметрами из расширенной версии компилятора от RESTOOLS.

Разработка данной модификации ведётся на базе исходного кода Inno Setup (Copyright© Jordan Russell и Martijn Laan), а также компонентов VCL Styles Utils (Copyright© Rodrigo Ruz) и SynTaskDialog (Copyright© Synopse Informatique).

InnoSetupVCL.png

Поддерживаемые компоненты:
TMemoryStream, TResourceStream, TParser, TCollectionItem, TCollection, TIcon, TControlScrollBar, TScrollBox, TApplication, TScreen, TGroupBox, TNewGroupBox, TScrollBar, TTrackBar, TUpDown, THotKey, TImageList, TStatusBar, TListView, TShape, TImage, TPaintBox, THeader, TTimer, TSpeedButton, TBitBtn, TMenu, TPopupMenu, TPicture, TPngImage.

Добавленные свойства:
OnMouseEnter, OnMouseLeave, DoubleBuffered и ParentDoubleBuffered.

Дополнения от RESTOOLS:
  • Новая директива IS_ENHANCED для препроцессора Inno Setup, объявлена по умолчанию;
  • Константа {apphwnd} – возвращает дескриптор программы установки;
  • Функции и процедуры:
    1. Randomize – включение генератора случайных чисел;
    2. FormatFloat – форматирование числа с плавающей запятой в строку;
    3. ExtractTemporaryFileEx – распаковка файла в указанный каталог;
    4. ExtractTemporaryFileToStream – распаковка файла в память;
  • Встроенные функции Windows API: FindResource, LoadResource, SizeofResource, LockResource, UnlockResource, FreeResource, LoadCursorFromFile, LoadImage, DrawIconEx, DestroyIcon, SetWindowText;
  • Директивы в секции [Setup] (есть небольшие отличия от Restools, см. примеры):
    1. BitmapResource – добавление в файл установки изображений Bitmap;
    2. IconResource – добавление в файл установки значков Icon;
    3. RawDataResource – добавление в файл установки различных ресурсов.
  • Компонент TNewStaticText поддерживает свойство "Transparent" со значением по умолчанию "True";
  • Компоненту TNewCheckListBox добавлены свойства "ItemFontStyle" и "SubItemFontStyle";
  • У компонента TNewButton активирован метод Click.
Практическое использование функций, компонентов, и параметров расширенной версии смотрите в примерах сценариев (папка Examples_ENVCL).

Обновление от 02.06.2023 (подробнее)
  1. Исправлена регистрация класса TGraphic;
  2. Добавлен класс TFontAwesome;
  3. Добавлен пример сценария с FontAwesome;
  4. Добавлен переносной режим для Compil32.exe (эксперимент!).

Обновление от 21.05.2023 (подробнее)
  1. Добавлены функции даты и времени;
  2. Добавлены компоненты TMonthCalendar (TNewMonthCalendar) и TDateTimePicker (TNewDateTimePicker);
  3. Добавлена функция Windows API SetWindowTheme;
  4. Добавлен шрифт [FontAwesome](https://fontawesome.com/v4/cheatsheet/) (значки);
  5. Добавлена поддержка свойства StyleElements для стандартных компонентов Delphi;
  6. Расширен перечень поддерживаемых свойств у компонентов TCustomMemoryStream, TResourceStream, TFont, TCustomButton и TButton;
  7. Исправление мелких ошибок и опечаток в коде.

Обновление от 05.03.2023 (подробнее)
  1. Обновлена библиотека VCL Styles Utils;
  2. Обновлена библиотека DDetours;
  3. Обновлена библиотека RemObjects Pascal Script;
  4. Компонентам FolderTreeView, RichEditViewer добавлена поддержка Style VCL;
  5. В элементах интерфейса мастера установки Inno Setup компонент TEdit заменён на TNewEdit;
  6. Ширина диалога выбора языка установки теперь не зависит от параметров масштабирования главного окна установки (SelLangForm.pas);
  7. Исправлена ошибка в процедуре ExtractTemporaryFileToBuffer, размер буфера увеличен до 256К (Extract.pas)
  8. Исправлена ошибка некорректного изменения значка, указанного директивой SetupIconFile в секции [Setup], если файл значка содержал более 13 изображений (авторы Wilenty и Martin Prikryl);
  9. Приведение кода в порядок и исправление незначительных ошибок.

Обновление от 05.03.2023 (подробнее)
  1. Из библиотеки VCL Style вырезан шрифт Awesome и функции его обработки.
  2. Добавлена поддержка локализации диалога задач для Windows XP.
  3. Теперь функциями SetAppTaskbarOverlayIconRes и SetAppTaskbarOverlayIconFile можно убрать значок состояния.
  4. Добавлена директива DirSelectModern для отображения диалога выбора папки в стиле Vista.
  5. Добавлена процедура ExtractTemporaryFileToBuffer – распаковка файла в буфер.

Обновление от 07.01.2021 (подробнее)
  1. Компонент TNewCheckListBox заменён на официальную версию.
  2. Восстановлены стандартные значения TTaskbarProgressState.
  3. Переделана функция записи ресурсов.
  4. Добавлена эмуляция диалогов задач на Windows XP.
Обновление от 21.11.2020 (подробнее)
  1. Добавлена поддержка изображений в формате JPG и PNG.
  2. Добавлена директива и функции для отображения информации на Панели задач.

В случае детекта вашей сборки антивирусом, связываетесь с группой поддержки (адреса) и сообщаете о ложном срабатывании.

Модификация Inno Setup 6.0.5 - GitHub.
Модификации других версий и различные библиотеки - Я.Диск.
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
@Leserg, как сделать проверку используя #ifndef на версию компилятора, например тут нету CenterInsideControl? (а FlipSizeAndCenterIfNeeded)
Новая директива IS_ENHANCED для препроцессора Inno Setup, объявлена по умолчанию;
IS_ENHANCED_VCL легко бы исправило это.
 

Leserg

Участник
как сделать проверку используя #ifndef на версию компилятора
@sergey3695, в моих примерах есть проверка версии компилятора. Вот так, например:
Код:
#if !defined(IS_ENHANCED) || (VER < 0x06000500)
  #pragma error "Для компиляции этого сценария требуется расширенная \
                 редакция Inno Setup 6.0.5 или выше"
#endif
 

Andreo Fadio

Старожил
И что теперь? Если боитесь, то не пользуйтесь.
Какое-то странное суждение вопроса.
Тем более вирустотал не показатель.
С чего бы это?

антивирусы по прежнему недовольны анинсталлером
На windows defender вообще надежды нет в плане реакции на inno setup. У меня windows 10 Pro лицензия (не активатор, лицензионный образ, базы обновляются сами каждый день), на любой собранный exe из под модифицированной версии выдает такое:20201119_091351.jpg
И на согласие разрешения угрозы он все равно выполняет удаление файла))) Что-то сильно изменилось со времен майского- июньского исправления в defender'e за 2020.
+ все еще и от вашей секции код зависит. Я свой на вирус тотал заливал собранный exe реагировали только какие-то малоизвестные антивирусы.20201119_122126.png
 

ALF

Мимокрокодил
Если боитесь, то не пользуйтесь.
я не боюсь - я же не для себя любимого создаю инсталяторы с кастомными интерфейсами. Боятся те, кто потом использует эти инсталяторы. И даже если бы не боялись, то виндовый дефендер всё равно не даст им его использовать
 

Xabib2302

Новичок
Когда свойство по сворачиванию элементов в компоненте появится?
Уж точно не скоро, а может никогда
@Leserg, Добавьте в подпись или в шапку контакты для материальной поддержки на развитие вашей Inno Setup
 
Последнее редактирование:

Leserg

Участник
Когда свойство по сворачиванию элементов в компоненте появится?
Парни, ещё раз: я не умею делать компоненты. Если кто-то сделает - добавлю.

Уж точно не скоро, а может никогда
Да, скорее всего так и будет.

антивирусы по прежнему недовольны анинсталлером
С этими антивирусами беда полная. Я уже знаю что-делать. Да, сервис VirusTotal не показатель. Но антивирус Microsoft, который установлен дефакто и работает по умолчанию, рубит на корню любой (хоть пустой) инсталлятор или деинсталлятор, созданный в моей модификации. В итоге пользователи не смогут нормально использовать ваши работы. Отсылал файлы в Microsoft - в ответ "спасибо, ложное срабатывание, базы будут обновлены". Но, зараза, файлы-то при сборке и установке все время разные получаются и каждый раз антивирус Microsoft снова трубит о трояне. В общем, баян. Руки опускаются и нет никакого желания что-либо делать дальше.
 

Xabib2302

Новичок
@Leserg, такое ощущение, что это какая-то фича от разрабов инки против мододелов, хотя смысл если это опенсоурсный проект.
 

Leserg

Участник
такое ощущение, что это какая-то фича от разрабов инки против мододелов
Нет, это вряд ли. :)
Можно купить цифровой сертификат и подписывать свои инсталляторы и деинсталляторы, тогда, возможно, детекта вообще не будет. А так с "ветряными мельницами" можно бороться бесконечно.
 

Leserg

Участник
Сделал очередное обновление Inno Setup v6.0.5 VCL (XP).

1. Графика (только в расширенной версии - FullVCL)
Добавил поддержку изображений в формате JPG и PNG для расширенной редакции.
Новые классы: TPicture и TPngImage.
code_language.pascal:
TPicture = class(TPersistent)
  constructor Create;
  procedure LoadFromStream(Stream: TStream);
  procedure SaveToStream(Stream: TStream);
  procedure LoadFromFile(const Filename: String);
  procedure SaveToFile(const Filename: String);
  property Bitmap: TBitmap; read write;
  property Graphic: TGraphic; read write;
  property Icon: TIcon; read write;
  property Metafile: TMetafile; read write;
  property Height: Integer; read;
  property Width: Integer; read;
  property OnChange: TNotifyEvent; read write;
  property OnProgress: TProgressEvent; read write;
end;

TPngImage = class(TGraphic)
  constructor Create;
  procedure LoadFromStream(Stream: TStream);
  procedure LoadFromFile(const Filename: String);
  procedure LoadFromResourceID(Instance: THandle; ResID: Integer);
  procedure LoadFromResourceName(Instance: THandle; const Name: String);
  procedure Resize(const CX, CY: Integer);
  property Canvas: TCanvas; read;
  property Empty: Boolean; read;
  property Height: Integer; read;
  property Width: Integer; read;
  property Palette: HPalette; read write;
  property TransparentColor: TColor; read write;
  property OnChange: TNotifyEvent; read write;
  property OnProgress: TProgressEvent; read write;
end;
Формат PNG можно загружать как из внешнего файла, так и из ресурсов.
Пример смотрите в файле Examples_ENVCL\Example_PNG-JPG.iss.
Скрин без использования стиля:
ImageFormat01.png

Скрин с использование стиля:
ImageFormat02.png

2. Панель задач (только в расширенной версии - FullVCL)
В секции [Setup] новая директива TaskBarView со значение по умолчанию False.
Если TaskBarView=True, то в панели задач будет виден эскиз окна установки.

Скрин
TaskBar2.png

Процедуры для использования в секции "Code"
(пример смотрите в файле Examples_ENVCL\Example_TaskBarInfo.iss):
1) procedure SetAppTaskbarProgressState(const State: TTaskbarProgressState);
Позволяет указать состояние прогресс-бара.

Объявление класса TTaskbarProgressState (поддерживаемые значения):
TTaskbarProgressState = (tpsNoProgress, tpsIndeterminate, tpsNormal, tpsError, tpsPaused);

Доступные состояния:

tpsNoProgress - прогресс не отображается​
tpsIndeterminate - прогресс бар постоянно мерцает​
tpsNormal - обычное отображение прогресса​
tpsError - отображение ошибки​
tpsPaused - отображение паузы​

Пример: SetAppTaskbarProgressState(tpsPaused);


2) procedure SetAppTaskbarProgressValue(const Completed: Cardinal);
Позволяет указать процент выполнения текущей задачи. Действительные значения от 0 до 100.

Пример: SetAppTaskbarProgressValue(10);


3) procedure SetAppTaskbarThumbnailTooltip(const ToolTipStr: String);
Позволяет установить текст всплывающей подсказки при наведении курсора мышки на экскиз.

Пример: SetAppTaskbarThumbnailTooltip('Application');


4) procedure SetAppTaskbarOverlayIconRes(const ResOvIcon: String);
Позволяет добавить иконку состояния к основному значку приложения.
Эта процедура добавляет иконку из ресурсов программы установки.

Пример: SetAppTaskbarOverlayIconRes('_IS_OVICON');

Чтобы добавить иконку в ресурсы инсталлятора, нужно использовать директиву IconResource в секции "Setup".

Пример: IconResource=ovicon>okR.ico, где

ovicon - имя ресурса (любое без пробелов)
okR.ico - файл значка 16х16 пикс. с глубиной цвета 32-бит. Использовать значки большего размера нет смылса, т.к. они все равно будут уменьшены до 16х16.

При записи в ресурсы инсталлятора к имени иконки будет добавлена приставка "_IS_".
Таким образом для загрузки иконки из ресурсов инсталлятора необходимо указать имя "_IS_OVICON".


5) procedure SetAppTaskbarOverlayIconFile(const FileIcon: String);
Процедура аналогичная предыдущей и позволяет добавить иконку состояния к основному значку приложения, но уже из внешнего файла.

Пример: SetAppTaskbarOverlayIconFile(ExpandConstant('{tmp}\okR.ico'));
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
@Leserg, какой код добавляет эскиз? (имею ввиду в проекте dephi) Для CheckListBox Jpg будет?
 

Leserg

Участник
какой код добавляет эскиз? (имею ввиду в проекте dephi)
Код:
procedure TWizardForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  if SetupHeader.TaskBarOn then
    // Show Thumbnail Wizard on TaskBar
    Params.WndParent := Application.Handle
  else
    // Hide Thumbnail Wizard on TaskBar (default)
    Params.WndParent := MainForm.Handle;
end;
Для CheckListBox Jpg будет?
Пока нет. Я не знаю, как это сделать.
 
Сверху