MenüItem auslesen

  • Hi,

    ich stehe grade vor einen Problem, ich habe ein Menü was druch ein Array erzeugt wird. Wie kann ich jetzt prüfen ob ein MenüItem angeklickt wurde und welches dieses ist??

    [autoit]

    #include <IE.au3>
    #include <Array.au3>

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

    ;HautpGUI
    $GUI = GUICreate("AutoRadio", 570, 450)
    $Menu = GUICtrlCreateMenu("Sender")
    $IE = _IECreateEmbedded()
    $browser = GUICtrlCreateObj ($IE, 0, 0, 569, 449)
    GUISetState(@SW_SHOW, $GUI)

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

    $var = IniReadSection(@ScriptDir & "\sender.ini", "sender")
    If @error Then
    MsgBox(4096, @ScriptDir & "sender.ini", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    GUICtrlCreateMenuItem($var[$i][0], $Menu)
    MsgBox(4096, "", "Schlüssel: " & $var[$i][0])
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case -3
    If $nMsg[1] = $GUI Then
    Exit
    Else
    GUISetState(@SW_HIDE, $nMsg[1])
    EndIf
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Ich bevorzuge den OnEvent-Mode:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <IE.au3>

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

    Opt('GUIOnEventMode', 1)

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

    ;HautpGUI
    $GUI = GUICreate("AutoRadio", 570, 450)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    $Menu = GUICtrlCreateMenu("Sender")
    $IE = _IECreateEmbedded()
    $browser = GUICtrlCreateObj($IE, 0, 0, 569, 449)
    GUISetState(@SW_SHOW, $GUI)

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

    ;~ $var = IniReadSection(@ScriptDir & "\sender.ini", "sender")
    Global $var[5][2] = [[4, 0],['A', ''],['B', ''],['C', ''],['D', '']] ; <- zum testen
    Global $aIDMenuItem[$var[0][0]]

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

    If @error Then
    MsgBox(4096, @ScriptDir & "sender.ini", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    $aIDMenuItem[$i - 1] = GUICtrlCreateMenuItem($var[$i][0], $Menu)
    GUICtrlSetOnEvent(-1, '_CallSender')
    Next
    EndIf

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

    WinWaitClose($GUI)
    Exit

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

    Func _CloseGui()
    GUIDelete($GUI)
    EndFunc ;==>_CloseGui

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

    Func _CallSender()
    Local $iSender = @GUI_CtrlId - $aIDMenuItem[0] + 1
    MsgBox(0, 'Sender', $var[$iSender][0])
    EndFunc ;==>_CallSender

    [/autoit]
  • Im MessageLoop-Modus kannst du es so lösen:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <Array.au3>

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

    ;HautpGUI
    $GUI = GUICreate("AutoRadio", 570, 450)
    $Menu = GUICtrlCreateMenu("Sender")
    $IE = _IECreateEmbedded()
    $browser = GUICtrlCreateObj($IE, 0, 0, 569, 449)
    GUISetState(@SW_SHOW, $GUI)

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

    $var = IniReadSection(@ScriptDir & "\sender.ini", "sender")
    If @error Then
    MsgBox(4096, @ScriptDir & "sender.ini", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    Dim $idMenuItem[$var[0][0]+1]
    $idMenuItem[0] = $var[0][0]
    For $i = 1 To $var[0][0]
    $idMenuItem[$i]=GUICtrlCreateMenuItem($var[$i][0], $Menu)
    MsgBox(4096, "", "Schlüssel: " & $var[$i][0])
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case - 3
    Exit
    Case $idMenuItem[1] to $idMenuItem[$idMenuItem[0]]
    MsgBox(0, "Schlüssel: " & $var[$nMsg - $idMenuItem[1]+1][0], "Wert: " & $var[$nMsg - $idMenuItem[1]+1][1])
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert