Что нового

Как создать элементы GUI через цикл?

darkwhite

Новичок
Сообщения
129
Репутация
4
Вопрос собственно в названии...
Код:
#Include <GUIConstantsEx.au3>
#include <GuiConstants.au3>




GUICreate("ListView Get Selected Indices", 392, 322)

for $i=1 to 5
	
$btn= GUICtrlCreateButton("Return string", 10, 30*$i, 90, 30)
Next


GUISetState()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
    EndSelect
WEnd
Exit


Например вот такой код создает ряд кнопок. Но при этом возникает вопрос как к ним обратиться и назначить им события...
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Можно так :
Код:
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
		Case $msg =$btn
		
		Case $msg =$btn-1
		
		Case $msg =$btn-2
		
		;..........................
	EndSelect
WEnd
 
Автор
D

darkwhite

Новичок
Сообщения
129
Репутация
4
ой. А можно расшифровать
Case $msg =$btn

Case $msg =$btn-1

Case $msg =$btn-2

это получается по их ID на GUI с момента создания последнего btn или как ?
и если кнопку заменить на элемент меню, например, то можно обратиться так же ?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Я вот так делаю:
Код:
#include <GUIConstantsEx.au3>
#include <GuiConstants.au3>

GUICreate('ListView Get Selected Indices', 392, 322)

Dim $aButtons[6]
For $i = 0 To UBound($aButtons) - 1
	$aButtons[$i] = GUICtrlCreateButton('Button #' & $i, 10, 30 * $i, 90, 30)
Next

GUISetState()
While 1
	$hMsg = GUIGetMsg()
	Switch $hMsg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $aButtons[0] To $aButtons[UBound($aButtons) - 1]
			ConsoleWrite(GUICtrlRead($hMsg) & @CRLF)
	EndSwitch
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
gregaz
это какой-то китайский код. надо создавать по переменной на каждый control. у Redline стандартный способ создания элементов в цикле
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Kaster [?]
это какой-то китайский код. надо создавать по переменной на каждый control
Ответ дан под конкретный способ создания, который уже имелся в примере.
И ответ вполне работоспособный.


darkwhite [?]
это получается по их ID на GUI с момента создания последнего btn или как ?
и если кнопку заменить на элемент меню, например, то можно обратиться так же ?
В принципе можно, если элементы идут подряд.
Поясняю : При таком способе создания все кнопки имеют свой ID (скажем : 2,3,4,5,6)
При этом $btn= 6 (последний элемент).
Ну при опросе танцевать в таком порядке ($btn-4, $btn-3, $btn-2, $btn-1, $btn).

Может это и по-китайски, но я иногда пользуюсь, когда не хочется иметь дело с массивами.

Опрос можно выполнить точно также,как и у Redline :
Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
		Case $btn-4 To $btn
			ConsoleWrite ("Нажата кнопка с ID=  " & $nMsg & @LF)
		              ConsoleWrite ("Нажата кнопка N : " & $nMsg -($btn-5) & @LF)
		;..........................
	EndSwitch
WEnd
 

joparezzz

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

GUICreate('ListView Get Selected Indices', 392, 322)

Dim $aButtons[6]
For $i = 0 To UBound($aButtons) - 1
    $aButtons[$i] = GUICtrlCreateButton('Button #' & $i, 10, 30 * $i, 90, 30)
Next

GUISetState()
While 1
    $hMsg = GUIGetMsg()
    Switch $hMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $aButtons[0] To $aButtons[UBound($aButtons) - 1]
            ConsoleWrite(GUICtrlRead($hMsg) & @CRLF)
    EndSwitch
WEnd
а как сделать прокрутку формы если элементы не влезают в окно?
 

ra4o

AutoIT Гуру
Сообщения
1 101
Репутация
222
К этому вопросу , как по мне нет однозначного подхода , всё зависит от предполагаемого максимального количества кнопок, возможности их расположить в несколько рядов итп .
Если взять прямой подход к вопросу - то проще использовать UDF "GUIScroll.au3" (во вложении) , вот пример с её использованием :
Код:
#include<WindowsConstants.au3>
#include<GuiconstantsEx.au3>
#Include <GUIScroll.au3>

$GUI = GUICreate('ListView Get Selected Indices', 392, 322)

Dim $aButtons[50]
Scrollbar_Create($GUI, $SB_VERT, UBound( $aButtons)*30)
Scrollbar_Step(20, $GUI, $SB_VERT)

For $i = 0 To UBound($aButtons) - 1
    $aButtons[$i] = GUICtrlCreateButton('Button #' & $i, 10, 30 * $i, 90, 30)
Next

GUISetState()
While 1
    $hMsg = GUIGetMsg()
    Switch $hMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $aButtons[0] To $aButtons[UBound($aButtons) - 1]
            ConsoleWrite(GUICtrlRead($hMsg) & @CRLF)
    EndSwitch
WEnd
 

Вложения

Верх