Что нового

[Элементы GUI] Элемент выбора диапазона или отдельно взятых значений

forbrock

Новичок
Сообщения
43
Репутация
0
Для выбора отдельного одного значения из выпадающего списка использовал GUICtrlCreateCombo().
Не знаю как сделать выбор диапазона значений и выбор отдельно взятых нескольких значений. Значения от 01 до 23.
Выбранные данные далее будут использоваться в скрипте по отдельности.
Использовать checkbox не охота, сильно громоздкое окошко получится для значений 01-23, да и смотреться не будет.


Добавлено:
Сообщение автоматически объединено:

Код:
Heeeeeeeeeeeelp!!!
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
А как Вы видите себе этот выбор? Визуально.
Попробуйте нарисовать хотя бы в "paint" и приложить сюда.
Сообщество быстрее поймет, чего именно Вы хотите.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
forbrock
А почему не использовать 2 GUICtrlCreateCombo()?
1 - начало диапазона
2 - конец диапазона
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
forbrock [?]
выбор диапазона значений и выбор отдельно взятых нескольких значений
Код:
GUICtrlCreateListView()

С шифтом - диапазон, с контролом - несколько отдельных. Можно "галочки" прикрутить.
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
Воот! InnI, возможно это то что мне нужно, сейчас буду тестировать. Сразу спрошу, а как работать с выбранными значениями? Мне нужно будет подставить их в массив из которого это значение будет браться и обрабатываться.
Во вложении скрин созданного окна с элементами выбора. Для диапазона значений пока не реализовал - отключил.
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
Нет, скорее всего создаваемый элемент
Код:
GUICtrlCreateListView()
мне не подойдет.
Можно ли сделать чтобы из выпадающего списка
Код:
GUICtrlCreateCombo()
можно было выбирать с нажатием ctrl отдельные значения, а с нажатием shift - диапазон этих самых значений?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
А если так попробовать:

Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Global $aValues[1]

$hGUI = GUICreate("Test Script", 400, 300)

$iRange_CB = GUICtrlCreateCheckbox("Диапазон", 20, 40)

$iValue_Input = GUICtrlCreateInput('0', 20, 70, 40, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
$iValue_UD = GUICtrlCreateUpdown($iValue_Input)
GUICtrlSetLimit($iValue_UD, 23, 0)

GUICtrlCreateLabel('-', 70, 72)

$iRange_Input = GUICtrlCreateInput('0', 80, 70, 40, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
$iRange_UD = GUICtrlCreateUpdown($iRange_Input)
GUICtrlSetLimit($iRange_UD, 23, 0)
GUICtrlSetState($iRange_UD, $GUI_DISABLE)
GUICtrlSetState($iRange_Input, $GUI_DISABLE)

GUICtrlCreateLabel('-->', 140, 72)

$iAddValue_Bttn = GUICtrlCreateButton('Добавить', 170, 70, 80, 20)
$iValues_List = GUICtrlCreateList('', 20, 100, 360, 170, BitOR($WS_BORDER, $WS_VSCROLL))
$iGetValues_Bttn = GUICtrlCreateButton('Показать значения', 20, 270, 120, 20)

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $iRange_CB
			If GUICtrlRead($iRange_CB) = $GUI_CHECKED Then
				GUICtrlSetState($iRange_Input, $GUI_ENABLE)
				GUICtrlSetState($iRange_UD, $GUI_ENABLE)
			Else
				GUICtrlSetState($iRange_Input, $GUI_DISABLE)
				GUICtrlSetState($iRange_UD, $GUI_DISABLE)
			EndIf
		Case $iAddValue_Bttn
			$sVal = GUICtrlRead($iValue_Input)
			
			If GUICtrlRead($iRange_CB) = $GUI_CHECKED Then
				$sVal &= '-' & GUICtrlRead($iRange_Input)
			EndIf
			
			If GUICtrlSetData($iValues_List, $sVal) Then
				_ArrayAdd($aValues, $sVal)
				$aValues[0] += 1
			EndIf
		Case $iGetValues_Bttn
			_ArrayDisplay($aValues) 
	EndSwitch
WEnd
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
В общем то достойный аналог желаемому мной функционалу. Спасибо, буду приспосабливать его к моему скрипту.
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
forbrock [?]
аналог желаемому функционалу
Код:
#include <GUIListBox.au3>

$GUI = GUICreate("", 140, 250)
$List = GUICtrlCreateList("", 5, 5, 130, 200, BitOR($LBS_MULTIPLESEL, $GUI_SS_DEFAULT_LIST))
For $i = 6501 To 6523
  GUICtrlSetData($List, $i)
Next
$All = GUICtrlCreateCheckbox("Выбрать все", 5, 200, 130, 20)
$Btn = GUICtrlCreateButton("Значения", 5, 220, 130, 25)

GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $All
      If BitAND(GUICtrlRead($All), $GUI_CHECKED) Then
        _GUICtrlListBox_SelItemRange($List, 0, _GUICtrlListBox_GetCount($List) - 1, True)
      Else
        _GUICtrlListBox_SelItemRange($List, 0, _GUICtrlListBox_GetCount($List) - 1, False)
      EndIf
    Case $Btn
      $str = ""
      $Items = _GUICtrlListBox_GetSelItemsText(ControlGetHandle($GUI, "", $List))
      If $Items[0] = 0 Then
        MsgBox(0, "Значения", "Ничего не выбрано")
      Else
        For $i = 1 To $Items[0]
          $str &= $Items[$i] & @CRLF
        Next
        MsgBox(0, "Значения", $str)
      EndIf
    Case $List
      GUICtrlSetState($All, $GUI_UNCHECKED)
  EndSwitch
Until 0
 
Верх