Menü Item Check

  • Hallo zusammen,

    erstmal hier der Teil des Codes, der interessant ist:

    Spoiler anzeigen
    [autoit]

    $_1 = GUICreate("Notiz Tool", 243, 465, 192, 125, BitOR($GUI_SS_DEFAULT_GUI,$WS_SIZEBOX,$WS_MAXIMIZEBOX,$WS_THICKFRAME))
    $menHelp = GUICtrlCreateMenu("Hilfe")
    $smenInfo = GUICtrlCreateMenuItem("Info", $menHelp)
    $smenVersion = GUICtrlCreateMenuItem("Versionshinweise", $menHelp)
    $smenMouseClick = GUICtrlCreateMenuItem("Automatisch OK", $menHelp)

    [/autoit]

    Ich möchte nun, dass beim Klick auf den Button "$smenMouseClick" eine Variable (nennen wir sie einfach $iOption) auf 1 gesetzt wird, soweit nicht schwer.

    Allerdings soll, wenn man darauf geklickt hat, ein Häkchen davor symbolisieren, dass die Option aktuell ausgewählt ist. Bei einem erneuten Klick darauf soll $iOption wieder auf 0 gesetzt und das Häkchen vor dem Menüpunkt wieder entfernt werden.

    Wie setze ich sowas um?

    Vielen Dank vorab für eure Hilfe

    3 Mal editiert, zuletzt von DasIch (19. Dezember 2013 um 17:48) aus folgendem Grund: Rächtschreipfäler

  • Stell ein funktionsfähiges Beispielscript rein welches dein Problem darstellt. Du willst schließlich etwas von uns und nicht umgekehrt ;).

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Stell ein funktionsfähiges Beispielscript rein welches dein Problem darstellt. Du willst schließlich etwas von uns und nicht umgekehrt ;).


    Gerne. Hier:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $_1 = GUICreate("Notiz Tool", 196, 175, 192, 125, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    $menOptions = GUICtrlCreateMenu("Einstellungen")
    $smenMouseClick = GUICtrlCreateMenuItem("Automatisch OK", $menOptions)
    $cmdOk = GUICtrlCreateButton("OK", 2, 34, 90, 20)
    $edtText = GUICtrlCreateEdit("", 0, 56, 185, 89)
    GUICtrlSetData(-1, "edtText")
    GUISetState(@SW_SHOW)
    $iOption = 0

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $nMsg = $smenMouseClick
    Select
    Case $iOption = 0
    $iOption = 1
    Case $iOption = 1
    $iOption = 0
    EndSelect

    Case $nMsg = $cmdOk
    Select
    Case $iOption = 0
    GUICtrlSetData($edtText, "Unchecked")
    Case $iOption = 1
    GUICtrlSetData($edtText, "Checked")
    EndSelect
    EndSwitch
    WEnd

    [/autoit]

    Allerdings versteht er nicht, wann die Variable auf 0, und wann sie auf 1 steht...

    Zitat

    naja, wenn du eine checkbox davor setzt und sie dann mit dem Knopf verbindest, müsste das doch gehen oder?

    Sowas geht im Menü?

  • Du könntest ja mal eine Checkbox erstellen ($GUICtrlCreateCheckbox) und dann sagen wenn der Knopf gedrückt wird und die Checkbox = 4 (deaktiviert) dann soll sie auf 1 (aktiviert) gesetzt werden und wenn sie nicht auf 4 ist ( wodurch sie ja auf dann nur auf 1 sein kann) soll sie auf 4 gesetzt werden.

    Zitat

    "Some people feel the rain, others just get wet." - Bob Marley

    • Offizieller Beitrag

    Checkbox = 4 (deaktiviert) dann soll sie auf 1 (aktiviert)


    NEIN, nein und nochmals nein!! Das haben wir schon so oft thematisiert.
    NIEMALS sollte man Checkboxen so abfragen. Eine Checkbox kann auch andere Werte ausgeben, wenn sie de/aktiviert ist.
    Einfach der Hilfeempfehlung folgen und den Status mit

    [autoit]

    If BitAnd(GuiCtrlRead($Checkbox), $GUI_CHECKED) Then

    [/autoit]

    prüfen.
    Nur so ist gewährleistet, dass der korrekte Status abgefragt wird.

  • Du könntest ja mal eine Checkbox erstellen ($GUICtrlCreateCheckbox) und dann sagen wenn der Knopf gedrückt wird und die Checkbox = 4 (deaktiviert) dann soll sie auf 1 (aktiviert) gesetzt werden und wenn sie nicht auf 4 ist ( wodurch sie ja auf dann nur auf 1 sein kann) soll sie auf 4 gesetzt werden.

    Und wie schaffe ich es, eine Checkbox oben in das Menü zu bekommen, direkt vor den Schriftzug?! Das Häkchen soll dort gesetzt werden (Also unter Einstellungen > Automatisch OK)

    Soll dann ungefähr so aussehen wie im Anhang. (Übrigens ein erstklassiges MSPaint-Projekt! :thumbup: )

    P.S.: Ich glaube, ihr missversteht mein Problem ein bisschen :P


  • Da hilft besseres Beschreiben? :P

    Also MenuItem können m.W. mit Standardfunktionen keine Checkbox erhalten, nur RadioItem sind möglich.


    Ich habe doch sogar ein bild gemacht davon, wie es aussehen soll :( Das mit der Checkbox hat NightmarePhoenix als Vorschlag eingebracht. Aber ich möchte ja dort keine klassische Checkbox haben, sondern einfach ein "aktiv = Häkchen", "inaktiv = kein Häkchen".

    Sowas gibt es doch bei vielen Programmen. Beispielsweise beim Editor von Windows: Im Reiter "Format" gibt es die Option "Zeilenumbruch". Ist der Zeilenumbruch aktiv, wird ein Häkchen davor eingeblendet. Ist er inaktiv, wird das Häkchen wieder entfernt. Genau so etwas möchte ich auch haben. Wenn es aktiv ist, soll die Variable 1 sein, wenn es inaktiv ist, soll sie 0 betragen.


  • Mag ja sein - aber nochmal: Mit den Standard-AutoIt-Funktionen ist das nicht realisierbar.


    Und genau deshalb frage ich hier nach, ob jemand eine Ahnung hat, denn eine Standard-Funktion hierfür kann ich nicht finden und ich habe hier bisher nur gute Erfahrungen gemacht.

    • Offizieller Beitrag

    Haken vor dem Menü geht ohne Probleme. Habe jetzt zwar nicht ganz verstanden wann er gesetzt werden soll, aber ist auch egal.
    Im Beispiel wird der Haken gesetzt/nicht gesetzt wenn du den OK Button anklickst. Wie das geht siehst du also.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $_1 = GUICreate("Notiz Tool", 196, 175, 192, 125, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP))
    $menOptions = GUICtrlCreateMenu("Einstellungen")
    $smenMouseClick = GUICtrlCreateMenuItem("Automatisch OK", $menOptions)
    $cmdOk = GUICtrlCreateButton("OK", 2, 34, 90, 20)
    $edtText = GUICtrlCreateEdit("", 0, 56, 185, 89)
    GUICtrlSetData(-1, "edtText")
    GUISetState(@SW_SHOW)
    $iOption = 0

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $nMsg = $smenMouseClick
    Select
    Case $iOption = 0
    $iOption = 1
    Case $iOption = 1
    $iOption = 0
    EndSelect

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

    Case $nMsg = $cmdOk
    Select
    Case $iOption = 0
    GUICtrlSetState($smenMouseClick, $GUI_UNCHECKED)
    GUICtrlSetData($edtText, "Unchecked")
    Case $iOption = 1
    GUICtrlSetState($smenMouseClick, $GUI_CHECKED)
    GUICtrlSetData($edtText, "Checked")
    EndSelect
    EndSwitch
    WEnd

    [/autoit]

    BugFix, warum soll ein Haken vor dem Menü nicht gehen? Ist doch das klassische Beispiel von Checked/Unchecked in einem Menüitem.
    Schau dir das Beispiel von GUICtrlCreateMenuItem mal an :P

    DasIch, schau dir das Beispiel in der Hilfe an ;)


  • Raupi, du bist mein Held! DANKE!! :party: :D Hat super funktioniert :love: