Что нового

combo. значение и переменная

Шурик

Новичок
Сообщения
17
Репутация
1
добрый вечер форумчане.
стараюсь и пытаюсь свои познания немного разнообразить. подскажите как вывести значение из combo в переменную? составил небольшой пример, а в голове не укладывается ничего. по поиску "combo переменная" для меня оказался тёмный лес.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 373, 171, 192, 114)
$Combo1 = GUICtrlCreateCombo("1 ячейка", 40, 32, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "2 ячейка|3 ячейка")
$Combo2 = GUICtrlCreateCombo("Combo2", 200, 32, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $iTimeout = 10

; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = (1) ; название из combo1
$2 = (2) ; название из combo2
$3 = (3) ; присвоенное значение

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			Case $Button1
                  start()
				  Sleep(30)

	EndSwitch
WEnd

 Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	 MsgBox (8192+64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
 EndFunc
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
как вывести значение из combo в переменную?
Код:
$1 = GUICtrlRead($Combo1)

Так нужно ?
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 373, 171, 192, 114)
$Combo1 = GUICtrlCreateCombo("белый", 40, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "чёрный|синий")
$Combo2 = GUICtrlCreateCombo("сухой", 200, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "мокрый|холодный")
$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $iTimeout = 10

; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = '' ; название из combo1
$2 = '' ; название из combo2
$3 = '' ; присвоенное значение

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			start()
			Sleep(30)

	EndSwitch
WEnd

Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	$1 = GUICtrlRead($Combo1)
	$2 = GUICtrlRead($Combo2)
	MsgBox(8192 + 64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
EndFunc   ;==>start
 
Автор
Ш

Шурик

Новичок
Сообщения
17
Репутация
1
ra4o сказал(а):
как вывести значение из combo в переменную?
Код:
$1 = GUICtrlRead($Combo1)

Так нужно ?
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 373, 171, 192, 114)
$Combo1 = GUICtrlCreateCombo("белый", 40, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "чёрный|синий")
$Combo2 = GUICtrlCreateCombo("сухой", 200, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "мокрый|холодный")
$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $iTimeout = 10

; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = '' ; название из combo1
$2 = '' ; название из combo2
$3 = '' ; присвоенное значение

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			start()
			Sleep(30)

	EndSwitch
WEnd

Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	$1 = GUICtrlRead($Combo1)
	$2 = GUICtrlRead($Combo2)
	MsgBox(8192 + 64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
EndFunc   ;==>start
спасибо за решение, но не совсем то.
я имел ввиду чтоб от combo1 изменялись данные в combo2.
переменные такие :
$1 = '' ; вариант переменной (1 ячейка ; 2 ячейка ; 3 ячейка)
$2 = '' ; вариант переменной (белый ; черный ; синий ; сухой ; мокрый ; холодный ; один ; два ; три)
$3 = '' ; вариант переменной (111 ; 222 ; 333 ; 444 ; 555 ; 666 ; 777 ; 888 ; 999)
а сам ответ выглядел так :
ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
т.е. если в combo1 стоит значение (1 ячейка) то в combo2 появилось 3 варианта (белый, черный, синий).
если в combo1 стоит значение (2 ячейка) то в combo2 появилось 3 варианта (сухой, мокрый, холодный)
если в combo1 стоит значение (3 ячейка) то в combo2 появилось 3 варианта (один, два, три).
и третьей переменной $3 было присвоенно соответствующее значение :
; белый = 111 черный = 222 синий = 333
; сухой = 444 мокрый = 555 холодный = 666
; один = 777 два = 888 три = 999
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Может и с извращениями, но можно так :
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 373, 171, 192, 114)
$Combo1 = GUICtrlCreateCombo("1 ячейка", 40, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "2 ячейка|3 ячейка")
$Combo2 = GUICtrlCreateCombo("белый", 200, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData($Combo2, 'черный|синий')
Local $OldTextCombo = '1 ячейка'
$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $iTimeout = 10


; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = '' ; название из combo1
$2 = '' ; название из combo2
$3 = '' ; присвоенное значение

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			start()
			Sleep(30)

	EndSwitch
;Менять значения в $Combo2 в случае, если значение в $Combo1 изменилось
	$TextCombo1 = GUICtrlRead($Combo1)
	If $TextCombo1 <> $OldTextCombo Then
		$OldTextCombo = $TextCombo1
		Switch $TextCombo1
			Case '1 ячейка'
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'белый|черный|синий', 'белый')
			Case '2 ячейка'
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'сухой|мокрый|холодный', 'сухой')
			Case '3 ячейка'
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'один|два|три', 'один')

		EndSwitch
	EndIf

WEnd

Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	$1 = GUICtrlRead($Combo1)
	$2 = GUICtrlRead($Combo2)

	Switch $2
		Case 'белый'
			$3 = '111'
		Case 'черный'
			$3 = '222'
		Case 'синий'
			$3 = '333'
		Case 'сухой'
			$3 = '444'
		Case 'мокрый'
			$3 = '555'
		Case 'холодный'
			$3 = '666'
		Case 'один'
			$3 = '777'
		Case 'два'
			$3 = '888'
		Case 'три'
			$3 = '999'

	EndSwitch

	MsgBox(8192 + 64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
EndFunc   ;==>start
 
Автор
Ш

Шурик

Новичок
Сообщения
17
Репутация
1
ra4o сказал(а):
Может и с извращениями, но можно так :
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 373, 171, 192, 114)
$Combo1 = GUICtrlCreateCombo("1 ячейка", 40, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "2 ячейка|3 ячейка")
$Combo2 = GUICtrlCreateCombo("белый", 200, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData($Combo2, 'черный|синий')
Local $OldTextCombo = '1 ячейка'
$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $iTimeout = 10


; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = '' ; название из combo1
$2 = '' ; название из combo2
$3 = '' ; присвоенное значение

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			start()
			Sleep(30)

	EndSwitch
;Менять значения в $Combo2 в случае, если значение в $Combo1 изменилось
	$TextCombo1 = GUICtrlRead($Combo1)
	If $TextCombo1 <> $OldTextCombo Then
		$OldTextCombo = $TextCombo1
		Switch $TextCombo1
			Case '1 ячейка'
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'белый|черный|синий', 'белый')
			Case '2 ячейка'
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'сухой|мокрый|холодный', 'сухой')
			Case '3 ячейка'
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'один|два|три', 'один')

		EndSwitch
	EndIf

WEnd

Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	$1 = GUICtrlRead($Combo1)
	$2 = GUICtrlRead($Combo2)

	Switch $2
		Case 'белый'
			$3 = '111'
		Case 'черный'
			$3 = '222'
		Case 'синий'
			$3 = '333'
		Case 'сухой'
			$3 = '444'
		Case 'мокрый'
			$3 = '555'
		Case 'холодный'
			$3 = '666'
		Case 'один'
			$3 = '777'
		Case 'два'
			$3 = '888'
		Case 'три'
			$3 = '999'

	EndSwitch

	MsgBox(8192 + 64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
EndFunc   ;==>start
оперативно. класс. спасибо.
а если значений ($2 и $3) будет примерно 100 то как их через массив прикрутить чтоб не делать длинный код?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Через массивы можно так :
Код:
#include <GuiConstants.au3>
#include <GuiComboBox.au3>

Local $aCombo1[] = ['1 Ячейка', '2 Ячейка', '3 Ячейка']
Local $aCombo2[] = ['белый,черный,синий', 'сухой,мокрый,холодный', 'один,два,три']
Local $iTimeout = 10

$Form1 = GUICreate("Form1", 373, 171, 192, 114) 

$Combo1 = GUICtrlCreateCombo("", 40, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
For $i = 0 To UBound($aCombo1) - 1
	_GUICtrlComboBox_AddString($Combo1, $aCombo1[$i])
Next

$Combo2 = GUICtrlCreateCombo("", 200, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))

$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)

GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = '' ; название из combo1
$2 = '' ; название из combo2
$3 = '' ; присвоенное значение


While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			start()
			Sleep(30)
	EndSwitch
