Absturtz

  • Hay
    Ich wollte Fragen warum der Skript abstürtzt wenn ich das 2.Fenster schließe?
    Und die macht man es richtig?

    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("1", 116, 26, 192, 124)
    $Button1 = GUICtrlCreateButton("1", 0, 0, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Test()
    EndSwitch
    WEnd

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

    Func Test()
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("2", 116, 26, 192, 124)
    $Button2 = GUICtrlCreateButton("2", 0, 0, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd
    Endfunc

    [/autoit]

    Gruß Diegorn

  • Stürzt es ab oder hängt es sich nur auf?
    Das aufhängen liegt dadran, dass er in der Funktion TEST()
    ist und auf ein Schließen-Event wartet. Da zu dem Zeitpunkt jedoch die GUI
    gelöscht ist, aber die Schleife NICHT verlassen wurde, reagiert das GUIGETMSG
    aus der GUI1 nicht.
    D.h. du musst erst die Schleife/Funktion TEST() verlassen, damit du Eventnachrichten
    von GUI1 emfangen kannst.
    Überarbeiteter Code (Achtung: Ich habe die Breite der GUIS um 100pxl erweitert):

    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("1", 216, 26, 192, 124)
    $Button1 = GUICtrlCreateButton("1", 0, 0, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Test()
    EndSwitch
    WEnd

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

    Func Test()
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("2", 216, 26, 192, 124)
    $Button2 = GUICtrlCreateButton("2", 0, 0, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete($Form2)
    ExitLoop

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

    EndSwitch
    WEnd
    Endfunc

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Also bei mir stürzt nichts, ab, aber ich würds so machen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $Form1, $Form2, $Button1, $Button2 ; Natürlich Variablen vorher anlegen, weil GUIs in einer Funktion erstellt werden
    _CreateGUIs() ; GUI's alle gleichzeitig erstellen.

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

    While 1
    $nMsg = GUIGetMsg(1) ; Erweiterter GUIGetMsg Mode (s. Hilfe)
    Switch $nMsg[0] ; Welches Ereignis?
    Case $GUI_EVENT_CLOSE ; GUI_EVENT_CLOSE
    If $nMsg[1] = $Form1 Then Exit ; Wenn die nachricht von Form1 kam, dann beende.
    GUISetState(@SW_HIDE, $nMsg[1]) ; Wenn das Script noch läuft (also die nachricht nicht von Form1 kam), einfach das GUI verstecken, von dem die Nachricht kam.
    Case $Button1 ; Wenn Button 1 gedrückt,
    GUISetState(@SW_SHOW, $Form2) ; Zeige Form2 an.
    EndSwitch
    WEnd

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

    Func _CreateGUIs()
    $Form1 = GUICreate("1", 116, 26, 192, 124)
    $Button1 = GUICtrlCreateButton("1", 0, 0, 75, 25, 0)

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

    $Form2 = GUICreate("2", 116, 26, 192, 124)
    $Button2 = GUICtrlCreateButton("2", 0, 0, 75, 25, 0)

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

    GUISetState(@SW_SHOW, $Form1)
    EndFunc ;==>_CreateGUIs

    [/autoit]
  • SO ncoh ne Frage ^^
    kann ich z.b.

    Send("Hallo")

    schreiben.
    Dann wird es ja hingeschreiben.
    Aber ich möchte das dass "übersprungen" wir
    so das der Text sofort erscheint.
    Geht das?

    Wer Karol kennt:

    Spoiler anzeigen

    Da gibt es so ein befehl der heiß "Schnell"/"Langsam"
    Alles was da zwischen steht wird dann sofort gemacht so das man es ncih sieht.