Contextmenü: Radiobutton anderem Menü-Item zuweisen

  • Hi,
    folgendes Problem:
    Ein Contextmenü wird erstellt und der aktuelle Menüeintrag bekommt mittels GUICtrlSetState(Menüeintrag, $GUI_CHECKED) ein Radiobutton.
    Nun kann man per Maus die anderen Menüeinträge auswählen und der Radiobutton wechselt auf den angeklickten Eintrag, so soll es auch sein.

    Jetzt möchte ich aber diesen Radiobutton innerhalb des Menüs nicht nur per Mausklick in das Menu ändern, sondern auch innerhalb des Scriptes.
    D.h., sobald eine bestimmte Funktion aufgerufen wird, soll die Position des Radiobuttons geändert werden.
    Mit GUICtrlSetState(Menüeintrag, $GUI_CHECKED) funktioniert das aber nicht, dann sind beide Menüeinträge angehakt.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiMenu.au3>

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

    ;right click on gui to bring up context Menu.
    GUICreate("My GUI Context Menu", 300, 200)
    $button = GUICtrlCreateButton("Set Item4", 50, 50)

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

    $context = GUICtrlCreateContextMenu(-1)
    $item6 = GUICtrlCreateMenu("Items", $context)
    $item6_1 = GUICtrlCreateMenuItem("Item1", $item6, 0, 1)
    $item6_2 = GUICtrlCreateMenuItem("Item2", $item6, 1, 1)
    $item6_3 = GUICtrlCreateMenuItem("Item3", $item6, 2, 1)
    $item6_4 = GUICtrlCreateMenuItem("Item4", $item6, 3, 1)
    GUICtrlSetState($item6_1, $gui_checked) ;Item1 bekommt Markierung

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

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $button Then
    GUICtrlSetState($item6_4, $gui_checked);Item3 bekommt Markierung, aber die schon bestehende Markierung bleibt
    _GUICtrlMenu_CheckRadioItem ($item6, 0, 3, 3) ;funktioniert leider nicht, aber die Funktion sollte wie bei diesem Befehl sein
    GUICtrlSetState($item6_4, $MFT_RADIOCHECK ) ;Item wird in fetter Schrift dargestellt
    ;GUICtrlSetState($item6_4, $MFS_CHECKED ) ;funktioniert nicht
    EndIf

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

    WEnd
    GUIDelete()

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

    Gibt es eine Möglichkeit den Radiobutton zu setzen(so daß der andere verschwindet), OHNE die damit verknüpfte Funktion aufzurufen.
    Die Orgie, sämtliche Positionen zu disablen, und den einen dann zu setzen würde ich gerne vermeiden, da ich viele verschachtelte Menüeinträge habe.
    Diese gesuchte Funktion gibt es bei den _GuiCtrlMenuCheckRadioItem(), funktioniert so leider nicht bei "normalen" Contextmenüs.

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (24. März 2010 um 14:49)

  • Hallo Andy,

    deine Frage ist zwar sehr eindeutig, aber ob dich die Antwort befriedigt :?::?: Items in einem Array verwalten, in einer Schleife gewünschtes Item CHECKED setzen, alle anderen UNCHECKED setzen.

    mfg (Auto)Bert

    • Offizieller Beitrag

    Andy: Bei den UDFs am besten immer das Handle (nicht die Control-ID) benutzen, dann klappt das auch. :)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiMenu.au3>

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

    ;right click on gui to bring up context Menu.
    GUICreate("My GUI Context Menu", 300, 200)
    $button = GUICtrlCreateButton("Set Item4", 50, 50)

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

    $context = GUICtrlCreateContextMenu(-1)
    $item6 = GUICtrlCreateMenu("Items", $context)
    $item6_1 = GUICtrlCreateMenuItem("Item1", $item6, 0, 1)
    $item6_2 = GUICtrlCreateMenuItem("Item2", $item6, 1, 1)
    $item6_3 = GUICtrlCreateMenuItem("Item3", $item6, 2, 1)
    $item6_4 = GUICtrlCreateMenuItem("Item4", $item6, 3, 1)
    GUICtrlSetState($item6_1, $gui_checked) ;Item1 bekommt Markierung

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

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If $msg = $button Then
    ;~ GUICtrlSetState($item6_4, $gui_checked);Item3 bekommt Markierung, aber die schon bestehende Markierung bleibt
    _GUICtrlMenu_CheckRadioItem(GUICtrlGetHandle($item6), 0, 3, 3) ; bei den UDFs am besten immer das Handle benutzen
    ;~ GUICtrlSetState($item6_4, $MFT_RADIOCHECK ) ;Item wird in fetter Schrift dargestellt
    ;GUICtrlSetState($item6_4, $MFS_CHECKED ) ;funktioniert nicht
    EndIf

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

    WEnd
    GUIDelete()

    [/autoit]
  • Vielen Dank an die "Nachteulen"! (man beachte die Uhrzeiten der Postings) :thumbup: