2017-01-13 5 views
0

Я пытаюсь создать многомерный массив в AHK. callback в ключе в массиве Messages. Все эти обработчики выполняются с помощью меню. Я экземпляр объекта к массиву здесь:Как добавить ключ к многомерному массиву в AutoHotkey?

Application = { Messages: [] } 

Затем я прошу у пользователя обратного вызова для использования, а именно: правила. Затем пользователь добавляет сообщение в массив правил.

CreateMessageHandler: 
InputBox callback, Create a message group., Choose a callback for this message., , 
if !ErrorLevel 
    InputBox message, Add a new sentence., Enter your line to store., , 
    if !ErrorLevel 
     Application.Messages[callback].Insert(message) 
     MsgBox Bravo! Message added successfully.`n`nNote: You can use CTRL+D to quickly display these. 
return 

Чтобы затем вывести обратный вызов, я прошу у пользователя обратного вызова, он поставил перед и затем цикл через сообщения и выход:

DisplayMessageHandler: 
InputBox, callback, Display a set of messages., Enter which callback you want to display., , 
if !ErrorLevel 
    for key, value in Application.Messages[callback] { 
     send {Raw}%value% 
     send {Enter} 
     sleep, 1000 
    } 
return 

Я не имею в принимающий без ошибок, я не могу думать, как для отладки Application.Messages, поскольку он не сохраняет обратный вызов/сообщение. Может кто-нибудь мне помочь? Благодаря!

P.S - This is my reference to information/documentation.

ответ

0

Код выше пытается вставить сообщения в отключенном массиве, я создал отдельный флаг вроде этого:

GroupMessageHandler: 
InputBox callback, Create a message group., Choose a callback for this message., , 
if !ErrorLevel 
    Application.Messages[callback] := [] 
    MsgBox % "Successfully added " . callback ". You can how add messages to it!" 
return 

Так что теперь, чтобы добавить сообщение, Вы выбираете функцию обратного вызова и сообщение, и оно может Insert сообщение этому массиву. Единственное ограничение - я не уверен, что существует обратный вызов или массив типов. Я посмотрю. Спасибо, в любом случае.

Или, проще говоря, я изменил его так, чтобы он создал экземпляр массива, если он не существовал, когда пользователь указывал, какую группу использовать. Я также добавил удаление пробела, потому что у вас не может быть пробелов в клавишах.

CreateMessageHandler: 
InputBox callback, Which group are you adding., Please enter a callback so you can add more messages to this group., , 
if !ErrorLevel 
    StringReplace , callback, callback, %A_Space%,,All 
    if(!Application.Messages[callback]) 
     Application.Messages[callback] := [] 
    InputBox message, Add a new sentence., Enter your line to store., , 
    if !ErrorLevel 
     Application.Messages[callback].Insert(message) 
     MsgBox Bravo! Message added successfully.`n`nNote: All white spaces of %callback% was removed.`nNote: You can use CTRL+D to quickly display these. 
return 

Я просто петельные через дисплей, ничего не изменилось здесь, кроме пустого пространства вскрышных:

DisplayMessageHandler: 
InputBox, callback, Display a set of messages., Enter which callback you want to display., , 
StringReplace , callback, callback, %A_Space%,,All 
for key, value in Application.Messages[callback] { 
    send {Raw}%value% 
    send {Enter} 
    sleep, 1000 
} 
return