Что нового

Функция с аргументами из TrayItemSetOnEvent

deart

Новичок
Сообщения
3
Репутация
0
Добрый день.

С первой попытки вопрос не корректно поставил. Опишу более подробно задачу.

Есть массив 2х мерный массив, в котором я храню результаты сканирования папок на носителе.

Код:
1
|----- 1.1
|----- 1.2
2
|----- 2.1
|----- 2.2
n
|----- n.1
|----- n.2
Каждая имеет 2 вложенных папки.

По этому массиву создаю меню в трее. Родительская папка, вложенные, разделитель.
Это все я осилил, но не могу понять как сделать, чтобы при клике по пункту вложенных папок вызывалась функция, которая принимает имя вложенной папки, ее родителя для последующих действий.


Код:
#Include <Array.au3>
Opt("TrayOnEventMode", 1)
Opt("GUIOnEventMode", 1)
Opt("SendCapslockMode", 0)
Opt("TrayMenuMode", 1 + 2)

Dim $aKeys[1][3]

 _GetKeys_(@ScriptDir)
 
For $i = 1 To $aKeys[0][0] 
	TrayCreateItem($aKeys[$i][0])
	
	For $c = 1 To 2
		TrayCreateItem($aKeys[$i][$c])
		TrayItemSetOnEvent(-1, "_DoKey_")	
	Next
	
	TrayCreateItem("")	
Next
	
Func _DoKey_()

EndFunc

$exititem = TrayCreateItem("Exit")
TrayItemSetOnEvent($exititem, "_Exit_")

While 1
	Sleep(10)
WEnd

Func _GetKeys_($sDir)
...
EndFunc

Func _Exit_()
    Exit
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


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

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
deart
Если дочитать описание TrayItemSetOnEvent, то там явно указан макрос @TRAY_ID. А для того, чтобы узнать надо сделать массив ассоциаций ID с путём. При добавлении пункта добавлять в массив родителей и имя. Так как ID идут оп порядку, то в принципе ID это просто индекс массива.
 
Автор
deart

deart

Новичок
Сообщения
3
Репутация
0
В принципе так и сделал. Только ID пунктов идут не по порядку. Что-то в стиле 7, 9 и т.д. (не помню дальше)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
deart,
Можно так попробовать.
Код:
#NoTrayIcon

Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 3)

$iRand = Random(5, 25, 1)
Dim $aKeys[$iRand + 1][3] = [[$iRand]], $aTray[$iRand * 2 + 1][2] = [[$iRand * 2]]

For $i = 1 To $aKeys[0][0]
	$aKeys[$i][0] = 'Item_' & $i
	For $j = 1 To 2
		$aKeys[$i][$j] = 'SubItem_' & $j & ' (' & 'Item_' & $i & ')'
	Next
Next

$iRand = 0
For $i = 1 To $aKeys[0][0]
	$nMenu = TrayCreateMenu($aKeys[$i][0])
	For $j = 1 To 2
		$iRand += 1
		$aTray[$iRand][0] = TrayCreateItem($aKeys[$i][$j], $nMenu)
		TrayItemSetOnEvent(-1, '_DoKey')
		$aTray[$iRand][1] = $aKeys[$i][$j]
	Next
Next
$nExitItem = TrayCreateItem('Exit')
TrayItemSetOnEvent(-1, '_Exit')
$nMenu = 0
$iRand = 0
$aKeys = 0
TraySetState()
While 1
	Sleep(1000)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _DoKey()
	For $i = 1 To $aTray[0][0]
		If $aTray[$i][0] = @TRAY_ID Then
			MsgBox(64, 'Info', $aTray[$i][1])
			ExitLoop
		EndIf
	Next
EndFunc   ;==>_DoKey
 
Верх