Что нового

[Автоматизация] [Массивы] Создание массива переменных с привязкой к элементу

Dr.Freezer

Новичок
Сообщения
7
Репутация
0
Всем добрый вечер. Имеется цель:
Создать n-количество кнопок, каждая из которых будет привязана к переменной в стиле $var = кнопка. Чтобы потом повесить на каждую из этой кнопки запуск конкретного приложения, которое будет читаться из .ini файла. Соответственно текст кнопок и их количество, ровно как и количество полученных переменных - читается так же из .ini
Соответственно необходимо сделать это в цикле, и получить на выходе, допустим, 50 кнопок с соответствующее привязанными переменными var1, var2,...,var49, var50.
Как сделать кнопки по циклу for я сделал, но как сделать так, чтобы эти 50 кнопок имели разные переменные - не смог.
Через array моя голова не додумалась корректно реализовать. Прошу подсказать.
 

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
Код:
Local $array[50]
$array[1] = GUICtrlCreateButton(...)
$array[2] = GUICtrlCreateButton(...)

; или так

For $i = 1 to 50
$array[$i] = GUICtrlCreateButton(...)
next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Dr.Freezer,
Покажите пример Вашего ини-файла.
 
Автор
D

Dr.Freezer

Новичок
Сообщения
7
Репутация
0
Я так уже пробовал писать:

Код:
$multiplegui = GUICreate("Application Launcher", 200, 100)
 $multipleapps = IniRead($appsfile, $sText, "multipleapps", "")
 $d = 10
 Local $array[3]
	For $i = 1 to $multipleapps
	  $multipleappsname = IniRead($appsfile, $sText, "name" & $i, "")
	  $array[$i] = GUICtrlCreateButton($multipleappsname, 10, $d, 180 , 25)
	  $d = $d + 28
   Next
   
	GUISetState(@SW_SHOW)


На что при сборке мне ругаются:
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

Пример .ini файла:
Код:
[Office2010]
multiple=1
multipleapps=3
name1=Microsoft Word 2010
app1exe=word.exe
name2=Microsoft Excel 2010
app2exe=excel.exe
name3=Microsoft PowerPoint 2010
app3exe=outlook.exe
 

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
Все массивы в AutoIt - 0-based. Это означает, что доступ к элементу осуществляется, начиная с индекса 0.
Если создан массив размером 3, номера его элементов будут 0, 1 и 2.
При попытке обратиться к элементу 3 - получите ошибку.
Если Вы планируете в цикле создавать элементы, создавайте массив с запасом в размере. В Вашем случае - 4.

Это моя ошибка, я ведь я чисто механически создал массив на 50 элементов, и пошел обращаться к 50-му =)
Вот так все работает:
Код:
$multiplegui = GUICreate("Application Launcher", 200, 100)
$multipleapps = IniRead($appsfile, $sText, "multipleapps", "")
$d = 10
Local $array[4]
For $i = 1 to $multipleapps
	$multipleappsname = IniRead($appsfile, $sText, "name" & $i, "")
	$array[$i] = GUICtrlCreateButton($multipleappsname, 10, $d, 180 , 25)
	$d = $d + 28
Next

GUISetState(@SW_SHOW)
 
Автор
D

Dr.Freezer

Новичок
Сообщения
7
Репутация
0
Форумчане, можете помочь еще с одним вопросом. Кнопки мы создали и переменные присвоили. Но опять остановился, когда начал писать - как на эти 3 кнопки повесить функцию запуска приложения, которое читается из .ини из пункта appexe.
Используется режим onevent, окон в приложении больше трех и поэтому в месаджлуп я запутался и перешел на евент.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Верх