Что нового

[Элементы GUI] Combobox и реакция на выбор пункта

Kolunt

Новичок
Сообщения
13
Репутация
0
Доброго времени суток!

Предисловие: в организации много принтеров и МФУ, у которых есть веб-морда. Надоело каждый раз при надобность искать имя принтера(МФУ), открывать браузер, вписыватть name.domain.ru чтобы попасть на их морду.

За основу взял некий код из примеров в справке, первый GUI на АИТе как никак :smile:
Получился вот такой код, в котором можно выбрать в ComboBox принтер/мфу (prn-XXXX) и он сразу перекинет тебя на нужную страничку(на его вебморду).

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



$oIE = ObjCreate("Shell.Explorer.2")

; Создание GUI
GUICreate("PRNochki v1.00", 1024, 768, (@DesktopWidth - 1024) / 2, (@DesktopHeight - 768) / 2, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 1000, 600)
$GUI_Button_Back = GUICtrlCreateButton("Назад", 10, 700, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Вперёд", 120, 700, 100, 30)
$CreateCombo = GUICtrlCreateCombo("Выберите МФУ", 300, 10, 250, 200)
GUICtrlSetData(-1, "prn-0001|prn-0002|prn-0003", "Выберите МФУ")
GUISetState() 

$oIE.navigate("http://corp.henderson.ru/_layouts/images/titlegraphic.gif")

; Опрос GUI
While 1
    $msg = GUIGetMsg()

    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $GUI_Button_Back
            $oIE.GoBack
        Case $msg = $GUI_Button_Forward
            $oIE.GoForward
	    Case $msg = $CreateCombo
            $oIE.navigate("http://" & GUICtrlRead($CreateCombo) & ".domain.ru")
		 EndSelect
WEnd

GUIDelete()


Достаточно удобно. Работает.
Но в задумке была идея добавить ещё и ComboBox с выбором отдела.
Т.е. выбираешь в одном ComboBox`е отдел, а он во втором делает тебе фильтрацию, показывая, какие МФУ там есть.

Добавил ComboBox в код:

Код:
$CreateCombo2 = GUICtrlCreateCombo("Выберите отдел", 20, 10, 250, 200)
GUICtrlSetData(-1, "Отдел развития|ИТ", "Выберите отдел")


И попытался добавить условие в петлю:

Код:
If $msg = $CreateCombo2 = GUICtrlRead($CreateCombo2) = "Отдел развития" Then
		 GUICtrlCreateCombo("Выберите МФУ", 300, 10, 250, 200)
         GUICtrlSetData(-1, "prn-0001", "Выберите МФУ")
		 EndIf
 If $msg = $CreateCombo2 = GUICtrlRead($CreateCombo2) = "ИТ" Then
		 GUICtrlCreateCombo("Выберите МФУ", 300, 10, 250, 200)
         GUICtrlSetData(-1, "prn-0002|prn-0003", "Выберите МФУ")
		 EndIf


Ну и в итоге GUI запускается, если не трогать отделы, то всё работает, но при выборе, например отдела развития, он всё равно показывает все МФУ и при этом постаянно что-то подгружает :smile:

Подскажите, что не так сделал? :stars:
Догадываюсь, что сильно не прав, но хотелось бы куда-нибудь подглядеть, чтобы понять в чём именно :smile:
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Так?
Код:
#AutoIt3Wrapper_Run_Tidy=y

Global $aComb1[3] = ['Отдел 1', 'Отдел 2', 'Отдел 3'], $aComb2[3] = ['МФУ 1', 'МФУ 2', 'МФУ 3']

GUICreate("Мой GUI", 220, 170)
$Combo1 = GUICtrlCreateCombo("", 10, 10, 200, 150)
For $i = 0 To UBound($aComb1) - 1
	GUICtrlSetData($Combo1, $aComb1[$i])
Next
$Combo2 = GUICtrlCreateCombo("", 10, 45, 200, 150)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case -3
			ExitLoop
		Case $Combo1
			If GUICtrlRead($Combo1) = 'Отдел 1' Then
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'МФУ 1')
			ElseIf GUICtrlRead($Combo1) = 'Отдел 2' Then
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'МФУ 2')
			ElseIf GUICtrlRead($Combo1) = 'Отдел 3' Then
				GUICtrlSetData($Combo2, '')
				GUICtrlSetData($Combo2, 'МФУ 3')
			EndIf
	EndSwitch
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Мой вариант с INI файлом:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $sFileName = @ScriptDir & '\printer.ini'

$oIE = ObjCreate("Shell.Explorer.2")

; Создание GUI
GUICreate("PRNochki v1.00", 1024, 768, (@DesktopWidth - 1024) / 2, (@DesktopHeight - 768) / 2, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 1000, 600)
$GUI_Button_Back = GUICtrlCreateButton("Назад", 10, 700, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("Вперёд", 120, 700, 100, 30)
$CreateCombo2 = GUICtrlCreateCombo("Выберите отдел", 20, 10, 250, 200)
GUICtrlSetData(-1, "Отдел развития|ИТ", "Выберите отдел")
$CreateCombo = GUICtrlCreateCombo('Выберите МФУ', 300, 10, 250, 200)

GUISetState() 

; Опрос GUI
While 1
    $iMsg = GUIGetMsg()

    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_Button_Back
            $oIE.GoBack
        Case $GUI_Button_Forward
            $oIE.GoForward
        Case $CreateCombo
			_GetNavigate(GUICtrlRead($CreateCombo2), GUICtrlRead($CreateCombo))
        Case $CreateCombo2
			_GetPrinter(GUICtrlRead($CreateCombo2))
	EndSwitch
WEnd

GUIDelete()

Func _GetPrinter($s_Div)
	
	Local $s_Tmp = ''
	$a_Data = IniReadSection($sFileName, $s_Div)
	If @error Then
		Return 0
	Else
		For $i = 1 To $a_Data[0][0]
			$s_Tmp &= $a_Data[$i][0] & '|'
		Next
	EndIf
	GUICtrlSetData($CreateCombo, '')
	GUICtrlSetData($CreateCombo, 'Выберите МФУ', 'Выберите МФУ')
	GUICtrlSetData($CreateCombo, StringTrimRight($s_Tmp, 1))
EndFunc;==>_GetPrinter

Func _GetNavigate($s_Div, $s_Printer)
	
	Local $s_Tmp = ''
	$s_Url = IniRead($sFileName, $s_Div, $s_Printer, "NotFound")
	If $s_Url == "NotFound" Or $s_Url == '' Then Return 0
	$oIE.navigate($s_Url)
	Return 1
EndFunc;==>_GetNavigate


printer.ini
INI:
[ИТ]
prn-0002=http://google.ru
prn-0003=http://autoit-script.ru
[Отдел развития]
prn-0001=http://yandex.ru
 
Автор
K

Kolunt

Новичок
Сообщения
13
Репутация
0
ivsatel, спасибо, сейчас буду разбираться с самим кодом, чтобы понимать как надо делат ьв следующий раз :smile:

Garrett, спасибо большое, правда с ini-файлом хотел сам повозиться :smile: Это была следующая цель, но тем не менее спасибо, тоже сейчас буду изучать код для понимания :beer:
 
Верх