» Настройка 'Прогресса распаковки файлов'

Официальный сайт SFX Creator
Группа SFX Creator [В]Контакте
В данном диалоге вы можете настроить отображение баннера, который показывается пользователю при распаковке файлов, если включена настройка Показывать прогресс распаковки файлов в главном окне SFX Creator

Сначала вам необходимо выбрать внешний вид баннера, на выбор вам предоставляется 4 разных баннера:

Мини


Простая полоска прогресса без информации, баннер нельзя будет перенести мышкой, т.к. у него отсутствует заголовок

Стандартный


Баннер с отображением вашей информации в заголовке

Расширенный


В данном баннере отображается иконка вашего SFX архива, а также в этом баннере вы можете включить возможность отображения кнопки "Скрыть", по нажатию на которую пользователь сможет скрыть баннер
В дополнение к этому, у данного баннера есть ещё одна строка над полоской прогресса, текст в которой вы можете установить по своему желанию

v3


У данного баннера 2 настраиваемые строки над полоской прогресса
К тому же, в данном баннере вы можете установить ссылку на свой сайт (со своим цветом ссылки), очень удобно, не правда ли? Пока файлы распаковываются, вы рекламите свой сайт ;)

Настройка баннеров

Включить возможность подавлять появление баннера
Если вы установите галочку, то при указании ключа /NoBanner в командной строке к вашему SFX архиву, при запуске баннер не будет показан
Например, это полезно, если создавать мини-распаковщик файлов, с возможностью скрытия баннера при запуске распаковки файлов из внешнего приложения
При запуске же обычным способом из проводника, баннер будет показан

Циклический стиль прогресса
Вы можете установить циклический стиль полоски прогресса. При таком стиле прогресс будет бесконечно бегать от начала в конец до тех пор, пока идёт распаковка файлов. Работает на всех баннерах


Подключить дополнительные функции управления баннером
Если вы в своём проекте подключаете выполнение своих NSIS функций, то при отметке данной опции вы сможете показать и управлять данным баннером даже после его уничтожения после распаковки файлов, о командах читайте в конце данной странички.

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

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


Дополнительная информация


Текстовые поля: указываем переменные

Общие переменные для двух типов сжатия:
$ProgressPercent
Числовое значение прогресса распаковки файлов в процентах (без символа процента)

$ProgressFileExtractNumb
Порядковый номер файла, который в данный момент распаковывается

$ProgressFilesCount
Общее количество файлов, которое SFX архив распаковывает

${PRODUCT_NAME}
Имя вашего проекта

${PRODUCT_VER}
Версия вашего проекта


Время запуска SFX архива
Вы можете указать переменные, которые отобразят значения времени на момент запуска вашего SFX архива

$Day
Числовое значение дня

$Month
Числовое значение месяца

$Year
Числовое значение года

$WeekDay
Имя дня недели

$Hour
Час

$Minute
Минута

$Seconds
Секунда


Переменные имён файлов

В зависимости от типа сжатия (сжатие в тело SFX архива или сжатие с помощью 7-Zip) используются разные переменные для отображения имён файлов, которые распаковываются.

Переменные для типа сжатия В тело SFX архива (или без сжатия)

$ProgressFileExtractName
Короткое имя файла, который в данный момент распаковывается
Например explorer.exe


Переменные для типа сжатия Сжатие с помощью 7-Zip

$ZipExtractFileName
Короткое имя файла, который в данный момент распаковывается
Например: explorer.exe

$ZipExtractFileFullPath
Полный путь файла относительно содержимого 7-Zip архива
Например: TEST\TEST 2\TEST 3\myfile.exe


Использование баннера в своих функциях NSIS

Если вы подключаете к проекту показ баннера, то в дальнейшем в своих собственных функциях NSIS вы можете использовать возможности изменения информации в баннере, либо показ своего баннера после завершения показа баннера распаковки файлов.

В своих функциях вы можете использовать следующие команды:
Показ баннера
${CustomProgress::Show} "Текст в заголовке" "Текст в поле нового прогресса" "100" "1" "0"
Текст в заголовке
Текст, который будет отображаться в заголовке вашего баннера

Текст в поле нового прогресса
Параметр имеет силу только при подключении в проекте нового типа прогресса: текст, который отображается в поле над прогрессом

100
Общее количество пунктов прогресса

1
Параметр имеет силу только при подключении в проекте нового типа прогресса: если 1 - показывать кнопку скрытия баннера, если 0 - не показывать кнопку скрытия баннера

0
Если 0 - обычный стиль прогресса, если 1 - циклический стиль прогресса
Примечание. Чтобы данный стиль применился вашему прогрессу, значение Общего количества пунктов прогресса должно быть больше 0


Обновление информации в баннере
Вы можете обновить информацию в баннере прогресса распаковки следующей командой:
${CustomProgress::Update} "Новый текст в заголовке" "Новый текст в поле нового прогресса " "50"
Новый текст в заголовке
Текст, который будет отображаться в заголовке вашего баннера

Новый текст в поле нового прогресса
Параметр имеет силу только при подключении в проекте нового типа прогресса: текст, который отображается в поле над прогрессом

50
Значение шкалы прогресса
Примечание. Оставьте значение пустым, если не хотите обновлять значение шкалы прогресса.


Уничтожение баннера
После выполнения всех необходимых вам действий, вам нужно уничтожить ваш баннер данной командой:
${CustomProgress::Destroy}

Пример функций использования баннера

Пример №1
Создаём прогресс с общим количеством пунктов прогресса 100
Показываем кнопку скрытия баннера
Обычный стиль прогресса
Function ProgressExampleFunc1
${CustomProgress::Show} "Текст в заголовке" "Текст в поле нового прогресса" "100" "1" "0"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке [Выполнено 20%]" "Текст в поле нового прогресса" "20"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке [Выполнено 40%]" "Текст в поле нового прогресса" "40"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке [Выполнено 80%]" "Текст в поле нового прогресса" "80"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке [Выполнено 100%]" "Текст в поле нового прогресса" "100"
 Sleep 2000
${CustomProgress::Destroy}  
FunctionEnd

Пример №2
Создаём прогресс с общим количеством пунктов прогресса 1 (1 из-за использования циклического стиля прогресса)
Не показываем кнопку скрытия баннера
Циклический стиль прогресса
Function ProgressExampleFunc2
${CustomProgress::Show} "Текст в заголовке" "Текст в поле нового прогресса" "1" "0" "1"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке (обновлено 1 раз)" "Текст в поле нового прогресса" "0"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке (обновлено 2 раза)" "Текст в поле нового прогресса" "0"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке (обновлено 3 раза)" "Текст в поле нового прогресса" "0"
 Sleep 2000
${CustomProgress::Update} "Текст в заголовке (обновлено 4 раза)" "Текст в поле нового прогресса" "0"
 Sleep 2000
${CustomProgress::Destroy}
FunctionEnd

Вы также можете вызывать функцию обновления данных в баннере их своих NSIS функций в процессе распаковки файлов, для этого вам сначала необходимо настроить порядок выполнения команд
Общий список порядка выполнения команд можете посмотреть здесь

Например
В диалоге "Порядок выполнения команд" поднимите пункт "Функции NSIS" выше пункта "Распаковка файлов"
Затем, в коде вашей функции NSIS вы можете обновить информацию в баннере:
${CustomProgress::Update} "Новый текст в заголовке" "Новый текст в поле нового прогресса" ""
Если вы не хотите обновлять значение текстового поля в баннере, просто указывайте в команде пустое значение
${CustomProgress::Update} "" "Новый текст в поле нового прогресса" ""
Последний параметр, как вы помните - значение шкалы прогресса, оставьте пустым, чтобы не менять данное значение
Если вы обновляете шкалу прогресса перед распаковкой файлов, то в самой последней команде укажите значение шкалы прогресса 0, чтобы у баннера не было проблем с последующим корректным отображением прогресса распаковки файлов, т.к. прогресс после распаковки каждого файла плюсует предыдущее значение шкалы прогресса.

Пример использования, при котором ваша функция NSIS выполняется перед распаковкой файлов

Я приведу пример использования по отображению своей информации в баннере
Предположим, что нам необходимо выполнить какие-либо действия перед началом распаковки файлов и при этом, нам нужно показывать прогресс наших действий пользователю
${CustomProgress::Update} "Подготовка к установке..." "Пожалуйста, подождите..." "0"
;
; Ваши команды
;
${CustomProgress::Update} "Подготовка к установке..." "Ваша информация..." "30"
;
; Ваши команды
;
${CustomProgress::Update} "Подготовка к установке..." "Ваша информация..." "60"
;
; Ваши команды
;
${CustomProgress::Update} "Подготовка к установке..." "Ваша информация..." "80"
;
; Ваши команды
;
${CustomProgress::Update} "Подготовка к установке..." "Ваша информация..." "100"
;
; Ваши команды
;
${CustomProgress::Update} "Подготовка к установке завершена" "Очистка временных файлов..." "0"