2017-01-13 3 views
0

Ich versuche ein mehrdimensionales Array in AHK zu erstellen. Die callback im Schlüssel im Messages Array. Alle diese Handler werden über ein Menü ausgeführt. Ich Beispiel das Objekt an die Array hier:Wie füge ich einen Schlüssel zu einem mehrdimensionalen Array in AutoHotkey hinzu?

Application = { Messages: [] } 

Ich frage dann den Benutzer für einen Rückruf zu verwenden, das heißt: Regeln. Der Benutzer fügt dann dem Regelarray eine Nachricht hinzu.

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 

Um dann Ausgabe der Rückruf, frage ich den Benutzer für den Rückruf er vor setzen und dann nacheinander die Meldungen und Ausgang:

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 

ich keine Fehler erhalte, kann ich mir nicht, wie Debuggen der Application.Messages, weil es den Rückruf/die Nachricht nicht speichert. Kann mir jemand helfen? Vielen Dank!

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

Antwort

0

Der obige Code versucht, die Nachricht zu einem nicht ausgehärteten Array einfügen, habe ich eine separate Flagge wie folgt aus:

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 

jetzt also eine Nachricht hinzuzufügen, wählen Sie den Rückruf und Nachricht und es kann Insert die Nachricht an dieses Array. Die einzige Einschränkung ist, dass ich nicht sicher bin, ob der Callback existiert oder ein Array vom Typ ist. Ich werde es mir ansehen. Danke trotzdem.

Oder einfacher, ich habe es so geändert, dass es die Instanz des Arrays erstellte, wenn sie nicht existierte, als der Benutzer die zu verwendende Gruppe anführte. Ich habe auch das Entfernen von Leerraum hinzugefügt, weil Sie keine Leerzeichen in Schlüsseln haben können.

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 

ich nur durch die Anzeige geschlungen hat sich nichts wirklich hier abgesehen von den weißen Raum verändert Strippen:

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 
Verwandte Themen