» ProgressBar: шкала прогресса

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

Т.к. данный тип элемента не поддерживается NIS Edit -  нам необходимо вручную прописать тип элемента в настройки с секцией элемента
Для этого создаём любой элемент, доступный в NIS Edit, для наглядности лучше создать элемент "ListBox", подгоните размеры элемента и читайте дальше :)
Затем переходим в режим редактирования (F12), ищем порядковый номер нашего созданного элемента и меняем значение параметра Type на ProgressBar
[Field 1]
Type=ProgressBar

Данный элемент не может быть взаимодействующим


Флаги элемента

Значение параметра Flags может содержать следующие значения (возможно комбинировать, разделяя вертикальной чертой)
VSCROLL - вертикальный стиль прогресса (прогресс будет "ползти" снизу вверх)


Дополнительные параметры элемента

В секции с настройкой элемента могут быть использованы следующие параметры:
MaxLen - максимальное количество пунктов прогресса. Максимальное значение 65535, значение по-умолчанию 100

State - начальное значение прогресса при показе странички пользователю, а так же значение прогресса в момент работы вашей странички


MARQUEE стиль прогресса

При данном стиле пользователь не будет видеть "заполняющейся" полоски прогресса, за место этого пользователь будет видеть постоянно бегающую небольшую полоску прогресса от начала в конец

Для придания такого стиля нашему прогрессу, нам необходимо после инициализации выполнить пару команд:
${NSD_AddStyle} $HWND 0x08
SendMessage $HWND ${PBM_SETMARQUEE} 1 0
где $HWND - HWND элемента

Пример функции инициализации
Function MyDialog

  InitPluginsDir
  File /oname=$PLUGINSDIR\Project.ini "Project.ini"

        InstallOptionsEx::initDialog /NOUNLOAD "$PLUGINSDIR\Project.ini"

  Var /global HWND
  ReadINIStr $HWND "$PLUGINSDIR\Project.ini" "Field 1" "HWND"

 ${NSD_AddStyle} $HWND 0x08
 SendMessage $HWND ${PBM_SETMARQUEE} 1 0

        InstallOptionsEx::show
FunctionEnd


Как назначить позицию прогресса?

Да легко! Сообщение Windows нам в помощь ;)
SendMessage $HWND ${PBM_SETPOS} "90" ""
где $HWND - HWND элемента
где 90 - позиция прогресса


Как получить текущее значение прогресса

1. Необходимо прочитать значение параметра State
ReadINIStr $0 "$PLUGINSDIR\Project.ini" "Field 1" "State"

2. Можно использовать сообщение Windows
SendMessage $HWND ${PBM_GETPOS} "" "" $0
где $HWND - HWND элемента
результат в $0 - позиция прогресса


Пример кода

Давайте-ка я вам дам простой пример с тремя кнопками на страничке и одним прогрессом.
На страничке будет 3 кнопки:
1. Запустит заполнение прогресса и каждую секунду прогресс будет прирастать до 10 пунктов
2. Вторая кнопка сделает наоборот ;)
3. Третяя "на лету" поменяет стиль прогресса с обычного на MARQUEE стиль

INI файл Показать »
; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=4

[Field 1]
Type=ProgressBar
Left=1
Right=238
Top=1
Bottom=17
MaxLen=10
Text=ProgressBar

[Field 2]
Type=Button
Text=Заполнить
Left=1
Right=66
Top=20
Bottom=32
NOTIFY=ONCLICK

[Field 3]
Type=Button
Text=Отсчет назад
Left=68
Right=152
Top=20
Bottom=32
NOTIFY=ONCLICK

[Field 4]
Type=Button
Text=MARQUEE
Left=177
Right=238
Top=20
Bottom=32
NOTIFY=ONCLICK


NSIS код Показать »
Function MyDialog

  InitPluginsDir
  File /oname=$PLUGINSDIR\Project.ini "Project.ini"

        InstallOptionsEx::initDialog /NOUNLOAD "$PLUGINSDIR\Project.ini"

  Var /global HWND
  ReadINIStr $HWND "$PLUGINSDIR\Project.ini" "Field 1" "HWND"

        InstallOptionsEx::show
FunctionEnd


Function MyDialog_Leave
  ReadINIStr $0 "$PLUGINSDIR\Project.ini" "Settings" "State"

  StrCmp $0 0 Button_NEXT_Clicked
  StrCmp $0 2 Button_Plus
  StrCmp $0 3 Button_Minus
  StrCmp $0 4 Button_MARQUEE

  abort ; прекращаем проверку, т.к. взаимодействующих элементов в нашей странички больше нет

Button_Plus:
SendMessage $HWND ${PBM_SETPOS} "0" ""
 StrCpy $1 0
 IntOp $1 $1 + 1
 StrCmp $1 "11" 0 +2
Abort
 Sleep 1000
 SendMessage $HWND ${PBM_SETPOS} "$1" ""
 goto -5

Button_Minus:
SendMessage $HWND ${PBM_SETPOS} "10" ""
 StrCpy $1 10
 IntOp $1 $1 - 1
 StrCmp $1 "-1" 0 +2
Abort
 Sleep 1000
 SendMessage $HWND ${PBM_SETPOS} "$1" ""
 goto -5
 
Button_MARQUEE:
 ${NSD_AddStyle} $HWND 0x08
 SendMessage $HWND ${PBM_SETMARQUEE} 1 0
abort

Button_NEXT_Clicked:
FunctionEnd