Что нового

Вывести Radio или Combo с списком значений из реестра в GUI для выбора пользоват

Hardoman

Новичок
Сообщения
14
Репутация
0
Изучаю систему только 3-й день.
Задача: получить из реестра список имен ключей в определенной ветке, вывести их пользователю для выбора в виде Radio или Combo и после того, как он выберет одно из значений, двигаться дальше (временно MsgBox)

Я решил так:
Код:
#include <GuiConstants.au3>
Dim $msg, $n = "item", $s, $x = 10, $y = 0, $j=1
Dim $array[20]
GUICreate("Printers")
For $i= 1 to 20
    $array[$j] = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3", $i)
	$var = GUICtrlCreateRadio($array[$j], $x, $y)
	$j += 1
	If @error <> 0 then ExitLoop
	$y += 20
Next

GUISetState ()

; Run the GUI until the dialog is closed

Do
    $msg = GUIGetMsg()
	For $i= 1 to 20
    if $msg = $var then
        msgbox(0,"printer", "printer: " & GUICtrlRead($msg)) ; display the value
    endif
	If @error <> 0 then ExitLoop
	Next
Until $msg = $GUI_EVENT_CLOSE


Явно есть ошибки, выдает ...\my scripts\regkey.au3 (7) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$array[$j] = GUICtrlCreateRadio($var, $x, $y)
^ ERROR

Я раздумывал так: все значения controlid положить в массив и затем сравнивая $msg (как я понимаю, в ней хранится controlid выбранного айтема) со всеми значением ячеек массива по очереди и вывод соотвествующего id.

Подскажите, плиз, как правильно сделать!?
P.S. я не прогер, а сисадмин, жизнь заставила писать :smile:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
(подробнее), а обычный код соответственно в тег [code]
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Администратор.
 
Автор
H

Hardoman

Новичок
Сообщения
14
Репутация
0
Поправил, извините, пожалуйста!
 

sngr

AutoIT Гуру
Сообщения
983
Репутация
392
Код:
#include 'array.au3'
Global Const $GUI_EVENT_CLOSE = -3
Dim $arr[1]
For $i = 1 to 100
	_ArrayAdd($arr,RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3", $i))
	If @error Then ExitLoop
Next
$arr1=_ArrayFindAll($arr,'')
For $i=0 To UBound($arr1)-1
    _ArrayDelete($arr,$arr1[$i])
Next
;~ _ArrayDisplay($arr)
$Gui=GUICreate('',200,200)
$com=GUICtrlCreateCombo('',10,10)
For $i=0 To UBound($arr)-1
GUICtrlSetData(-1,$arr[$i],'')
Next
GUISetState()
Do
    $msg = GUIGetMsg()

    if $msg = $com then
        msgbox(0,"printer", "printer: " & GUICtrlRead($msg)) ; display the value
    endif
    If @error <> 0 then ExitLoop
Until $msg = $GUI_EVENT_CLOSE
как-то так
 
Автор
H

Hardoman

Новичок
Сообщения
14
Репутация
0
Спасибо большое, сейчас буду штудировать код!
 
Автор
H

Hardoman

Новичок
Сообщения
14
Репутация
0
Подскажите, плиз,
- в чем ошибка систаксиса $array[$i] = $var в случае использования в цикле, так нельзя присваивать?
- почему в приведеннмо коде Global Const $GUI_EVENT_CLOSE = -3 ?
 

sngr

AutoIT Гуру
Сообщения
983
Репутация
392
Прежде чем писать что-либо, почитайте справку. Там наличиствует множество примеров, поясняющих как надо писать, а как не стоит. После этого отпадёт большинство вопросов.
 
Автор
H

Hardoman

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