Menü per Code

  • Hallo,

    ich erstelle per Code ein Menü.
    Das klappt soweit.

    Meine Frage:

    Wie kann ich für jeden Menüeintrag
    zusätzlich per Code einen Case Befehl
    in der While Schleife anlegen?

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 500, 400)
    $MenuItem1 = GUICtrlCreateMenu("Texte")

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

    GUISetState()

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

    ;$aFont = _ChooseFont()
    Dim $Text[5]

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

    $Text[1] = "Peter"
    $Text[2] = "Ilse"
    $Text[3] = "Klaus"
    $Text[4] = "Inge"

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

    for $i = 0 to 4
    GUICtrlCreateMenuItem($Text[$i], $MenuItem1)
    next

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE

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

    GUIDelete()
    Exit

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

    ; Case Inge....sollte automatisch erzeugt werden

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

    EndSwitch

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

    WEnd

    [/autoit]

    Also

    Case Peter
    Case Ilse...


    ;) Grüße Ilse

    3 Mal editiert, zuletzt von Ilse (28. Juli 2012 um 09:59)

  • Hallo Ilse,

    das hast Du doch schon in Deiner Hunde.au3 gemacht... ;)

    [autoit]


    Global $idmNames [5]

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

    for $i = 0 to 4
    $idmNames[$i] = GUICtrlCreateMenuItem($Text[$i], $MenuItem1)
    next
    ;...
    Case $idmNames[0] To $idmNames[UBound($idmNames) - 1]
    ;...

    [/autoit]

    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (26. Juli 2012 um 18:47)

  • Hallo Greenhorn,

    hm, da war das etwas anders.
    Ich muß auf das Menü zugreifen
    und das geht nicht!

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 500, 400)
    $MenuItem1 = GUICtrlCreateMenu("Texte")

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

    GUISetState()

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

    ;$aFont = _ChooseFont()
    Dim $Text[5]
    Global $idmNames [5]

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

    $Text[1] = "Peter"
    $Text[2] = "Ilse"
    $Text[3] = "Klaus"
    $Text[4] = "Inge"

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

    for $i = 0 to 4
    $Idnames = GUICtrlCreateMenuItem($Text[$i], $MenuItem1)
    next

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

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

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

    GUIDelete()
    Exit
    Case $idmNames[0] To $idmNames[UBound($idmNames) - 1]
    MsgBox(4096, "", StringFormat ("Es wurde eine Schaltfläche gedrückt.\nID: %d\nText: %s", $nMsg, GUICtrlRead ($nMsg)))

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

    EndSwitch

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

    WEnd

    [/autoit]

    ;) Ilse

  • Guten Morgen zusammen,

    ich habe gestern noch vieles probiert,
    aber mein Problem konnte ich einfach nicht lösen.

    Das sollte passieren:

    Ich lege meine Menüeinträge mit Stringsplit an. (Es können jetzt mehrere sein)
    Sobald ein Menüeintrag geklickt wird, wird die Funktion aufgerufen
    und der Eintrag soll in die INI.

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 500, 400)
    $MenuItem1 = GUICtrlCreateMenu("Texte")

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

    GUISetState()

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

    Global $idmNames

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

    $Text = "Beagle;Neufundländer;Dobermann;Malteser;Rottweiler;Eurasier;Tibet Terrier;Hovawart"
    $aSplit = StringSplit($Text, ";")

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

    for $i = 1 to UBound ($aSplit) - 1
    ;MsgBox(0,"",$aSplit[$i])
    ;$Idmnames[$i] = GUICtrlCreateMenuItem($aSplit[$i], $MenuItem1); das geht nicht
    $Idmnames = GUICtrlCreateMenuItem($aSplit[$i], $MenuItem1)
    next

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

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

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

    GUIDelete()
    Exit
    ;Case $idmNames[0] To $idmNames[UBound($idmNames) - 1]

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

    ;_Auswahl() ; wenn im Menü geklickt wird, wird der Eintrag in die Ini geschrieben

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

    EndSwitch

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

    WEnd

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

    Func _Auswahl()
    IniWrite("test.ini","Hunde","Rasse","Beagle"); hier sollte statt Beagle der gewählte Menüeintrag rein!
    Msgbox(0,"Auswahl","Eintrag wurde gemacht",2)
    endfunc

    [/autoit]

    Ich mußte einiges nochmal deaktivieren, weil es leider nicht klappt.

    Liebe Grüße
    Ilse ;)

  • Hallo Ilse,

    hier die bereinigte Version:

    Spoiler anzeigen
    [autoit]

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

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

    $Form1 = GUICreate("Form1", 500, 400)
    $MenuItem1 = GUICtrlCreateMenu("Texte")

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

    $Text = "Beagle;Neufundländer;Dobermann;Malteser;Rottweiler;Eurasier;Tibet Terrier;Hovawart"
    $aSplit = StringSplit($Text, ";")
    Global $idmNames[$aSplit[0] + 1]

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

    For $i = 1 To $aSplit[0]
    $idmNames[$i] = GUICtrlCreateMenuItem($aSplit[$i], $MenuItem1); das geht nicht
    ConsoleWrite($idmNames[$i] & @TAB & $aSplit[$i] & @CRLF)
    Next
    $idmNames[0] = $aSplit[0]
    ;_ArrayDisplay($idmNames)
    GUISetState()

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

    ConsoleWrite($idmNames[1] & " To " & $idmNames[$idmNames[0]] & @CRLF)

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

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

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

    GUIDelete()
    Exit
    Case $idmNames[1] To $idmNames[$idmNames[0]]
    ConsoleWrite($nMsg - $idmNames[1]+1 & @TAB)
    _Auswahl($aSplit[$nMsg - $idmNames[1]+1]) ; wenn im Menü geklickt wird, wird der Eintrag in die Ini geschrieben

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

    EndSwitch

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

    WEnd

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

    Func _Auswahl($sRasse)
    IniWrite(@ScriptDir & "\test.ini", "Hunde", "Rasse", $sRasse)
    ConsoleWrite($sRasse & @CRLF)
    EndFunc ;==>_Auswahl

    [/autoit]

    mfg autoBert

  • Hallo Autobert,

    super,

    aber es noch ein kleines Problem:
    In der Ini kommen die Einträge leider nicht an.

    In der Console sind die Einträge drin...

    Weiß auch noch nicht woran es liegt


    ;) Liebe Grüße
    Ilse

  • In der Ini kommen die Einträge leider nicht an.


    In der Ini kommt der zuletzt ausgewählte Menüpunkt an, das heisst dieser wird immer wieder überschrieben. Die Ini sieh bei mir so aus:

    Code
    [Hunde]
    Rasse=Dobermann

    Ich dachte das wäre so beabsichtigt dass "Rasse=" immer die gerade gewählte Rasse enthält.

    mfg autoBert

  • Hallo Autobert,

    das ganze wird ja per Gui aufgerufen
    wenn die Gui geöffnet ist,
    dann werden die Einträge im Menü ausgewählt, die ini wird dann geschrieben

    und wenn man fertig ist, wird die Gui geschlossen.


    ;) Grüße Ilse

  • Hallo Autobert,

    das ganze wird ja per Gui aufgerufen
    wenn die Gui geöffnet ist,
    dann werden die Einträge im Menü ausgewählt, die ini wird dann geschrieben

    und wenn man fertig ist, wird die Gui geschlossen.


    ;) Grüße Ilse

    stimmt genau bei jeder Auswahl eines Menüpunktes wird die ausgewählte Rasse in die Ini geschrieben, diese bleobt auch nach dem schlessen der GUI erhalten.

    Vielleicht erklärst du genau was du wirklich möchtest? Sollen alle Rassen in die Ini oder alle ausgewählten Menüpunkte darin in Reihenfolhe gespeichedrt werden?

    mfg autoBert

  • Hallo Autobert,

    also folgendes:
    Ich muß eine Auswahl treffen.
    D.h. das Menü stellt mir alle Punkte zur Verfügung.

    Ich muß dann von z.B. 20 Menüpunkten
    5 auswählen und diese dann in der ini speichern.
    Die Reihenfolge wäre egal.

    Liebe Grüße
    ;) Ilse

  • Hallo Ilse,

    dann tausche die Func _Auswahl gegen diese:

    [autoit]

    Func _Auswahl($sRasse) Local Static $iCount = 0
    $iCount += 1
    if $iCount > 5 Then
    MsgBox(64,"Auswahl vollständig","Du hast bereits Stück ausgewählt")
    Return
    EndIf
    IniWrite(@ScriptDir & "\test.ini", "Hunde", "Rasse"&$iCount, $sRasse)
    ConsoleWrite($iCount & ": " & $sRasse & @CRLF)
    EndFunc ;==>_Auswahl

    [/autoit]


    die INI-Dartei sieht danach so aus:

    Code
    [Hunde]
    Rasse1=Beagle
    Rasse2=Neufundländer
    Rasse3=Hovawart
    Rasse4=Eurasier
    Rasse5=Malteser

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (27. Juli 2012 um 19:23)

  • Hallo autoBert,

    super, das funktioniert prima.

    Mußte gestern leider wieder los und konnte mich
    nicht mehr melden.

    Vielen vielen Dank

    Liebe Grüße
    Ilse ;)