Что нового

Как использовать многомерный массив и TrayCreate... ?

Gilman

Новичок
Сообщения
16
Репутация
0
Никак не могу сообразить как поймать клик по элементы и запустить именно тот который нужен. Имеется примерно такой код:
Код:
#NoTrayIcon
#include <Array.au3>
Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию (Script Paused/Exit) и не отмечать галочками при выборе.

Dim $menu[3][7] = [["Тест","","1_Test","","","",""],["Тест 2","Тест 2.1","21_Test","Тест 2.2","22_Test","Тест 2.3","23_Test"],["Тест 3","Тест 3.1","31_Test","Тест 3.2","32_Test","Тест 3.3","33_Test"]]


$GetInfo = TrayCreateItem("Обновить info")

TrayCreateItem("")

For $i=0 To 2
	If $menu[$i][1] = "" Then
		$menu[$i][0] = TrayCreateItem($menu[$i][0])
	Else
		$menu[$i][0] = TrayCreateMenu($menu[$i][0])
		For $j=1 to 6 Step 2
		$menu[$i][$j] = TrayCreateItem($menu[$i][$j],$menu[$i][0])
		Next
	EndIf
Next

TrayCreateItem("") ; Создаёт разделитель

$iExit = TrayCreateItem("Выход")

TraySetState(1) ; Показывает меню трея

Работает только вот так
Код:
While 1
    Switch TrayGetMsg()
		Case $test

		Case $menu[0][1]
			MsgBox(0,"","привет")

		Case $menu[1][1]
			MsgBox(0,"","привет")

		Case $menu[2][1]
			MsgBox(0,"","привет")

        Case $iExit ; Выход
            ExitLoop
	EndSwitch
WEnd

Но это не вариант, ибо массив планируется делать динамическим. Как еще можно сделать отлов по объекту?
Суть такова что "Тест 2" это имя папки, ,"Тест 2.1" Названием в меню, "21_Test" имя скрипта
 
A

Alofa

Гость
Нет возможности проверить.
Код:
; ...
For $i=0 To 2
    If $menu[$i][1] = "" Then
        $menu[$i][0] = TrayCreateItem($menu[$i][0])
    Else
        $menu[$i][0] = TrayCreateMenu($menu[$i][0])
        For $j=1 to 6 Step 2
        $menu[$i][$j] = TrayCreateItem($menu[$i][$j],$menu[$i][0])
        Next
    EndIf
Next

$iStop = TrayCreateItem("") - 1 ; Создаёт разделитель

$iExit = TrayCreateItem("Выход")

TraySetState(1) ; Показывает меню трея

While 1
   $iTMsg = TrayGetMsg()
   Switch $iTMsg
      Case $test

      Case $menu[0][0] To $iStop
         MsgBox(0,"", TrayItemGetText($iTMsg))

      Case $iExit ; Выход
            ExitLoop
	EndSwitch
WEnd
 
Автор
G

Gilman

Новичок
Сообщения
16
Репутация
0
т.е невозможно сделать вложенным? Я правильно понимаю?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
While 1
	$iTrayMsg = TrayGetMsg()
	Switch $iTrayMsg
		Case $iExit
			ExitLoop
		Case 0
			; nothing
		Case Else
			For $i = 0 To UBound($menu) - 1 Step 1
				For $j = 1 To UBound($menu, 2) - 1 Step 2
					If $menu[$i][$j] = $iTrayMsg Then _
						MsgBox(64, '', 'Script= ' & $menu[$i][$j + 1])
				Next
			Next
	EndSwitch
WEnd



P.S. Впервые наблюдаю как TrayCreateItem возвращает @error:
Код:
For $i = 0 To UBound($menu) - 1 Step 1
	$menu[$i][0] = TrayCreateItem($menu[$i][0])
	For $j = 1 To UBound($menu, 2) - 1 Step 2
		If $menu[$i][$j] == '' Then _
			ExitLoop
		$menu[$i][$j] = TrayCreateItem($menu[$i][$j], $menu[$i][0])
	Next
Next
 
Автор
G

Gilman

Новичок
Сообщения
16
Репутация
0
Благодарю, получил, что хотел
 
Верх