Kontextmenü dynamisch

  • Ich hab eine Funktion die liest Usernamen aus, variabel zwischen 0 - ca 20
    Nun möchte ich per Kontextmenü einen Usernamen wählen und dieser soll erstmal nur ausgeben werden.
    Nur dass scheint garnicht so einfach zu sein ?(?(
    Erbitte unterstützung :love:

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{f1}","CON")

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

    GUICreate("Döner mit alles", 200, 100)
    GUISetState(@SW_SHOW)

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

    Global $contextmenu
    Global $test[1]

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

    Func CON()

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

    GUICtrlDelete($contextmenu)

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

    Sleep(20)

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

    $contextmenu = GUICtrlCreateContextMenu()

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

    $rand = Random(0, 22, 1)
    For $i = 0 to $rand step +1

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

    _ArrayAdd($test, GUICtrlCreateMenuItem("Eintrag-Nr" & $i, $contextmenu))

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

    Next
    _ArrayDisplay($test)
    EndFunc

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

    While 1
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $contextmenu
    ConsoleWrite("Hier soll 'Eintrag-Nr x' Verarbeitet werden" & @CRLF)
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch

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

    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Kizum (17. November 2011 um 15:11)

  • Du musst deine Funktion CON auch aufrufen, ausserdem musst du das Array mit den ID's auswerten:

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{f1}", "CON")

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

    GUICreate("Döner mit alles", 200, 100)
    GUISetState(@SW_SHOW)

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

    Global $contextmenu
    Global $test[1]
    Con()

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

    While 1
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $test[1] to UBound($test) -1
    Consolewrite("Contexteintrag für Eintrag: " & $msg - $test[1] & " geklickt" & @CRLF)
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch

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

    WEnd

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

    Func CON()

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

    GUICtrlDelete($contextmenu)

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

    Sleep(20)

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

    $contextmenu = GUICtrlCreateContextMenu()

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

    $rand = Random(5, 22, 1)
    For $i = 0 To $rand Step +1
    _ArrayAdd($test, GUICtrlCreateMenuItem("Eintrag-Nr" & $i, $contextmenu))

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

    Next
    _ArrayDisplay($test)
    EndFunc ;==>CON

    [/autoit]

    mfg autoBert

  • Nur Case $test[1] to UBound($test) -1
    auf Case $test[1] to UBound($test) +2

    Dann läufts (erstmal) perfekt.

    Habe den HotkeySet erstellt damit ich die Funktion mehrfach aufrufen kann.

    Danke :)

  • Hallo Kizum,

    noch eine dringende Änderung damit es wirklich klappt (auch noch wenn weitere Controls in die Gui kommen):

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{f1}", "CON")

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

    GUICreate("Döner mit alles", 200, 100)
    GUISetState(@SW_SHOW)

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

    Global $contextmenu
    Global $test[1]
    Con()

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

    While 1
    $msg = GUIGetMsg()

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

    Switch $msg
    Case $test[1] to $test[UBound($test) -1]
    Consolewrite($msg & " Contexteintrag für Eintrag: " & $msg - $test[1] & " geklickt" & @CRLF)
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch

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

    WEnd

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

    Func CON()

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

    GUICtrlDelete($contextmenu)

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

    Sleep(20)

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

    $contextmenu = GUICtrlCreateContextMenu()

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

    $rand = Random(5, 22, 1)
    For $i = 0 To $rand Step +1
    _ArrayAdd($test, GUICtrlCreateMenuItem("Eintrag-Nr" & $i, $contextmenu))

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

    Next
    _ArrayDisplay($test)
    EndFunc ;==>CON

    [/autoit]

    mfg autoBert

  • Danke für die Mühe, aber leider wird dass wohl so nix. Die anderen Controls sind ein Konflikt und ich bekomme über GuictrlRead immer eine 68...

    Mit der Comboläufts wie es soll nur das nach dem Eintragen die 1. Zeile leer bleibt ?!
    Habe zich Zeilen Code mit 1d & 2d Array´s und wenn ich dann mal was anpassen muss bei dem Kontext, ist Polen offen

  • Hallo Kizum,

    wenn du den Text eines (Context)Menüeintrages auslesen willst musst du den erweiterten Paramter von GuiCtrlRead benutzen. Standardmässig wird der Status des Eintrags zurückgegeben.

    Du kannst es so machen:

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{f1}", "CON")

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

    GUICreate("Döner mit alles", 200, 100)
    GUISetState(@SW_SHOW)

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

    Global $contextmenu
    Global $test[1]
    Con()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $test[1] to $test[UBound($test) -1]
    Consolewrite(GuiCtrlRead($msg,1) & " geklickt" & @CRLF)
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch

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

    WEnd

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

    Func CON()
    GUICtrlDelete($contextmenu)
    $contextmenu = GUICtrlCreateContextMenu()
    $rand = Random(5, 22, 1)
    For $i = 0 To $rand Step +1
    _ArrayAdd($test, GUICtrlCreateMenuItem("Eintrag-Nr" & $i, $contextmenu))
    Next
    ;_ArrayDisplay($test)
    EndFunc ;==>CON

    [/autoit]

    mfg autoBert