Hauptmenü per Case oder per Guictrlsetonevent => Problem

  • Hi Leute ich bins nochmal!

    Hab schon wieder ein Problem, mit einem Script.

    Unzwar will ich eine Art Hauptmenü vor einer Funktion schalten,
    aber es geht nicht....das Script:

    Spoiler anzeigen
    [autoit]


    #include
    #include
    #include
    #include

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

    Opt("GUIOnEventMode", 1)

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

    #region Variabeln werden später genutzt
    Global $Button2, $Button3, $Button4, $Button5, $Player
    Global $y1 = -182, $y2 = 0, $y1a = 182, $y2a = 365 ; yHindernisse
    Global $x1 = Random(20, 400, 50), $x2 = Random(20,400,50), $x1a = Random(20,400,50), $x2a = Random(20,400,50) ;xHindernisse

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

    Global $yPlayer = 700, $xPlayer = 216 ; xyPlayer
    #endregion
    $Fenstermain = GUICreate("", 403, 476, 359, 214, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))

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

    $Exit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($Exit, "Ende")

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

    $Startbutton = GUICtrlCreateButton("Start", 20, 100)
    ;~ GUICtrlSetOnEvent($Startbutton, "_Playgui")

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $startbutton
    MsgBox(64, "start", "hier sollte die 'Play' funktion gestartet werden") ;wird nicht ausgeführt...
    EndSwitch
    Sleep(5)
    WEnd

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

    ;...

    [/autoit]

    Weiß jemand wieso erst gar nicht die msgbox ausgeführt wird?
    danke im Voraus!


    Gruß
    Buckiuxx

    Einmal editiert, zuletzt von Buckiuxx (26. Juni 2010 um 18:23)

  • aber weiso ging denn dann nich das guictrlsetonevent(Startbutton, ...)

    (Ausgeklammert, Zeil20/21)

    Bei mir hat das auch nicht funktioniert...

  • ok vllt etwas einfacher gesagt:

    sobald du den OnEvent Modus mit: Opt("GUIOnEventMode", 1) aktivierst
    ist ihm das total egal:

    [autoit]


    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $startbutton
    MsgBox(64, "start", "hier sollte die 'Play' funktion gestartet werden") ;wird nicht ausgeführt...
    EndSwitch

    [/autoit]

    Also:
    Entweder du verwendest für die Ganze GUI OnEvent oder für die Ganze GUI GetMsg

  • jahaa...
    hab's geschnallt...
    aber wieso funktioniert der denn nicht?:

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    $Fenstermain = GUICreate("", 403, 476, 359, 214, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Exit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($Exit, "Ende")
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Main.jpg", 0, 0, 403, 476, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))

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

    $Startbutton = GUICtrlCreateButton("Start", 20, 100)
    GUICtrlSetOnEvent($Startbutton, "_Play")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(5)
    WEnd

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

    Func _Play()

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

    ;...
    EndFunc

    [/autoit]
  • danke
    das Klappt schon gut.
    Ich will aber nicht auf das Bild verzichten...
    Kann ich denn das Bild als Hintergrund einbinden oä?

  • nun wo ich die Funktion ausführen kann
    habe ich ein neues Problem entdeckt...

    In der Funktion 'Play' wird eine neue GUI erstellt,
    die aber nicht auf GUICTRLSETONEVENT zum beenden reagiert...
    weiß jemand hier eine Lösung?

  • nun wo ich die Funktion ausführen kann
    habe ich ein neues Problem entdeckt...

    In der Funktion 'Play' wird eine neue GUI erstellt,
    die aber nicht auf GUICTRLSETONEVENT zum beenden reagiert...
    weiß jemand hier eine Lösung?


    poste doch einfach deinen aktuellen Skriptstand, oder sind wir hier bei Rate mal mit Rosenthal,

    mfg (Auto)Bert

  • OMG...
    Ich hatte gerade keine Zeit das zu Posten und da kommt man gleich mit sonem geilen Kommentar...
    Auf was für'n Niveau sind wir denn hier?...alter...

    Für alle anderen die helfen wollen
    hier noch einmal das bisherige Script:

    Spoiler anzeigen
    [autoit]


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

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

    Opt("GUIOnEventMode", 1)

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

    Global $Exit, $pExit

    $Fenstermain = GUICreate("", 403, 476, 359, 214, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Exit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($Exit, "Ende")
    GUICtrlCreatePic(@scriptdir & "\Main.jpg",0, 0, 401, 473, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Startbutton = GUICtrlCreateButton("Start", 20, 100)
    GUICtrlSetOnEvent($Startbutton, "_Play")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(5)
    WEnd

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

    Func _Play()
    Sleep(300)
    GUIDelete()

    HotKeySet("{Right}", "_Right")
    HotKeySet("{Left}", "_Left")

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

    $Form1 = GUICreate("GUI", 403, 800, 359, 12, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))
    $pExit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($pExit, "Ende")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(3)
    _Movement_Hindernisse() ;weiter unten im Script...funktioniert...(in den funktionen kommt kein while oder sleep vor daran liegt es also auch nicht.)
    _Check_Playerfail() ;weiter unten im Script...funktioniert...(in den funktionen kommt kein while oder sleep vor daran liegt es also auch nicht.)
    WEnd

    EndFunc

    Func Ende()
    Exit
    EndFunc

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

    ;...

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


    Das Problem liegt in Zeile 34/35
    Die Funktion 'Ende' wird, trotz Guictrlsetonevent, nicht ausgeführt

  • @threadstarter dein script funkt nur hast du einen rechtsschreibfehler bei $startscript und $startscript deshalb geht das nich nur ein rehctschreibfehler....

  • ich habs dir mal sauber gemacht:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $Fenstermain = GUICreate("", 403, 476, 359, 214, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS))
    $Exit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($Exit, "Ende")
    GUICtrlCreatePic(@ScriptDir & "\Main.jpg", 0, 0, 401, 473, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Startbutton = GUICtrlCreateButton("Start", 20, 100)
    GUICtrlSetOnEvent($Startbutton, "_Play")
    GUISetState(@SW_SHOW, $Fenstermain)

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

    $Form1 = GUICreate("GUI", 403, 800, 359, 12, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS))
    $pExit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($pExit, "Ende")
    GUISetState(@SW_HIDE, $Form1)

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

    While 1
    Sleep(10)
    WEnd

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

    Func Ende()
    Exit
    EndFunc

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

    Func _Play()
    GUISetState(@SW_HIDE, $Fenstermain)
    GUISetState(@SW_SHOW, $Form1)
    EndFunc

    [/autoit]

    Übrigens bin ich der Meinung, das das Niveau dieses Forums sehr hoch ist.
    Zumindest was die Qualität und die Schnelligkeit der Antworten betrifft.

    Und ich stimme Autobert zu, ohne Script können wir nur raten um was es geht...

  • ich meinte nichts anderes als ihn...sry wenn ihr euch angesprochen gefühlt habt...

    ...und...danke

  • ich kann einfach keinen Fehler finden.

    Entscheidende Unterschiede zwischen Meinem Post und korrigierten Post erkenne ich nicht...

    ...kann jemand helfen?

  • Es klappt, wenn du statt

    [autoit]

    GUICtrlCreatePic(@scriptdir & "\Main.jpg",0, 0, 401, 473, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)

    [/autoit]


    es so schreibst:

    [autoit]

    $main=GUICtrlCreatePic(@scriptdir & "\Main.jpg",0, 0, 401, 473, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState($main, $GUI_DISABLE)

    [/autoit]
  • Hallo Buckiuxx,

    der entscheidende Unterschied: das Skript von Schnitzel hat nur 1 Endlosschleife, du aber 2 . Da die Funktion _Play über einen Event aufgerufen wird und diese durch deine 2. Endlosschleife nie verlassen wird, ist das Skript blockiert. Mach es so und es klappt:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    Global $Form1 = -99

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

    $Fenstermain = GUICreate("", 403, 476, 359, 214, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Exit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($Exit, "Ende")
    GUICtrlCreatePic(@scriptdir & "\Main.jpg",0, 0, 401, 473, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Startbutton = GUICtrlCreateButton("Start", 20, 100)
    GUICtrlSetOnEvent($Startbutton, "_Play")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(5)
    IF $Form1 <> -99 Then
    ;_Movement_Hindernisse() ;weiter unten im Script...funktioniert...(in den funktionen kommt kein while oder sleep vor daran liegt es also auch nicht.)
    ;_Check_Playerfail() ;weiter unten im Script...funktioniert...(in den funktionen kommt kein while oder sleep vor daran liegt es also auch nicht.)
    EndIf
    WEnd

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

    Func _Play()
    Sleep(300)
    GUIDelete()

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

    ;HotKeySet("{Right}", "_Right")
    ;HotKeySet("{Left}", "_Left")

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

    $Form1 = GUICreate("GUI", 403, 800, 359, 12, BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_GROUP));,$WS_CLIPSIBLINGS))
    $pExit = GUICtrlCreatePic(@ScriptDir & "\Exit.jpg", 326, 0, 77, 38);, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetOnEvent($pExit, "Ende")

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

    GUISetState(@SW_SHOW)

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

    #cs
    While 1
    Sleep(3)
    WEnd
    #ce

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

    EndFunc

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

    Func Ende()
    Exit
    EndFunc

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

    ;...

    [/autoit]

    mfg (Auto)Bert

  • ok...
    so klappt es

    Gibt es wirklich keine andere Möglichkeit, ohne auf die Schleife zu verzichten?

    Danke an alle beteiligten Helfer!