GUI Menüwechsel bei Schleife

  • Hallo,

    Ich würde gerne wissen, wie ich es schaffe, bei diesem Code

    Spoiler anzeigen
    [autoit]

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

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

    Case $MenuItem1

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

    $go = 100

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

    While 1

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

    If $go = 100 Then

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

    ; Code

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

    ElseIf Bedingung Then
    ExitLoop
    EndIf
    WEnd

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

    Case $MenuItem2

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

    Case $MenuItem3

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

    Case $MenuItem4

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

    Case $MenuItem5

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

    Case $okayvideoadd

    Case $Add

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

    Case $Delete

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

    Case $Refresh

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

    EndSwitch
    WEnd

    [/autoit]

    Das Menü zu wechseln, wenn sich der Code in der Schleife befindet? Für jedes Case hab ich natürlich noch HIDE's und SHOW's eingebaut, aber das ganze Script ist ja nicht nötig. Wenn ich auf Menü 1 klicke, dann startet die Schleife. Wenn ich aber das Menü wechsel, dann funktioniert dies nicht, da sich das Programm immernoch in der While Schleife befindet.

    Welche Bedingung muss ich für ElseIf angeben, damit das wechseln der Cases/Menüs funktioniert?

    Vielen Dank schonmal im voraus für die Hilfe.

    Gruss sh0r7y

    Einmal editiert, zuletzt von sh0r7y (21. April 2011 um 21:12)

    • Offizieller Beitrag
    Zitat

    Das Menü zu wechseln, wenn sich der Code in der Schleife befindet? Für jedes Case hab ich natürlich noch HIDE's und SHOW's eingebaut, aber das ganze Script ist ja nicht nötig.


    Der ganze Code wäre aber sinnvoll, da deine Problembeschreibung alsolut unverständlich(ungenügend) ist.

  • Der ganze Code umfasst über 1000 Zeilen. Nimm es mir nicht übel, aber würde den Code ungerne releasen.

    Hier mal ein BeispielCode

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 192, 124)
    $MenuItem1 = GUICtrlCreateMenu("MenuItem1")
    $MenuItem3 = GUICtrlCreateMenuItem("MenuItem3", $MenuItem1)
    $MenuItem2 = GUICtrlCreateMenu("MenuItem2")
    $MenuItem4 = GUICtrlCreateMenuItem("MenuItem4", $MenuItem2)
    $Label1 = GUICtrlCreateLabel("menu1", 24, 64, 36, 17)
    $Label2 = GUICtrlCreateLabel("Menu2", 16, 112, 37, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    Case $MenuItem3
    GUICtrlSetState($Label1,$GUI_SHOW)
    GUICtrlSetState($Label2,$GUI_HIDE)
    $go = 100

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

    While 1
    If $go = 100 Then
    ; Code ausführen

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

    ElseIf clickonMenuItem4 Then
    ExitLoop
    EndIf
    WEnd

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

    Case $MenuItem4
    GUICtrlSetState($Label1,$GUI_HIDE)
    GUICtrlSetState($Label2,$GUI_SHOW)

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

    EndSwitch
    WEnd

    [/autoit]

    Wenn ich nach MenuItem3 wechsel, geht er in die Schleife. Danach kann ich nicht mehr nach MenuItem4 wechseln. Dies soll aber möglich sein. Wie stelle ich das an?

    • Offizieller Beitrag

    Solange der Code nach dem Case ausgeführt wird, regiert das Menü generell nicht.
    Da kannst du eigentlich nicht daran machen.
    Erst wenn dein cript die innere While Wend Schleife verläßt wird die äussere abgearbeitet.
    Du könntest zum OnEventMode wechseln, da wird das Event aber auch erst abgearbeitet wenn die While Wend Schleife verlassen wird.

  • Dann frag halt guigetmsg einfach in deiner inneren Endlosschleife ab:

    [autoit]


    ´ While 1
    If $go = 100 Then
    ; Code ausführen
    endif
    If guigetmsg() = $MenuItem4 Then ExitLoop
    WEnd

    [/autoit]

  • Hey, damit lässt sich gut etwas anfangen. Vielen Dank misterspeed!

    • Offizieller Beitrag
    Zitat

    Dann frag halt guigetmsg einfach in deiner inneren Endlosschleife ab:


    Das funzt aber nur, wenn der ausgeführte Code nicht zu lange läuft, GUIGetMsg ist nicht gebuffert.
    Events werden nur ausgewertet, wenn das Scipt gerade GUIGetMsg ausführt. :!: