Что нового

Создание контролов в массиве

eus_deus

Новичок
Сообщения
118
Репутация
0
Привет!
В теме http://autoit-script.ru/index.php/topic,16107.msg99568/topicseen.html#new посоветовали создавать двухмерный массив при создании контролов и вписывать все туда - размеры, идентификаторы, положение, текст... А я вот и с одномерными не дружу - пока обходил их. Мжно на примере - как это будет выглядеть?
Код:
$vLabel8 = GUICtrlCreateLabel("", 12, 260, 580, 18, $SS_CENTER)
GUICtrlSetFont(-1, 10, 500, 2, $Font_name)
$vInput1 = GUICtrlCreateInput("", 140, 85, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput2 = GUICtrlCreateInput("", 140, 109, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput3 = GUICtrlCreateInput("", 140, 133, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput4 = GUICtrlCreateInput("", 140, 157, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput5 = GUICtrlCreateInput("", 140, 181, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput6 = GUICtrlCreateInput("", 140, 205, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput7 = GUICtrlCreateInput("", 140, 229, 80, 22,$ES_READONLY)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vInput8 = GUICtrlCreateInput("", 28, 30, 145, 22)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
$vButton1 = GUICtrlCreateButton($Scined[9], 232, 85, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[10])
$vButton2 = GUICtrlCreateButton($Scined[9], 232, 109, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[11])
$vButton3 = GUICtrlCreateButton($Scined[9], 232, 133, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[12])
$vButton4 = GUICtrlCreateButton($Scined[9], 232, 157, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[13])
$vButton5 = GUICtrlCreateButton($Scined[9], 232, 181, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[14])
$vButton6 = GUICtrlCreateButton($Scined[9], 232, 205, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[15])
$vButton7 = GUICtrlCreateButton($Scined[9], 232, 229, 65, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[16])
$vButton8 = GUICtrlCreateButton($Scined[17], 232, 54, 65, 20)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[18])
$vButton9 = GUICtrlCreateButton($Scined[19], 176, 30, 57, 20)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[20])
$vButton11 = GUICtrlCreateButton($Scined[23], 232, 30,65, 20)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[24])
$vButton12 = GUICtrlCreateButton($Scined[25], 298, 54, 72, 20)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[26])
$vButton13 = GUICtrlCreateButton("", 298, 85, 20, 20, $BS_ICON)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetImage(-1, $sLib,4, 0)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[27])
$vButton14 = GUICtrlCreateButton("", 298, 109, 20, 20, $BS_ICON)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetImage(-1, $sLib,4, 0)
GUICtrlSetFont(-1, 8, 400, 0, $Font_name)
GUICtrlSetTip(-1, $Scined[28])
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
eus_deus [?]
на примере - как это будет выглядеть
Одномерный массив input'ов
Код:
; Массив элементов ($vInput[0] содержит количество элементов)
Global $vInput[9] = [8]
; Создаём элементы с общими свойствами
For $i = 1 To $vInput[0]
  $vInput[$i] = GUICtrlCreateInput("", 140, 61 + 24 * $i, 80, 22, $ES_READONLY)
  GUICtrlSetFont($vInput[$i], 8, 400, 0, $Font_name)
Next
; Устанавливаем специальные параметры отдельным элементам
GUICtrlSetPos($vInput[8], 28, 30, 145, 22)
GUICtrlSetStyle($vInput[8], $GUI_SS_DEFAULT_INPUT)

Для переделки кода вместо $vInput3 пишете $vInput[3], т.е. просто добавляете скобки.

А установка значений будет выглядеть так
Код:
For $i = 1 To $vInput[0]
  GUICtrlSetData($vInput[$i], "")
  GUICtrlSetBkColor ($vInput[$i], 0xF0F0F0)
Next
 

erlik

Продвинутый
Сообщения
317
Репутация
84
eus_deus
Приведу пример двумерного массива с данными контролов из собственного кода:

Код:
; для сохдания лейблов элементов ввода
Global $aInputsData[6][6]=[ _
["Название раздела реестра",             $LV_Width+50, $LV_Y+25,  200,0,'Укажите здесь произвольное имя ключа реестра для вашего пункта.'], _
["Подпункты\Subcommands",                $LV_Width+50, $LV_Y+75,  200,0,'Укажите здесь произвольное имя ключа реестра для вашего подпункта.'], _
["Название пункта\CLSID",                $LV_Width+50, $LV_Y+125, 200,0,'Укажите здесь отображаемое имя для вашего пункта.'], _
["Иконка для пункта меню",               $LV_Width+50, $LV_Y+175, 180,0,'Укажите здесь иконку для вашего пункта.'], _
["Позиция",                              $LV_Width+150,$LV_Y+215, 100,0,'Укажите здесь позицию для вашего пункта.'], _
["Команда\DelegateExecute",              $LV_Width+50 ,$LV_Y+265, 180,0,'Укажите здесь команду для вашего пункта.'] _
]

Как видишь -одно из полей $aInputsData[n] [4] второго уровня не заполнено - в него я пишу идентификаторы элементов, которые создаются в цикле проходом по данному массиву.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
erlik,
А Вам в дальнейшем нужны данные из этого массива, кроме ID элементов?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Только у меня на pastebin.com вместо кода вот это безобразие?
sshot-5.png
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
madmasles
Наверно. У меня работает. Если что вот что там:
Код:
; Пример показывает, что не обязательно использовать цикл проверки событий для однотипных элементов. Достаточно указать диапазон в конструкции Switch
; The example shows that it isn't obligatory to use separate events in a loop for the same elements. Sufficient to indicate the range in design Switch

$hGui = GUICreate('My Program', 450, 400)
GUICtrlCreateGroup("", 88, 20, 233, 273)
	
$iCount = 30 ; Количество пунктов		(The number of items)
$iRows = 10 ; Количество строк		(The number of rows)
Global $BoxConfig[$iCount + 1] = [$iCount], $a[10] = [0, 0, $iRows, 96, 36, 26, 70, -1, 1]
; a[0] - X-координата элемента		(The X-coordinate of the element)
; a[1] - Y-координата элемента		(The Y-coordinate of the element)
; a[2] - Количество строк в блоке		(The number of rows in the block)
; a[3] - X-координата блока		(The X-coordinate of the box)
; a[4] - Y-координата блока		(The Y-coordinate of the box)
; a[5] - Вертикальный шаг в блоке		(Vertical step in block)
; a[6] - Горизонтальный шаг в блоке		(Horizontal step in block)
; a[7] - Индекс текущей колонки		(The index of the current column)
; a[8] - Индекс пункта следующей колонки		(Index of item of the next column)
For $i = 1 To $iCount
	_NextItem($a, $i)
	$BoxConfig[$i] = GUICtrlCreateRadio("Check " & $i, $a[0], $a[1], 62, 17)
Next
$a = 0
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $BoxConfig[1] To $BoxConfig[$BoxConfig[0]]
			$j = $nMsg - $BoxConfig[1] + 1
			MsgBox(0, 'Check', $j, 0, $hGui)
		Case -3
			Exit
	EndSwitch
WEnd

Func _NextItem(ByRef $a, $i)
	If $i = $a[8] Then
		$a[8] += $a[2]
		$a[7] += 1
	EndIf
	$a[0] = $a[7] * $a[6] + $a[3] ; X
	$a[1] = $a[4] + Mod($i - 1, $a[2]) * $a[5] ; Y
EndFunc   ;==>_NextItem

; Func _NextItem2(ByRef $a, $i)
	; $a[0] = (Ceiling($i / $a[2]) - 1) * $a[6] + $a[3] ; X
	; $a[1] = $a[4] + Mod($i - 1, $a[2]) * $a[5] ; Y
; EndFunc   ;==>_NextItem2
 
Автор
E

eus_deus

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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
eus_deus [?]
Думаю, тему можно закрывать.
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх