Что нового

Создать массив при выполнении функции

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Нужно создать массив при выполнении функции, функция записывает в массив ID контрола и его координаты на окне, дело в том что количество контролов мне будет не известно, а значит и сколько рядов в массиве будет мне тоже не известно, как выполнить такую задачу?

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

Global $ACtrlID[4][4]

$hForm = GUICreate("", 550, 300)
CtrlID()
GUICtrlCreateButton("Hello", 20, 20, 80, 20)
GUICtrlCreateButton("Hello", 20, 50, 80, 20)
GUICtrlCreateButton("Hello", 20, 80, 80, 20)
GUIctrlCreateInput("", 20, 110, 80, 20)
GUISetState()

_ArrayDisplay($ACtrlID)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func CtrlID()
	GUIRegisterMsg(0x000F, "WM_PAINT")
EndFunc	

Func WM_PAINT($hWnd, $iMsg, $wParam, $lParam)
	If WinExists($hWnd) Then
		Local $iCtrlID = _WinAPI_EnumChildWindows($hWnd, 0)
		For $i = 1 To UBound($iCtrlID) - 1
			$CtrlIdPos = ControlGetPos($hWnd, "", _WinAPI_GetDlgCtrlID($iCtrlID[$i][0]))
			$ACtrlID[$i - 1][0] = _WinAPI_GetDlgCtrlID($iCtrlID[$i][0])
			$ACtrlID[$i - 1][1] = "L=" & $CtrlIdPos[0] & " T=" & $CtrlIdPos[1] & " W=" & $CtrlIdPos[2] & " H=" & $CtrlIdPos[3]
		Next
	EndIf
	Return 	'GUI_RUNDEFMSG'
EndFunc


Добавлено:
Сообщение автоматически объединено:

Разобрался:

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

Global $ACtrlID

$hForm = GUICreate("", 550, 300)
CtrlID()
GUICtrlCreateButton("Hello", 20, 20, 80, 20)
GUICtrlCreateButton("Hello", 20, 50, 80, 20)
GUICtrlCreateButton("Hello", 20, 80, 80, 20)
GUIctrlCreateInput("", 20, 110, 80, 20)
GUIctrlCreateInput("", 20, 140, 80, 20)
GUIctrlCreateInput("", 20, 170, 80, 20)
GUIctrlCreateInput("", 20, 200, 80, 20)
GUISetState()

_ArrayDisplay($ACtrlID)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func CtrlID()
	GUIRegisterMsg(0x000F, "WM_PAINT")
EndFunc	

Func WM_PAINT($hWnd, $iMsg, $wParam, $lParam)
	If WinExists($hWnd) Then
		Local $iCtrlID = _WinAPI_EnumChildWindows($hWnd, 0)
		For $i = 1 To UBound($iCtrlID) - 1
		    Global $ACtrlID[$i][$i]
		Next	
		For $i = 1 To UBound($iCtrlID) - 1
			$CtrlIdPos = ControlGetPos($hWnd, "", _WinAPI_GetDlgCtrlID($iCtrlID[$i][0]))
			$ACtrlID[$i - 1][0] = "CtrlID=" & _WinAPI_GetDlgCtrlID($iCtrlID[$i][0])
			$ACtrlID[$i - 1][1] = "L=" & $CtrlIdPos[0] & " T=" & $CtrlIdPos[1] & " W=" & $CtrlIdPos[2] & " H=" & $CtrlIdPos[3]
		Next
	EndIf
	Return 	'GUI_RUNDEFMSG'
EndFunc
 
Верх