Script geht nicht weiter nach öffnen zweiter Form

  • Hab ein Script das eine zweite Form über einen Button startet gemacht startet gemacht….
    Aber nach dem öffnen ( und Schließen der zweiten Form ) geht mein Script einfach nicht weiter….

    So sieht mein Script momentan aus:

    Spoiler anzeigen
    [autoit]

    ;~ ---------------------------------------------------------erste Form-----------------------------------------------------------------------

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

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Tastatur", 598, 257, 192, 157)

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

    $q = GUICtrlCreateButton("q", 16, 88, 35, 33, $WS_GROUP)
    $w = GUICtrlCreateButton("w", 48, 88, 35, 33, $WS_GROUP)
    $e = GUICtrlCreateButton("e", 80, 88, 35, 33, $WS_GROUP)
    $r = GUICtrlCreateButton("r", 112, 88, 35, 33, $WS_GROUP)
    $t = GUICtrlCreateButton("t", 144, 88, 35, 33, $WS_GROUP)
    $z = GUICtrlCreateButton("z", 176, 88, 35, 33, $WS_GROUP)
    $u = GUICtrlCreateButton("u", 208, 88, 35, 33, $WS_GROUP)
    $i = GUICtrlCreateButton("i", 240, 88, 35, 33, $WS_GROUP)
    $o = GUICtrlCreateButton("o", 272, 88, 35, 33, $WS_GROUP)
    $p = GUICtrlCreateButton("p", 304, 88, 35, 33, $WS_GROUP)
    $u2 = GUICtrlCreateButton("ü", 336, 88, 35, 33, $WS_GROUP)
    $a = GUICtrlCreateButton("a", 24, 120, 35, 33, $WS_GROUP)
    $s = GUICtrlCreateButton("s", 56, 120, 35, 33, $WS_GROUP)
    $d = GUICtrlCreateButton("d", 88, 120, 35, 33, $WS_GROUP)
    $f = GUICtrlCreateButton("f", 120, 120, 35, 33, $WS_GROUP)
    $g = GUICtrlCreateButton("g", 152, 120, 35, 33, $WS_GROUP)
    $h = GUICtrlCreateButton("h", 184, 120, 35, 33, $WS_GROUP)
    $j = GUICtrlCreateButton("j", 216, 120, 35, 33, $WS_GROUP)
    $k = GUICtrlCreateButton("k", 248, 120, 35, 33, $WS_GROUP)
    $l = GUICtrlCreateButton("l", 280, 120, 35, 33, $WS_GROUP)
    $o2 = GUICtrlCreateButton("ö", 312, 120, 35, 33, $WS_GROUP)
    $a2 = GUICtrlCreateButton("ä", 344, 120, 35, 33, $WS_GROUP)
    $y = GUICtrlCreateButton("y", 32, 152, 35, 33, $WS_GROUP)
    $x = GUICtrlCreateButton("x", 64, 152, 35, 33, $WS_GROUP)
    $c = GUICtrlCreateButton("c", 96, 152, 35, 33, $WS_GROUP)
    $v = GUICtrlCreateButton("v", 128, 152, 35, 33, $WS_GROUP)
    $b = GUICtrlCreateButton("b", 160, 152, 35, 33, $WS_GROUP)
    $n = GUICtrlCreateButton("n", 192, 152, 35, 33, $WS_GROUP)
    $m = GUICtrlCreateButton("m", 224, 152, 35, 33, $WS_GROUP)
    $komma = GUICtrlCreateButton(",", 256, 152, 35, 33, $WS_GROUP)
    $punkt = GUICtrlCreateButton(".", 288, 152, 35, 33, $WS_GROUP)
    $Enter = GUICtrlCreateButton("Enter", 320, 152, 67, 33, $WS_GROUP)
    $Select = GUICtrlCreateButton("Select", 13, 24, 70, 33, $WS_GROUP)
    $Leertaste = GUICtrlCreateButton("Leertaste", 40, 184, 331, 33, $WS_GROUP)
    $grossKlein = GUICtrlCreateButton("^", 504, 208, 75, 33, $WS_GROUP)
    $back = GUICtrlCreateButton("<-", 504, 176, 75, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Select
    Sleep ( 3000 )
    $Input1 = WinGetTitle("[active]")

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

    $hHandle = WinGetHandle($Input1)

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

    $Input2 = ControlGetFocus($Input1)
    ;~ ---------------------------------------------------zweite Form--------------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Tastatur = GUICreate("Tastatur", 478, 182, 195, 124)
    $ZielfensterFestgelegt = GUICtrlCreateLabel("Zielfenster festgelegt.", 16, 16, 102, 25)
    $Control = GUICtrlCreateLabel("Control:", 16, 64, 53, 25)
    $Label1 = GUICtrlCreateLabel( $Input2&"", 104, 64, 348, 25)
    $Titel = GUICtrlCreateLabel("Titel:", 16, 112, 56, 33)
    $Label2 = GUICtrlCreateLabel($Input1&"", 104, 112, 356, 33)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    GUIDelete()

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

    EndSwitch
    WEnd

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

    ;~ ------------------------------------------------------Funcs erste form--------------------------------------------------------------------------------
    Case $a2
    ControlSend ($Input1, "", $Input2, "ä", 0 )

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

    Case $o2
    ControlSend ( $Input1, "", $Input2, "ö", 0 )

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

    Case $u2
    ControlSend ($Input1, "", $Input2, "ü", 0 )

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

    Case $komma
    ControlSend ( $Input1, "", $Input2, ",", 0 )

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

    Case $punkt
    ControlSend ( $Input1, "", $Input2, ".", 0 )

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

    Case $grossKlein
    ControlSend ( $Input1, "", $Input2, "{CAPSLOCK on}", 0 )

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

    Case $back
    ControlSend ( $Input1, "", $Input2, "{BACKSPACE}", 0 )

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

    Case $Enter
    ControlSend ( $Input1, "", $Input2, "{ENTER}", 0 )

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

    Case $Leertaste

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

    ControlSend ( $Input1, "", $Input2, " ", 0 )

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

    case $a

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

    ControlSend ( $Input1, "", $Input2, "a", 0 )

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

    Case $b

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

    ControlSend ( $Input1, "", $Input2, "b", 0 )

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

    Case $c

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

    ControlSend ($Input1, "", $Input2, "c", 0 )

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

    Case $d

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

    ControlSend ( $Input1, "", $Input2, "d", 0 )

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

    Case $e

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

    ControlSend ( $Input1, "", $Input2, "e", 0 )

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

    Case $f

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

    ControlSend ( $Input1, "", $Input2, "f", 0 )

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

    Case $g

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

    ControlSend ( $Input1, "", $Input2, "g", 0 )

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

    Case $h

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

    ControlSend ( $Input1, "", $Input2, "h", 0 )

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

    Case $i

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

    ControlSend ( $Input1, "", $Input2, "i", 0 )

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

    Case $j

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

    ControlSend ( $Input1, "", $Input2, "j", 0 )

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

    Case $k

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

    ControlSend ( $Input1, "", $Input2, "k", 0 )

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

    Case $l

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

    ControlSend ( $Input1, "", $Input2, "l", 0 )

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

    Case $m

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

    ControlSend ( $Input1, "", $Input2, "m", 0 )

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

    Case $n

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

    ControlSend ( $Input1, "", $Input2, "n", 0 )

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

    Case $o

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

    ControlSend ( $Input1, "", $Input2, "o", 0 )

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

    Case $p

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

    ControlSend ( $Input1, "", $Input2, "p", 0 )

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

    Case $q

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

    ControlSend ($Input1, "", $Input2, "q", 0 )

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

    Case $r

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

    ControlSend ( $Input1, "", $Input2, "r", 0 )

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

    Case $s

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

    ControlSend ( $Input1, "", $Input2, "s", 0 )

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

    Case $t

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

    ControlSend ( $Input1, "",$Input2, "t", 0 )

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

    Case $u

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

    ControlSend ( $Input1, "", $Input2, "u", 0 )

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

    Case $v

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

    ControlSend ( $Input1, "", $Input2, "v", 0 )

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

    Case $w

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

    ControlSend ( $Input1, "", $Input2, "w", 0 )

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

    Case $x

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

    ControlSend ( $Input1, "", $Input2, "x", 0 )

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

    Case $y

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

    ControlSend ( $Input1, "", $Input2, "y", 0 )

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

    Case $z

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

    ControlSend ( $Input1, "", $Input2, "z", 0 )
    EndSwitch
    WEnd

    [/autoit]

    So sieht der Vorschlag von autoBert aus: [spoiler/]

    [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]

    [/spoiler]
    Für diese Möglichkeit müsste ich aber mein Script noch mal komplett umschreiben, gibt es vielleicht noch eine andere Möglichkeit? 

    4 Mal editiert, zuletzt von dr. mo (18. Februar 2011 um 21:20)

  • So z.B.:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $hWnd_1 = GUICreate("Test 1", 200, 100, 50, 50)
    $cButton_1 = GUICtrlCreateButton("Button 1", 5, 5, 190, 90)
    GUISetState()

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

    $hWnd_2 = GUICreate("Test 2", 200, 100, 350, 50)
    $cButton_2 = GUICtrlCreateButton("Button 2", 5, 5, 190, 90)
    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    GUICtrlSetOnEvent($cButton_1, "_Button1")
    GUICtrlSetOnEvent($cButton_2, "_Button2")

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

    While Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Button1()
    MsgBox(64, "GUI 1", "Button 1")
    EndFunc

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

    Func _Button2()
    MsgBox(64, "GUI 2", "Button 2")
    EndFunc

    [/autoit]
  • Warum eigentlich ein neuer Thread wenn dir autobert anscheinend ja schon ein fertiges script in einem anderen Thread gepostet hat?
    Was du an seinem Script nun auszusetzen hast ist mir auch nicht klar. So macht man das nunmal wenn man mit mehr als einem Fenster hantiert. Besonders viel Aufwand hast du damit nun auch nicht mehr, das ist einfach nur 5min copy & paste Arbeit damit autoberts script alle Elemente aus deinem hat. Vielleicht noch die ein oder andere Variable umbenennen aber dann wars das auch schon.

    Der oneventmode ist in diesem Fall glaube ich eher ungeeignet, viel zu viele Elemente für die man dann jeweils ne Funktion braucht. Wobei man denke ich die Alphabets Buttons sehr viel gescheiter erzeugen und den Code dadurch um etliche Zeilen kürzen könnte. Ein Array für die Buttons wäre da wohl angesagt.

  • Wie würde das dann mit dem OnEventMode aussehen?


    das gleiche Beispiel im OnEvent-Modu

    So sieht der Vorschlag von autoBert aus:


    so sieh das gleiche Beispiel im OnEvent-Modus aus:

    Spoiler anzeigen
    [autoit]

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

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

    Opt('GUIOnEventMode', 1) ;schaltet den OnEvent-Modus ein

    [/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]
    Zitat

    ok, Ich denke ich nehme einfach autoBerts Lösung.

    ist eh nicht viel Arbeit, einfach beide Guis am Anfang erstellen und dann hin- nd her switchen. Du musst dich halt an das (08/15) Schema as meinem Beispiel halten
    mfg autoBert

  • Zitat

    Der oneventmode ist in diesem Fall glaube ich eher ungeeignet, viel zu viele Elemente für die man dann jeweils ne Funktion braucht. Wobei man denke ich die Alphabets Buttons sehr viel gescheiter erzeugen und den Code dadurch um etliche Zeilen kürzen könnte. Ein Array für die Buttons wäre da wohl angesagt.


    Aha :huh: .....

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $aButtons[11] = [10]

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

    $hWnd = GUICreate("Test", 410, 50)
    For $i = 1 To $aButtons[0]
    $aButtons[$i] = GUICtrlCreateButton(Chr($i + 64), ($i - 1) * 40 + 5, 5, 40, 40)
    GUICtrlSetOnEvent(-1, "_ButtonClicked")
    Next
    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hWnd)

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

    While Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _ButtonClicked()
    MsgBox(64, "Button Pressed", GUICtrlRead(@GUI_CtrlId))
    EndFunc

    [/autoit]
  • Habs jetzt versucht mit oneevent zu machen so wies AutoBert grad nochmal geschrieben hat.

    Hier der kleine Teil dehn ich versucht habe umzuendern:

    [autoit]

    ;~ ---------------------------------------------------------erste Form-----------------------------------------------------------------------

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

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

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

    Opt('GUIOnEventMode', 1)

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

    $Form1 = GUICreate ('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    $q = GUICtrlCreateButton( 'q', 16, 88, 35, 33,)

    [/autoit]


    stimmt der?

  • Hallo dr.Mo,

    ist eh nicht viel Arbeit, einfach beide Guis am Anfang erstellen und dann hin- nd her switchen. Du musst dich halt an das (08/15) Schema as meinem Beispiel halten


    das bezog sich eigentlich auf das Zitat, dass du meinen Lösungweg nehmen möchtest, also auf MsgLoop-Modus. [eingefügt]Das würde dann so aussehen:

    Spoiler anzeigen
    [autoit]

    ;~ ---------------------------------------------------------erste Form-----------------------------------------------------------------------

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

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

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

    Global $Input1, $Input2
    #region ### START Koda GUI section ### Form=
    #region ### START Koda GUI section ### Form=
    $Tastatur = GUICreate("Tastatur", 478, 182, 195, 124)
    $ZielfensterFestgelegt = GUICtrlCreateLabel("Zielfenster festgelegt.", 16, 16, 102, 25)
    $Control = GUICtrlCreateLabel("Control:", 16, 64, 53, 25)
    $Label1 = GUICtrlCreateLabel($Input2 & "", 104, 64, 348, 25)
    $Titel = GUICtrlCreateLabel("Titel:", 16, 112, 56, 33)
    $Label2 = GUICtrlCreateLabel($Input1 & "", 104, 112, 356, 33)

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

    GUISetState(@SW_HIDE)
    #endregion ### END Koda GUI section ###

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

    $Form1 = GUICreate("Tastatur", 598, 257, 192, 157)

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

    $q = GUICtrlCreateButton("q", 16, 88, 35, 33, $WS_GROUP)
    $w = GUICtrlCreateButton("w", 48, 88, 35, 33, $WS_GROUP)
    $e = GUICtrlCreateButton("e", 80, 88, 35, 33, $WS_GROUP)
    $r = GUICtrlCreateButton("r", 112, 88, 35, 33, $WS_GROUP)
    $t = GUICtrlCreateButton("t", 144, 88, 35, 33, $WS_GROUP)
    $z = GUICtrlCreateButton("z", 176, 88, 35, 33, $WS_GROUP)
    $u = GUICtrlCreateButton("u", 208, 88, 35, 33, $WS_GROUP)
    $i = GUICtrlCreateButton("i", 240, 88, 35, 33, $WS_GROUP)
    $o = GUICtrlCreateButton("o", 272, 88, 35, 33, $WS_GROUP)
    $p = GUICtrlCreateButton("p", 304, 88, 35, 33, $WS_GROUP)
    $u2 = GUICtrlCreateButton("ü", 336, 88, 35, 33, $WS_GROUP)
    $a = GUICtrlCreateButton("a", 24, 120, 35, 33, $WS_GROUP)
    $s = GUICtrlCreateButton("s", 56, 120, 35, 33, $WS_GROUP)
    $d = GUICtrlCreateButton("d", 88, 120, 35, 33, $WS_GROUP)
    $f = GUICtrlCreateButton("f", 120, 120, 35, 33, $WS_GROUP)
    $g = GUICtrlCreateButton("g", 152, 120, 35, 33, $WS_GROUP)
    $h = GUICtrlCreateButton("h", 184, 120, 35, 33, $WS_GROUP)
    $j = GUICtrlCreateButton("j", 216, 120, 35, 33, $WS_GROUP)
    $k = GUICtrlCreateButton("k", 248, 120, 35, 33, $WS_GROUP)
    $l = GUICtrlCreateButton("l", 280, 120, 35, 33, $WS_GROUP)
    $o2 = GUICtrlCreateButton("ö", 312, 120, 35, 33, $WS_GROUP)
    $a2 = GUICtrlCreateButton("ä", 344, 120, 35, 33, $WS_GROUP)
    $y = GUICtrlCreateButton("y", 32, 152, 35, 33, $WS_GROUP)
    $x = GUICtrlCreateButton("x", 64, 152, 35, 33, $WS_GROUP)
    $c = GUICtrlCreateButton("c", 96, 152, 35, 33, $WS_GROUP)
    $v = GUICtrlCreateButton("v", 128, 152, 35, 33, $WS_GROUP)
    $b = GUICtrlCreateButton("b", 160, 152, 35, 33, $WS_GROUP)
    $n = GUICtrlCreateButton("n", 192, 152, 35, 33, $WS_GROUP)
    $m = GUICtrlCreateButton("m", 224, 152, 35, 33, $WS_GROUP)
    $komma = GUICtrlCreateButton(",", 256, 152, 35, 33, $WS_GROUP)
    $punkt = GUICtrlCreateButton(".", 288, 152, 35, 33, $WS_GROUP)
    $Enter = GUICtrlCreateButton("Enter", 320, 152, 67, 33, $WS_GROUP)
    $Select = GUICtrlCreateButton("Select", 13, 24, 70, 33, $WS_GROUP)
    $Leertaste = GUICtrlCreateButton("Leertaste", 40, 184, 331, 33, $WS_GROUP)
    $grossKlein = GUICtrlCreateButton("^", 504, 208, 75, 33, $WS_GROUP)
    $back = GUICtrlCreateButton("<-", 504, 176, 75, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Form1 ;die Message betrifft das Fenster 1
    Switch $nMsg[0] ;was für eine Nachricht
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Select

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

    Sleep(3000)
    $Input1 = WinGetTitle("[active]")
    GUICtrlSetData($Label1,$Input1)
    $hHandle = WinGetHandle($Input1)

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

    $Input2 = ControlGetFocus($Input1)
    GUICtrlSetData($Label2,$Input2)
    GUISetState(@SW_SHOW, $Tastatur)
    GUISetState(@SW_DISABLE,$Form1)

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

    EndSwitch
    ;~ ---------------------------------------------------zweite Form--------------------------------------------------------------------------------
    Case $Tastatur
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE

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

    GUISetState(@SW_HIDE, $Tastatur)
    GUISetState(@SW_ENABLE,$Form1)

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

    ;~ ------------------------------------------------------Funcs erste form--------------------------------------------------------------------------------
    Case $a2
    ControlSend($Input1, "", $Input2, "ä", 0)

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

    Case $o2
    ControlSend($Input1, "", $Input2, "ö", 0)

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

    Case $u2
    ControlSend($Input1, "", $Input2, "ü", 0)

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

    Case $komma
    ControlSend($Input1, "", $Input2, ",", 0)

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

    Case $punkt
    ControlSend($Input1, "", $Input2, ".", 0)

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

    Case $grossKlein
    ControlSend($Input1, "", $Input2, "{CAPSLOCK on}", 0)

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

    Case $back
    ControlSend($Input1, "", $Input2, "{BACKSPACE}", 0)

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

    Case $Enter
    ControlSend($Input1, "", $Input2, "{ENTER}", 0)

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

    Case $Leertaste

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

    ControlSend($Input1, "", $Input2, " ", 0)

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

    Case $a

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

    ControlSend($Input1, "", $Input2, "a", 0)

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

    Case $b

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

    ControlSend($Input1, "", $Input2, "b", 0)

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

    Case $c

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

    ControlSend($Input1, "", $Input2, "c", 0)

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

    Case $d

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

    ControlSend($Input1, "", $Input2, "d", 0)

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

    Case $e

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

    ControlSend($Input1, "", $Input2, "e", 0)

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

    Case $f

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

    ControlSend($Input1, "", $Input2, "f", 0)

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

    Case $g

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

    ControlSend($Input1, "", $Input2, "g", 0)

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

    Case $h

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

    ControlSend($Input1, "", $Input2, "h", 0)

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

    Case $i

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

    ControlSend($Input1, "", $Input2, "i", 0)

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

    Case $j

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

    ControlSend($Input1, "", $Input2, "j", 0)

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

    Case $k

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

    ControlSend($Input1, "", $Input2, "k", 0)

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

    Case $l

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

    ControlSend($Input1, "", $Input2, "l", 0)

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

    Case $m

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

    ControlSend($Input1, "", $Input2, "m", 0)

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

    Case $n

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

    ControlSend($Input1, "", $Input2, "n", 0)

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

    Case $o

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

    ControlSend($Input1, "", $Input2, "o", 0)

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

    Case $p

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

    ControlSend($Input1, "", $Input2, "p", 0)

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

    Case $q

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

    ControlSend($Input1, "", $Input2, "q", 0)

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

    Case $r

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

    ControlSend($Input1, "", $Input2, "r", 0)

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

    Case $s

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

    ControlSend($Input1, "", $Input2, "s", 0)

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

    Case $t

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

    ControlSend($Input1, "", $Input2, "t", 0)

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

    Case $u

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

    ControlSend($Input1, "", $Input2, "u", 0)

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

    Case $v

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

    ControlSend($Input1, "", $Input2, "v", 0)

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

    Case $w

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

    ControlSend($Input1, "", $Input2, "w", 0)

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

    Case $x

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

    ControlSend($Input1, "", $Input2, "x", 0)

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

    Case $y

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

    ControlSend($Input1, "", $Input2, "y", 0)

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

    Case $z

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

    ControlSend($Input1, "", $Input2, "z", 0)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    so ist das Skript lauffähig[/eingefügt]
    Ja bis hierhin passt es. Aber warum die nicht auch gleich name22 's Vorschlag berücksichtigst und auf Array umstellst versteh ich nicht.

    Das Makro @GUI_CtrlId kannte ich btw nicht, macht das ganze natürlich noch einfacher.

    im MsgLoopMods würde es so fnktionieren

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>

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

    Global $aButtons[11] = [10]

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

    $hWnd = GUICreate("Test", 410, 50)
    For $i = 1 To $aButtons[0]
    $aButtons[$i] = GUICtrlCreateButton(Chr($i + 64), ($i - 1) * 40 + 5, 5, 40, 40)
    Next
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $aButtons[1] To $aButtons[0]
    _ButtonClicked($aButtons[$nMsg] - $aButtons[1]-1);wobei -1 nur in diesem Fall stimmt, d
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ButtonClicked($i)
    MsgBox(64, "Button Pressed", GUICtrlRead($aButtons[$i]))
    EndFunc ;==>_ButtonClicked

    [/autoit]

    mfg autoBert

    2 Mal editiert, zuletzt von autoBert (19. Februar 2011 um 19:34)

  • Hallo,
    War leider lang nich mehr on....
    Aber jetzt noch mal ein großes DANKE an autoBert!