» Droplist: выпадающий фиксированный список

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

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


Для создания взаимодействующего элемента:
NOTIFY=ONSELCHANGE

Создание элемента и добавление пунктов

Для создания элемента переходим в HM NIS Edit и создаём элемент Droplist


Для добавления/редактирования списка пунктов выделям наш элемент в HM NIS Edit, жмём кнопку на строке ListItems и добавляем пункты, каждый с новой строки



Выбранный пункт по-умолчанию при показе странички

Для установки конкретного пункта, выбранного по-умолчанию, необходимо присвоить параметру State имя пункта
Сделать это можно либо редактированием соответствующего пункта с именем State в Nis Edit (на скриншоте выше), либо записью значения непосредственно в самом скрипте NSIS
WriteINIStr "$PLUGINSDIR\Project.ini" "Field 1" "State" "Значение 3"


Чтение данных о выбранном пункте меню

Для определения текущего выбранного пункта необходимо прочитать значение параметра State
ReadINIStr $0 "$PLUGINSDIR\Project.ini" "Field 1" "State"


Сообщения Windows

Удаление всех пунктов в элементе

SendMessage $HWND ${CB_RESETCONTENT} 0 0
где $HWND - HWND элемента


Добавление пункта в элемент Droplist в режиме реального времени

SendMessage $HWND ${CB_ADDSTRING} 0 `STR:Имя добавляемого пункта`
где $HWND - HWND элемента


Установить выбор на пункт по порядковому номеру

SendMessage $HWND ${CB_SETCURSEL} 0 0
где $HWND - HWND элемента
где 0 - порядковый номер пункта, который необходимо сделать активным, отчет ведётся с 0
если за место порядкового номера указать значение -1, то никакой пункт не будет выбран (пустое значение выбранного пункта)


Получение порядкового номера выбранного пункта

SendMessage $HWND ${CB_GETCURSEL} 0 0 $1
где $HWND - HWND элемента
результат в $1 - порядковый номер выбранного пункта, отчет ведётся с 0


Получение количества пунктов в элементе

SendMessage $HWND ${CB_GETCOUNT} 0 0 $1
где $HWND - HWND элемента
результат в $1 - количество пунктов в элементе


Пример

Удаление всех пунктов в элементе, добавление 4 пунктов и установка 3 пункта активным (После инициализации или в режиме реального времени)
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"
  SendMessage $HWND ${CB_RESETCONTENT} 0 0
  SendMessage $HWND ${CB_ADDSTRING} 0 `STR:Добавляемый пункт 1`
  SendMessage $HWND ${CB_ADDSTRING} 0 `STR:Добавляемый пункт 2`
  SendMessage $HWND ${CB_ADDSTRING} 0 `STR:Добавляемый пункт 3`
  SendMessage $HWND ${CB_ADDSTRING} 0 `STR:Добавляемый пункт 4`
  SendMessage $HWND ${CB_SETCURSEL} 2 0

        InstallOptionsEx::show
FunctionEnd