Schleife stoppen und das Bild, welches derzeit genommen wurde, da lassen

  • Guten Tag,

    ich komme hier nicht weiter. Ich möchte, dass er meine While Schleife stoppt und das Bild, welches gerade genommen wurde, da stehen lässt.

    Er ändert immer die Bilder und wenn man nochmal auf " Los " klickt, dann soll er halt stoppen und das Bild, welches gerade dran ist, da stehen lassen

    Script :

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 487, 151, 192, 124, $WS_POPUP)
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Data\Test.jpg", -24, 0, 519, 80, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\Data\Start.jpg", 16, 88, 197, 60, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic3 = GUICtrlCreatePic(@ScriptDir & "\Data\exit.jpg", 272, 88, 197, 60, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic3
    Exit
    Case $Pic2
    GUISetState(@SW_HIDE)
    $Form1 = GUICreate("Form1", 229, 309, 192, 124)
    $Pic4 = GUICtrlCreatePic(@ScriptDir & "\Data\Los.jpg", 16, 224, 200, 80, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic4
    while 1
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Data\Rot.jpg", 96, 16, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic1,$GUI_HIDE)
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\Data\blau.jpg", 96, 16, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic2,$GUI_HIDE)
    $Pic3 = GUICtrlCreatePic(@ScriptDir & "\Data\schwarz.jpg", 96, 16, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic3,$GUI_HIDE)
    $Pic4 = GUICtrlCreatePic(@ScriptDir & "\Data\rot.jpg", 97, 86, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic4,$GUI_HIDE)
    $Pic33 = GUICtrlCreatePic(@ScriptDir & "\Data\blau.jpg", 97, 86, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic33,$GUI_HIDE)
    $Pic6 = GUICtrlCreatePic(@ScriptDir & "\Data\schwarz.jpg", 97, 86, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic6,$GUI_HIDE)
    $Pic7 = GUICtrlCreatePic(@ScriptDir & "\Data\Rot.jpg", 97, 157, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic7,$GUI_HIDE)
    $Pic8 = GUICtrlCreatePic(@ScriptDir & "\Data\blau.jpg", 97, 157, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic8,$GUI_HIDE)
    $Pic9 = GUICtrlCreatePic(@ScriptDir & "\Data\Schwarz.jpg", 97, 157, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    sleep (200)
    GUICtrlSetState($Pic9,$GUI_HIDE)
    GUISetState(@SW_SHOW)
    WEnd
    EndSwitch
    WEnd

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

    EndSwitch
    WEnd

    [/autoit]
  • Also zuerst einmal überschreibst du die $Pic4-Variable.

    Daraufhin hat ein Klick auf "los" keinen Einfluss mehr.
    Außerdem würde ich die Bilder in ein Array speichern und per While hochzählen.
    Denn dein Programm erzeugt imemr wieder das gleiche Bild. Frisst resourcen ohne Ende!

    Speicher die bilder einmal bei Funktionsaufruf in einArray.

    Dann nochmal eine guigetmsg-Abfrage einbauen (sonst läuft das Programm ewig)!

  • Habe dein code mal kurz verändert.

    Ob dieser tut weiß ich nicht. Habe ihn nur schnell mal hingeschrieben und keine Bilder parat zum testen!

    Spoiler anzeigen
    [autoit]

    ;Includes
    #include-once
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    ;Globale Variable
    Global $Pic[9], $MomentPicture = ""

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

    For $i = 0 to UBound($Pic) - 1 Step 1
    GUICtrlSetState($Pic[$i],$GUI_HIDE)
    Next

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

    ;MainGui
    $Form1 = GUICreate("Form1", 487, 151, 192, 124, $WS_POPUP)
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Data\Test.jpg", -24, 0, 519, 80, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\Data\Start.jpg", 16, 88, 197, 60, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic3 = GUICtrlCreatePic(@ScriptDir & "\Data\exit.jpg", 272, 88, 197, 60, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic3
    Exit
    Case $Pic2
    GUISetState(@SW_HIDE)
    $Form1 = GUICreate("Form1", 229, 309, 192, 124)

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

    ;Initialisierung
    $Pic[0] = GUICtrlCreatePic(@ScriptDir & "\Data\Rot.jpg", 96, 16, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[1] = GUICtrlCreatePic(@ScriptDir & "\Data\blau.jpg", 96, 16, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[2] = GUICtrlCreatePic(@ScriptDir & "\Data\schwarz.jpg", 96, 16, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[3] = GUICtrlCreatePic(@ScriptDir & "\Data\rot.jpg", 97, 86, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[4] = GUICtrlCreatePic(@ScriptDir & "\Data\blau.jpg", 97, 86, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[5] = GUICtrlCreatePic(@ScriptDir & "\Data\schwarz.jpg", 97, 86, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[6] = GUICtrlCreatePic(@ScriptDir & "\Data\Rot.jpg", 97, 157, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[7] = GUICtrlCreatePic(@ScriptDir & "\Data\blau.jpg", 97, 157, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic[8] = GUICtrlCreatePic(@ScriptDir & "\Data\Schwarz.jpg", 97, 157, 50, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))

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

    $Pic4 = GUICtrlCreatePic(@ScriptDir & "\Data\Los.jpg", 16, 224, 200, 80, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic4
    if $MomentPicture <> "" then GUICtrlSetState($MomentPicture,$GUI_HIDE)
    $i = 0
    while 1
    $i = $i + 1
    if $i > 8 then $i = 0
    if GUIGetMsg() = $Pic4 then ExitLoop
    WEnd
    GUICtrlSetState($Pic[$i],$GUI_SHOW)
    EndSwitch
    WEnd
    EndSwitch
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von 4Soldier93 (23. Juli 2011 um 13:29)

  • Danke für die Hilfe, aber es funktioniert leider nicht.

    Könnte mir da bitte jemand helfen?