Что нового

[Элементы GUI] Как перебрать все элементы GUI?

Acceleraptor

Новичок
Сообщения
3
Репутация
0
Вот сам код:

Код:
#Include <GUIConstantsEx.au3>

$gui= GUICreate("xxx", 900, 625)
$NButt = 37
Local $ahChk[$NButt][$NButt]
for $x=-18 to 18
    for $y=-18 to 18
        $ahChk[$x + 18][$y + 18] = GUICtrlCreateCheckbox ("", 15*($x+19), 15*($y+19), 15, 15)
    Next    
Next
$startbutton= GUICtrlCreateButton("Start", 630, 15, 50, 20)

GUISetState()
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $startbutton
            For $i = 0 to $NButt-1
                For $j = 0 to $NButt - 1
                    $pos = ControlGetPos($gui, "", $ahChk[$i][$j])
                    If Not @error Then
                        MsgBox(0, "Window Stats:", "POS: " & $pos[0] & "," & $pos[1] & " SIZE: " & $pos[2] & "," & $pos[3],10 )
                    EndIf
                Next
            Next
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd


Задаются чекбоксы в окне, квадратом 37х37(всего 1369) и после этого надо сделать действия над каждым из них через цикл. Порядок не важен. Например, проверить включен текущий чекбокс или нет. Если включен выдать соответствующий MsgBox и перейти на проверку следующего. Это так, чисто для примера.
Сори если было, не знаю как задать в поиске, вручную не нашел. Заранее благодарен. :stars:
 
Автор
A

Acceleraptor

Новичок
Сообщения
3
Репутация
0
Есть окно, в нем пара тысяч кнопок.
Вопрос: как поочередно выполнить действия над каждой из них? Не важно какие.
Вопрос в том, как поочередно пройтись по всем кнопкам окна. Переменные для обращения к ним - формата $butt-1, $butt-2, butt-3 и т.д. Кроме кнопок в окне ничего нет.
Если есть идеи как обратиться КО ВСЕМ элементам окна - в данном случае подойдет.
Заранее благодарен :IL_AutoIt_1:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
я сам никогда не озадачивался по поводу индексации созданных элементов, действительно ли они идут подряд, что к ним можно обратиться через $but - 1, 2, 3 и т.д. если надо было создавать много элементов, я делал это в цикле где handle каждого элемента хранился как элемент массива. но в любом случае, что в массиве, что как у тебя, это делается в цикле. так же как и создается.
Код:
For $i = 0 to $NButt - 1
    ; Do something with $butt - $i
Next
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: [Автоматизация] Цикл, в котором изменяется имя идентификатора который идет после символа $

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


С уважением, ваш Глобальный модератор.




ответ мне видится в вопросе. организуй цикл и делай нужные действия. я кстати не вижу разницы между этой темой и второй которую ты создал. думаю можно объединить
 
Автор
A

Acceleraptor

Новичок
Сообщения
3
Репутация
0
Код:
#Include <GUIConstantsEx.au3>
#include <GuiConstants.au3>

$gui= GUICreate("xxx", 900, 625)

for $x=-18 to 18
for $y=-18 to 18
$chk= GUICtrlCreateCheckbox ("", 15*($x+19), 15*($y+19), 15, 15)
Next
Next
$startbutton= GUICtrlCreateButton("Start", 630, 15, 50, 20)

GUISetState()
While 1
    $msg = GUIGetMsg()
	Select
				Case $msg =$startbutton

					For $i = 0 to $NButt-1
						$pos = ControlGetPos($gui, "", $NButt-$i)
						If Not @error Then
						MsgBox(0, "Window Stats:", "POS: " & $pos[0] & "," & $pos[1] & " SIZE: " & $pos[2] & "," & $pos[3],10 ) ;как пример координаты и размер каждого чекбокса
						EndIf
				Next
				Case $msg = $GUI_EVENT_CLOSE
					ExitLoop
    EndSelect
WEnd
Exit


Я вставил Ваш кусочек, но он не запускается, скорей всего я что-то неправильно сделал)) Я первый день в АвтоИте, не судите строго))) Можете сделать это рабочим, чтоб проверились чекбоксы от $chk-1 (не минус 1, а тире 1) до $chk-1368? Ну или попробуйте мне объяснить это...))

P.s. Ну или как вы говорили через массив.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Acceleraptor,
Исправь свой 1 пост. Вставь код в тег AutoIt :Rulz:
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
#include <GuiConstants.au3>
#include <WinAPIEx.au3>
#include <ButtonConstants.au3>

$hForm = GUICreate("ххх", 800, 600)
For $x = -18 to 18
    For $y = -18 to 18
        GUICtrlCreateCheckbox ("", 16*($x+19), 16*($y+19), 15, 15)
    Next
Next
$Start = GUICtrlCreateButton("Start", 630, 15, 50, 20)

GUISetState()
While 1
	Switch GUIGetMsg()
		Case -3
           Exit
	    Case $Start
		   GetCheckState($hForm)
	EndSwitch
WEnd

Func GetCheckState($hWnd)
	Local $hChild = _WinAPI_EnumChildWindows($hWnd, 1)
    For $i = 1 To UBound($hChild) - 1
		$Id = _WinAPI_GetDlgCtrlID($hChild[$i][0])
		If GUICtrlRead($Id) = 1 Then
			MsgBox(64, 'Info', 'Control ' & $Id & ' checked')
		EndIf	
    Next
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Код:
#include <GUIConstantsEx.au3>

$gui = GUICreate("xxx", 900, 625)

For $x = -18 To 18
	For $y = -18 To 18
		GUICtrlCreateCheckbox("", 15 * ($x + 19), 15 * ($y + 19), 15, 15)
	Next
Next
$startbutton = GUICtrlCreateButton("Start", 630, 15, 50, 20)

GUISetState()
While 1
	Switch GUIGetMsg()
		Case $startbutton
			For $i = 1 To $startbutton - 1
				If GUICtrlRead($i) = $GUI_CHECKED Then
					$pos = ControlGetPos($gui, "", $i)
					If Not @error Then
						MsgBox(0, "Window Stats:", "POS: " & $pos[0] & "," & $pos[1] & " SIZE: " & $pos[2] & "," & $pos[3], 10, $gui)
						; ExitLoop
					EndIf
				EndIf
			Next
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Acceleraptor
1. исправь первый пост.

Код:
#Include <GUIConstantsEx.au3>

$gui= GUICreate("xxx", 900, 625)
$NButt = 37
Local $ahChk[$NButt][$NButt]
for $x=-18 to 18
	for $y=-18 to 18
		$ahChk[$x + 18][$y + 18] = GUICtrlCreateCheckbox ("", 15*($x+19), 15*($y+19), 15, 15)
	Next	
Next
$startbutton= GUICtrlCreateButton("Start", 630, 15, 50, 20)

GUISetState()
While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $startbutton
			For $i = 0 to $NButt-1
				For $j = 0 to $NButt - 1
					$pos = ControlGetPos($gui, "", $ahChk[$i][$j])
					If Not @error Then
						MsgBox(0, "Window Stats:", "POS: " & $pos[0] & "," & $pos[1] & " SIZE: " & $pos[2] & "," & $pos[3],10 )
					EndIf
				Next
			Next
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd
 
Верх