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