» Dialogs: выбор файла/папки и не только

K.A.V.
www.oszone.net
22.02.2010
Автор: K.A.V.
Последнее обновление: 09.08.2012

На этой страничке мы рассмотрим работу плагина Dialogs
С помощью данного плагина вы можете:

Для начала не забываем скопировать из архива с плагином Include файл defines.nsh в папку NSIS\Include, либо в папку с вашим скриптом и прописать:
!include "defines.nsh"
В командах плагина используется чуть другой вид переменных
VAR_0 = $0
VAR_1 = $1
VAR_2 = $2
VAR_3 = $3
VAR_4 = $4
VAR_5 = $5
VAR_6 = $6
VAR_7 = $7
VAR_8 = $8
VAR_9 = $9
VAR_R0 = $R0
VAR_R1 = $R1
VAR_R2 = $R2
VAR_R3 = $R3
VAR_R4 = $R4
VAR_R5 = $R5
VAR_R6 = $R6
VAR_R7 = $R7
VAR_R8 = $R8
VAR_R9 = $R9


Диалог выбора папки

Dialogs::Folder "Заголовок окна выбора папки" "Выберите папку:" $DESKTOP ${VAR_0}
StrCmp $0 "" Cancel Ok

Cancel:
MessageBox MB_OK|MB_ICONSTOP "Нажали отмену :("
goto Exit

Ok:
MessageBox MB_OK|MB_ICONINFORMATION "Пользователь выбрал папку: $0"
goto Exit
Exit:
Обратите внимание на переменную $DESKTOP, за место неё вам необходимо подставить путь, который будет выбран и показан пользователю в дереве каталогов


Диалог выбора файла

Dialogs::Open \
"Приложение (*.exe)|*.exe|Архивы RAR и ZIP (*.rar;*.zip)|*.rar;*.zip|" \
"2" \
"Выберите файл" \
$DESKTOP \
${VAR_6}
StrCmp $6 "" Cancel Ok

Cancel:
MessageBox MB_OK|MB_ICONSTOP "Пользователь не выбрал файл :("
Goto Exit

Ok:
MessageBox MB_OK|MB_ICONINFORMATION "Пользователь выбрал файл: $6"
Goto Exit

Exit:
Думаю, указать фильтр выбора файлов не составит труда?
Указываем сначала текстовую строку, чтобы пользователю было понятно, какой тип файлов он выбирает для отображения
Приложение (*.exe)|*.exe
После, ставим символ вертикальной черты и прописываем уже маску файлов, которые отображать пользователю, можно писать несколько масок, например как с архивами далее:
Архивы RAR и ZIP (*.rar;*.zip)|*.rar;*.zip

Хочу обратить ваше внимание на символ вертикальной черты после указания масок всех файлов, он обязателен, без него появляется ещё один пункт с "маской", который отображается %2s примерно так :)

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


Диалог сохранения файла

Dialogs::Save \
"HTML файлы (*.htm*)|*.htm*|Изображения (*.gif;*.jp*;*.png)|*.gif;*.jp*;*.png|Все файлы (*.*)|*.*|" \
"2" \
"Сохранить файл" \
$EXEDIR \
${VAR_5}
StrCmp $5 "" Cancel Ok

Cancel:
MessageBox MB_OK|MB_ICONSTOP "Пользователь не выбрал файл :("
goto Exit

Ok:
MessageBox MB_OK|MB_ICONINFORMATION "Пользователь выбрал файл для сохранения: $5"
goto Exit

Exit:
Писать одно и тоже 2 раза не вижу смысла, описание такое же, как и выше про диалог Выбора файла


Диалог ввода текста

Dialogs::InputBox "Заголовок окна" "Введите ваш текст в поле ниже" "OK" "Отмена" "0" ${VAR_R2}
StrCmp $R2 "" Cancel Ok

Cancel:
MessageBox MB_OK|MB_ICONSTOP "Пользователь не ввёл текст :("
goto Exit

Ok:
MessageBox MB_OK|MB_ICONINFORMATION "Пользователь ввёл текст: $R2"
goto Exit

Exit:


Диалог ввода пароля

Loop:
Dialogs::InputBox "Заголовок окна" "Инсталлятор защищен паролем.$\r$\n$\r$\nВведите пароль:" "OK" "Отмена" "1" ${VAR_5}

;OSZone.net это пароль!
StrCmp $5 "OSZone.net" OK WRONG

WRONG:
Messagebox MB_YESNO|MB_ICONSTOP "Не верный пароль. $\r$\nХотите повторить ввод пароля?" IDYES Loop
goto Exit

OK:
Messagebox MB_OK|MB_ICONINFORMATION "Правильный пароль. $\r$\nНажмите ОК для запуска инсталлятора" idok okPassword

Exit:
Quit
okPassword: