Case problem

  • mache gerade ein spiel aber wenn ich bei der 2.form auf ein bild klicke pasiert nichts.

    Spoiler anzeigen
    [autoit]

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

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

    $i = 200
    $du = 200
    $d = 0
    $xpvon = IniRead("Level1","123","1","")
    $xp = IniRead("xp","123","1","0")
    $Credits = IniRead("Credits","123","1","0")
    $Uridium = IniRead("Uridium","123","1","0")
    $a = $xp + "/" + $xpvon

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 773, 148, 194, 119)
    $Pic1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\Waffen Symbol fur Rechnungen.gif", 0, 48, 100, 100)
    $Pic2 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\schild.jpg", 96, 48, 76, 100)
    $Label4 = GUICtrlCreateLabel("Credits:" & $Credits, 8, 8, 190, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "Old English Text MT")
    $Label2 = GUICtrlCreateLabel("Uridium:" & $Uridium, 199, 8, 252, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "Old English Text MT")
    $Label3 = GUICtrlCreateLabel("Erfahrung:" & $xp, 452, 5, 320, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "Old English Text MT")
    $Pic3 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\Fimo Schmuck.jpg", 168, 48, 100, 100)
    $Pic4 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\a_Schwerter2.gif", 264, 48, 100, 100)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 623, 442, 192, 124)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
    $Progress1 = GUICtrlCreateProgress(40, 240, 150, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetBkColor(-1, 0xC0C0C0)
    $Progress2 = GUICtrlCreateProgress(264, 240, 150, 17)
    GUICtrlSetColor(-1, 0x3D95FF)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle
    $Pic11 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\sniper.jpg", 56, 72, 116, 164)
    $Pic21 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\snipers.jpg", 264, 72, 116, 164)
    $Label1 = GUICtrlCreateLabel($xp & "/" & $xpvon, 488, 8, 111, 27)
    GUICtrlSetFont(-1, 16, 400, 0, "Niagara Engraved")
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    #Region ### START Koda GUI section ### Form=
    $Form3 = GUICreate("Form3", 621, 61, 192, 124)
    $Pic66 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\waffenKampfpistolerechts.jpg", 0, 0, 92, 60)
    $Pic6 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\barrett_punt_50.jpg", 88, 0, 180, 60)
    $Pic7 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\1.JPG", 264, 0, 124, 60)
    $Pic8 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Andrea\Desktop\-- ----\mossberg-s.jpg", 384, 0, 236, 60)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    $nMsg = GUIGetMsg()
    Case $Pic1
    GUISetState(@SW_HIDE,$Form2)
    GUISetState(@SW_SHOW,$Form3)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic66
    MsgBox(4,"Waffe","Willst du diese Waffe wirklich für 5000 Kaufen?")
    If $Credits >= 5000 Then
    $Credits = $Credits -5000
    MsgBox(0,"Waffe","Die Waffe wurde erfolgreich gekauft.")
    Else
    MsgBox(0,"Waffe","Sie haben zu wenig Geld!")
    EndIf
    EndSwitch

    Case $Pic2

    Case $Pic3
    Case $Pic4
    $c = 0
    GUISetState(@SW_HIDE,$Form2)
    GUISetState(@SW_SHOW,$Form1)
    While $c < 1
    $c = $c +0
    $a = (Chr(Random(97, 122, 1)))
    $b = (Chr(Random(97, 122, 1)))

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

    If $a = "w" Or $a = "a" Then
    If $du <= 0 Then
    MsgBox(0, "", "Gewonnen")
    $xp = $xp +20
    $Credits = $Credits +400
    $Uridium = $Uridium +1
    GUICtrlSetData($Label1,$xp & "/" & $xpvon)
    IniWrite("xp","123","1",$xp)
    $i = 100
    $du = 100
    $c = 1
    GUISetState(@SW_HIDE,$Form1)
    GUISetState(@SW_SHOW,$Form2)
    GUICtrlSetData($Label4, "Credits:" & $Credits )
    GUICtrlSetData($Label2, "Uridium:" & $Uridium)
    GUICtrlSetData($Label3, "Erfahrung:" & $xp)
    EndIf
    If $i <=0 Then
    MsgBox(0, "", "Game Over")
    If Not($xp <=0) Or Not($xp = 0) Then
    $xp = $xp -10
    GUICtrlSetData($Label1,$xp & "/" & $xpvon)
    IniWrite("xp","123","1",$xp)
    EndIf
    $c = 1
    $i = 100
    $du = 100
    GUISetState(@SW_HIDE,$Form1)
    GUISetState(@SW_SHOW,$Form2)
    $Credits = $Credits -200
    GUICtrlSetData($Label4, "Credits:" & $Credits )
    GUICtrlSetData($Label3,"Erfahrung:" & $xp)
    EndIf
    If $d = 2 Then $i = $i - 0.5
    If $d = 1 Then $du = $du - 0.5

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

    If Not ($du >= 0) Then MsgBox(0, "", "Gewonnen")
    EndIf
    If $d = 2 Then
    $d = -1
    EndIf
    $d = $d + 1
    GUICtrlSetData($Progress1, $i)
    GUICtrlSetData($Progress2, $du)
    WEnd
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    hoffe ihr könnt mir helfen

    • Offizieller Beitrag

    Bei mehreren GUIs brauchst Du den advanced Modus von GUIGetMsg, um die einzelnen GUIs getrennt auswerten zu können.
    Ich würde Dir aber raten gleich auf den OnEvent-Mode zu wechseln. Der ist bei mehreren GUIs deutlich einfacher zu handhaben und es gibt auch nicht die Probleme mit der dynamischen Prozessorlast.

    Dein Beispiel kann so keiner nachvollziehen, weil Du absolute Pfade (die gibt es so nur bei Dir) benutzt und die Bilder nicht mitlieferst. Auch das verwenden von Nicht-Standard-Fonts kann zu Anzeigeproblemen bei anderen Benutzern führen.

  • Hallo manuel6000,

    ohne Bilder kann man dein Skript nicht testen und die meisten (ich auch) sind zu bequem sich selbst welche zu suchen.
    Deshalb hier ein allgemeines Beispiel für den Umgang mit mehreren GUIs im Message-Loop Modus:

    Spoiler anzeigen
    [autoit]

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

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

    Global $idGui1, $idGui2=-99, $idMsgBox, $idZurueck, $idbtnExit2
    _CreateGui2() ;entweder hier oder erst wenn benötigt ($idbtmToGui2 Klick)

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

    $idGui1 = GUICreate('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $idGui1 gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    $idbtnToGui2 = GUICtrlCreateButton('&Aufruf GUI 2', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    $idbtnICQ = GUICtrlCreateButton('&ICQ', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "ICQ" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    $idbtnExit1 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    GUISetState(@SW_SHOW, $idGui1)

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

    While 1
    $nMsg = GUIGetMsg(1) ;extended Modus wichtig!!
    Switch $nMsg[1] ;für welches Fenster ist die Message
    Case $idGui1 ;ab hier ist Gui 1 dran
    Switch $nMsg[0] ;welche Message wurde ausgelöst
    Case $idbtnToGui2
    GUISetState(@SW_Hide, $idGui1) ;Gui 1 verstecken, damit nur Gui2 sichtbar ist und bearbeitet werden kann
    ;If $idGui2 = -99 Then _CreateGui2() ;nur wenn nicht am Anfang bereits erzeugt nötig, dann auf Vorbelegung der Variable in Global achten)
    GUISetState(@SW_SHOW, $idGui2) ;Gui 2 anzeigen
    Case $idbtnICQ
    MsgBox(0,"","Jetzt würde ICQ gestartet")
    ;Run("C:\Program Files\ICQ7.0\ICQ.exe")
    Case $idbtnExit1, $GUI_EVENT_CLOSE
    _end()
    EndSwitch
    Case $idGui2 ;ab hier ist Gui 2 dran
    Switch $nMsg[0] ;welche Message wurde ausgelöst
    Case $idMsgBox
    MsgBox(0, 'Test', 'Test', 0, $idGui2)
    Case $idZurueck, $GUI_EVENT_CLOSE
    GUISetState(@SW_Show, $idGui1) ;Gui 1 wieder anzeigen
    GUISetState(@SW_HIDE, $idGui2) ;Gui 2 verstecken
    Case $idbtnExit2
    _end()
    EndSwitch
    EndSwitch
    WEnd

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

    Func _CreateGui2()
    $idGui2 = GUICreate('GUI 2', 500, 300, 200, 50, -1, -1, $idGui1) ;wichtig ist der letzte Parameter
    ;erzeugt eine GUI als Child von Gui1, die zurückgebebene ID wird in der Variablen $idGui2 gespeichert

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

    $idMsgBox = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "MsgBox" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    $idZurueck = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "zurück" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

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

    $idbtnExit2 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "beenden" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    EndFunc ;==>_CreateGui2

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

    Func _end()
    GUIDelete($idGui2)
    GUIDelete($idGui1)
    Exit
    EndFunc ;==>_end

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

    sind zwar Buttons aber das chema ist das gleiche. In der Regel benötigt man auch bei mehreren GUIs nur 1

    [autoit]

    GuiGetMsg

    [/autoit]

    Abfrage.
    Du solltest dir aber auch den OnEvent-Modus anschauen, vielleicht kommst du ja damit besser zurecht. Hier das gleiche Skript im OnEvent-Modus:

    Spoiler anzeigen
    [autoit]

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

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

    Opt('GUIOnEventMode', 1)

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

    $cidGui1 = GUICreate('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $cidGui1 gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    $cidbtnToGui2 = GUICtrlCreateButton('&Aufruf GUI 2', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_CallGui2')
    ;Beim Klicken des Buttons wird die Funktion _CallGui2 aufgerufen

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

    $cidbtnICQ = GUICtrlCreateButton('&ICQ', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "ICQ" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_RunICQ')
    ;Beim Klicken des Buttons wird die Funktion _RunICQ aufgerufen

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

    $cidbtnExit1 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_End')
    ;Beim Klicken des Buttons wird die Funktion _END aufgerufen

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

    $cidGui2 = GUICreate('GUI 2', 500, 300, 200, 50, -1, -1, $cidGui1)
    ;erzeugt eine GUI als Child von Gui1, die zurückgebebene ID wird in der Variablen $cidGui2 gespeichert
    GUISetOnEvent($GUI_EVENT_CLOSE, '_BackToGui1')

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

    $cidButton1 = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "MsgBox" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_MsgBox')
    ;Beim Klicken des Buttons wird die Funktion _MsgBox aufgerufen

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

    $cidButton2 = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "zurück" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_BackToGui1')
    ;Beim Klicken des Buttons wird die Funktion _BackToGui1 aufgerufen

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

    $cidbtnExit2 = GUICtrlCreateButton('be&enden', 20, 80, 100, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
    ;verankert den Button "Afruf Gui 2" links und oben und fixiert die Größe
    ;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
    GUICtrlSetOnEvent(-1, '_End')
    ;Beim Klicken des Buttons wird die Funktion _END aufgerufen
    GUISetState(@SW_SHOW, $cidGui1)

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _end()
    GUIDelete($cidGui2)
    GUIDelete($cidGui1)
    Exit
    EndFunc ;==>_end

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

    Func _CallGui2()
    GUISetState(@SW_HIDE, $cidGui1) ;entweder so
    ;GUISetState(@SW_DISABLE, $cidGui1) ;oder so dann bleibt die 1. Gui sichtbar ist aber nicht aktriv
    GUISetState(@SW_SHOW, $cidGui2)
    EndFunc ;==>_CallGui2

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

    Func _RunICQ()
    MsgBox(0, "", "Jetzt würde ICQ gestartet")
    ;Run("C:\Program Files\ICQ7.0\ICQ.exe")
    EndFunc ;==>_RunICQ

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

    Func _BackToGui1()
    GUISetState(@SW_SHOW, $cidGui1) ;nur nötig falls Gui versteckt
    ;GUISetState(@SW_ENABLE, $cidGui1) ;nur nötig falls Gui DISABLEd
    GUISetState(@SW_HIDE, $cidGui2)
    EndFunc ;==>_BackToGui1

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

    Func _MsgBox()
    MsgBox(0, 'Test', 'Test', 0, $cidGui2)
    EndFunc ;==>_MsgBox

    [/autoit]

    mfg autoBert

    mfg autoBert