OnEvent Abfrage bei Dynamisch Erzeugten Traymenü-Einträgen

  • Hallo zusammen,

    ich habe mir ein "dynamische"Traymenü erzeugt -> [ gelöst ] "Dynamisches" Traymenü? Probleme bei der Trayitem-Zuweisung

    Nun versuche ich die eingelesenen und erzeugten Menüpunkte abzufangen/abzufragen:


    [autoit]


    Opt('TrayOnEventMode', 1)
    For $i = 1 To UBound($varSection) - 1
    $sectionitems = TrayCreateMenu( $varSection[$i])
    $var1 = IniReadSection("config.ini", $varSection[$i])
    For $j = 1 To UBound($var1) - 1
    $displayitem = TrayCreateItem($var1[$j][0], $sectionitems)TrayItemSetOnEvent(-1, "ClickTrayItem")
    Next
    Next

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(100) WEnd
    Func ClickTrayItem()
    Msgbox(64,$var1[1][0],$var1[1][1])
    EndFunc

    [/autoit]


    Nun wird mir immer der letzte Eintrag des Traymenüs angezeigt - klar und logisch (!)
    Aber wie kriege ich es hin, dass mir die richtigen Einträge übergeben werden?

    -----------
    Zur Info: Ich habe eine config.ini mit folgenden Einträgen
    [SectionA]
    Name1=Wert1
    Name2=Wert2

    [SectionB]
    Name1=Wert1
    Name2=Wert2

    usw.

    diese Datei wird von einem Script (Siehe URL) eingeladen und entsprechend als Traymenü angezeigt.

    4 Mal editiert, zuletzt von Gwyn (21. Dezember 2010 um 11:58)

  • Das steht doch im Script in dem Link, oder hab ich das falsch verstanden?

    [autoit]

    If @TRAY_ID == $tray1 Then
    MsgBox(0,"","1")
    ElseIf @TRAY_ID == $tray2 Then
    MsgBox(0,"","2")
    ElseIf @TRAY_ID == $tray3 Then
    MsgBox(0,"","3")
    ElseIf @TRAY_ID == $exit Then
    Exit
    EndIf

    [/autoit]
  • Hier mal das Script (hat keinen Sinn - wills nur verstehen)

    Wo baue ich den diese Abfrage ein?
    bzw. wo erhalte ich "$tray1"..."$tray_x" her oder wo muss ich diese definieren?

    [autoit]


    #include <Array.au3>
    #include <GUIConstantsEx.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; ******************* Variablen
    $varSection = IniReadSectionNames("config.ini") ; Sektionsnamen einlesen

    [/autoit][autoit][/autoit][autoit]

    ; ******************* Traymenü
    #NoTrayIcon

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($varSection) - 1
    $sectionitems = TrayCreateMenu( $varSection[$i])
    $var1 = IniReadSection("config.ini", $varSection[$i])
    For $j = 1 To UBound($var1) - 1
    $displayitem = TrayCreateItem($var1[$j][0], $sectionitems)
    TrayItemSetOnEvent(-1, "ClickTrayItem")
    Next
    Next

    [/autoit][autoit][/autoit][autoit]

    TrayCreateItem("")

    [/autoit][autoit][/autoit][autoit]

    $configitem0 = TrayCreateMenu("Submenü")
    $configitem1 = TrayCreateItem("Enter0", $configitem0)
    TrayItemSetOnEvent(-1, "_Enter0")
    $configitem2 = TrayCreateItem("Enter1", $configitem0)
    TrayItemSetOnEvent(-1, "_Enter1")

    [/autoit][autoit][/autoit][autoit]

    $exititem = TrayCreateItem("Beenden")
    TrayItemSetOnEvent(-1, "_Exit")

    [/autoit][autoit][/autoit][autoit]

    TraySetState()

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; ********************** Abfrage
    While 1
    Sleep(100)
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func ClickTrayItem()
    ; If @TRAY_ID == $displayitem Then
    ; Msgbox(64,$var1[1][0],$var1[1][1])

    [/autoit][autoit][/autoit][autoit]

    ; Wenn ich die @TRAY_ID mit §displayitem abfrage - erhalte ich immer den selben Wert
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Enter0()
    Msgbox(64,"Enter0:","xxxx")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Enter1()
    Msgbox(64,"Enter1:","xxxx")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Gwyn (21. Dezember 2010 um 12:00)

  • Hmm, woher weiß ich den wieviele "$tray_n" es gibt?
    Die config.ini besteht beispielweise aus veränderbaren Einträgne (sprich mal sind mehr, mal sind weniger Sektionen und Namen/Werte darin enthalten)

    Wenn ich deine Definition nehmen würde, müsste ich "$tray" von vorne herein auf einen Bestimmten Wert festlegen!

    Gedankenspiel:
    Das Ganze wäre doch gedanklicher einfacher, wenn "$displayitem" als Array durchgehen würde, so könnte man die eingelesenen Werte leichter herausfinden und abfragen, oder ist das völliger Unsinn?

  • Du ließt die .ini ja aus, das wird dann in eine Array gespeichert. Dann kannst du ubound benutzen.

  • Ich habe den "Code" etwas erweitert:

    [autoit]


    DIM $displayitem[100]

    [/autoit]

    und die Abfrage:

    [autoit]


    For $i = 1 To UBound($varSection) - 1
    $sectionitems = TrayCreateMenu( $varSection[$i])
    $var1 = IniReadSection("C:\Users\rs\Desktop\ClipPass\config.ini", $varSection[$i])
    For $j = 1 To UBound($var1) - 1
    $displayitem[$j] = TrayCreateItem($var1[$j][0], $sectionitems)
    TrayItemSetOnEvent($displayitem[$j], "ClickTrayItem")
    Next
    Next

    [/autoit]

    Wenn ich nun bei der Funktion mir den Inhalt der $displayitem anzeigen lasse - erhalte ich dennoch nicht alle Einträge, sondern nur die Einträge der letzten Sektion?

    [autoit]


    Func ClickTrayItem()
    _arraydisplay($displayitem)
    EndFunc

    [/autoit]

    Ich blicks echt nicht! Selbst wenn ich eine erneute FOR Schleife in die Funktion einbaue - erhalte ich nur die letzten Werte?