WEnd

Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	$1 = GUICtrlRead($Combo1)
	$2 = GUICtrlRead($Combo2)
	MsgBox(8192 + 64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
EndFunc   ;==>start


Func _Combo_Changed($Index)
	GUICtrlSetData($Combo2, '')
	$Combo2Text = $aCombo2[$Index]
	$Combo2Item = StringSplit($Combo2Text, ',')
	For $i = 1 To $Combo2Item[0]
		_GUICtrlComboBox_AddString($Combo2, $Combo2Item[$i])
	Next
	_GUICtrlComboBox_SetCurSel($Combo2, 0)
EndFunc   ;==>_Combo_Changed

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
	Local $nNotifyCode = BitShift($wParam, 16)
	Local $nID = BitAND($wParam, 0xFFFF)
	Local $hCtrl = $lParam

	Switch $nID
		Case $Combo1
			Switch $nNotifyCode

				Case $CBN_SELCHANGE
					_Combo_Changed(_GUICtrlComboBox_GetCurSel($Combo1))
			EndSwitch
	EndSwitch

	Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND
Только не прикручивал вычисление "$3", так как вариантов в каком виде представлено соответствие "белый = 111 черный = 222 синий = 333" итд масса.
Выложите пример своих массивов, так, как Вы это видите и тогда можно будет написать под Ваш случай.
 
Автор
Ш

Шурик

Новичок
Сообщения
17
Репутация
1
ra4o сказал(а):
Через массивы можно так :
Код:
#include <GuiConstants.au3>
#include <GuiComboBox.au3>

Local $aCombo1[] = ['1 Ячейка', '2 Ячейка', '3 Ячейка']
Local $aCombo2[] = ['белый,черный,синий', 'сухой,мокрый,холодный', 'один,два,три']
Local $iTimeout = 10

$Form1 = GUICreate("Form1", 373, 171, 192, 114) 

$Combo1 = GUICtrlCreateCombo("", 40, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
For $i = 0 To UBound($aCombo1) - 1
	_GUICtrlComboBox_AddString($Combo1, $aCombo1[$i])
Next

$Combo2 = GUICtrlCreateCombo("", 200, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))

$Label1 = GUICtrlCreateLabel("значения в комбо2", 48, 56, 101, 17)
$Label2 = GUICtrlCreateLabel("1 ячейка - белый , чёрный , синий", 16, 72, 174, 17)
$Label3 = GUICtrlCreateLabel("2 ячейка - сухой , мокрый , холодный", 16, 88, 192, 17)
$Label4 = GUICtrlCreateLabel("3 ячейка - один , два , три", 16, 104, 134, 17)
$Button1 = GUICtrlCreateButton("показать", 16, 136, 75, 25)

GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
; белый = 111   черный = 222   синий = 333
; сухой = 444   мокрый = 555   холодный = 666
; один = 777   два = 888   три = 999

$1 = '' ; название из combo1
$2 = '' ; название из combo2
$3 = '' ; присвоенное значение


While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			start()
			Sleep(30)
	EndSwitch
WEnd

Func start() ; ответ примерно такой - " 1 комбо=2 ячейка , 2 комбо=мокрый , значение=555, конец "
	$1 = GUICtrlRead($Combo1)
	$2 = GUICtrlRead($Combo2)
	MsgBox(8192 + 64, "заголовок", "1 комбо=" & $1 & " , 2 комбо=" & $2 & " , значение=" & $3 & ", конец", $iTimeout)
EndFunc   ;==>start


Func _Combo_Changed($Index)
	GUICtrlSetData($Combo2, '')
	$Combo2Text = $aCombo2[$Index]
	$Combo2Item = StringSplit($Combo2Text, ',')
	For $i = 1 To $Combo2Item[0]
		_GUICtrlComboBox_AddString($Combo2, $Combo2Item[$i])
	Next
	_GUICtrlComboBox_SetCurSel($Combo2, 0)
EndFunc   ;==>_Combo_Changed

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
	Local $nNotifyCode = BitShift($wParam, 16)
	Local $nID = BitAND($wParam, 0xFFFF)
	Local $hCtrl = $lParam

	Switch $nID
		Case $Combo1
			Switch $nNotifyCode

				Case $CBN_SELCHANGE
					_Combo_Changed(_GUICtrlComboBox_GetCurSel($Combo1))
			EndSwitch
	EndSwitch

	Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND
Только не прикручивал вычисление "$3", так как вариантов в каком виде представлено соответствие "белый = 111 черный = 222 синий = 333" итд масса.
Выложите пример своих массивов, так, как Вы это видите и тогда можно будет написать под Ваш случай.
как такового примера нет. была мысль когда мелкая кричит дома что инет тупит и играть невозможно, вот и решил ей мини бот сделать чтоб не кричала.
смысл был такой (уже отказался)
выбрать категорию деревья, кустарники или цветы - это переменная ($1)
далее там выбрать какие цветы - переменная ($2)
а в сам запрос отправляется числовое значение каждого вида - переменная ($3)
только там тыкать надо по одному зернышку, вот и появилась мысль.
но всё равно спасибо что натолкнули на правильное решение вопроса.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Рад был помочь, в Вашем случае переменные $2 и $3 проще всего связать ini файлом, где ключу $2 соответствует значение $3, тогда и скрипт будет работать, как Вам нужно, дописав всего одну строку с
Код:
$3=IniRead($FileIni,"SomeSection",$2)
; где $FileIni путь к Ini файлу, "SomeSection"- любое название секции
.
 
Верх