Zwei GUIs

  • Hallo Profis,
    ich wollte ein "Window" Toll schreiben welches verschiedene Funktionen enthält.
    Hat auch alles soweit geklappt bis ich eine 2. Gui eingebaut habe.
    Siehe Code

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #NoTrayIcon

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

    $Form1 = GUICreate("Windows © r1fLeX from Autoit.de", 302, 198, 364, 285)
    GUICtrlSetBkColor(-1, 0xFF8000)
    $Label1 = GUICtrlCreateLabel("Window Title:", 3, 12, 90, 17)
    $fenster = GUICtrlCreateInput("", 105, 9, 181, 21)
    GUICtrlSetCursor (-1, 5)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group1 = GUICtrlCreateGroup("Funktions", 42, 39, 208, 136)
    $Checkbox1 = GUICtrlCreateCheckbox("Hide Window", 48, 54, 88, 19)
    $Checkbox2 = GUICtrlCreateCheckbox("Show Window", 48, 78, 88, 19)
    $Checkbox3 = GUICtrlCreateCheckbox("Flash Window", 48, 102, 88, 19)
    $Checkbox4 = GUICtrlCreateCheckbox(" Set Trans", 156, 102, 88, 19)
    $Checkbox6 = GUICtrlCreateCheckbox("Move Window", 102, 129, 88, 19)
    $Checkbox7 = GUICtrlCreateCheckbox("Change Titel", 156, 54, 82, 19)
    $Checkbox8 = GUICtrlCreateCheckbox("Close Window", 156, 78, 88, 19)
    $Button1 = GUICtrlCreateButton("Ok!", 120, 150, 55, 19, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    $menu1 = GUICtrlCreateMenu ( "&Options")
    $exit = GUICtrlCreateMenuItem ( "Platzhalter",$menu1)
    $exit2 = GUICtrlCreateMenuItem ( "Platzhalter",$menu1)
    $exit3 = GUICtrlCreateMenuItem ( "Platzhalter",$menu1)
    $menu2 = GUICtrlCreateMenu ( "&Help")
    $help2 = GUICtrlCreateMenuItem ( "Help",$menu2)
    WinSetTrans ( "Windows © r1fLeX from Autoit.de","",240)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $fenstername = GUICtrlRead ( $fenster )
    $checkbox1_1 = GUICtrlRead ( $Checkbox1 )
    $checkbox1_2 = GUICtrlRead ( $Checkbox2 )
    $checkbox1_3 = GUICtrlRead ( $Checkbox3 )
    $checkbox1_4 = GUICtrlRead ( $Checkbox4 )
    $checkbox1_6 = GUICtrlRead ( $Checkbox6 )
    $checkbox1_7 = GUICtrlRead ( $Checkbox7 )
    $checkbox1_8 = GUICtrlRead ( $Checkbox8 )
    If $checkbox1_1 = 1 Then
    WinSetState ( $fenstername,"",@SW_HIDE)
    EndIf
    If $checkbox1_3 = 1 Then
    WinFlash ($fenstername,"",5)
    EndIf
    If $checkbox1_2 = 1 Then
    WinSetState ( $fenstername ,"",@SW_SHOW)
    EndIf
    If $checkbox1_4 = 1 Then
    $trans = InputBox ("Trans","Please insert a value for transparency." & @CRLF & "[Full visible] 0-255 [Not Visible]")
    WinSetTrans ($fenstername,"",$trans)
    EndIf
    If $checkbox1_6 = 1 Then
    $Form2 = GUICreate("Move Window", 186, 75, @DesktopWidth / 2, 0,$WS_POPUP)
    $Labe2 = GUICtrlCreateLabel("X:", 6, 6, 14, 17)
    $x = GUICtrlCreateInput("", 24, 3, 31, 21)
    $Label3 = GUICtrlCreateLabel("Y:", 6, 33, 14, 17)
    $y = GUICtrlCreateInput("", 24, 30, 31, 21)
    $Label4 = GUICtrlCreateLabel("DesktopHeight", 72, 6, 75, 17)
    $Label5 = GUICtrlCreateLabel("DesktopWidth", 72, 33, 75, 17)
    $hoehe = GUICtrlCreateInput("", 150, 3, 31, 21)
    $breite = GUICtrlCreateInput("", 150, 30, 31, 21)
    $Button2 = GUICtrlCreateButton("Ok!", 66, 57, 46, 16, 0)
    GUISetState(@SW_SHOW)
    EndIf
    Case $Button2
    WinMove ($fenstername,"",$x,$y,$hoehe,$breite)
    Sleep ( 1000 )
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Aber das Programm startet kurz und 2 Fenster kommen für etwa 100MS und dann schleißt sich das Programm mit folgendem Fehler ( Scite :(

    Also kann mir jemand helfen? :(

  • Der Button2 wird ja nur bedingt erstellt wenn $checkbox1_6 = 1, aber wenn das nicht der Fall ist und trotzdem $Button2 abgefragt wird (Case $Button2), dann kommt es natürlich zu einem Fehler. Am besten ist immer alle Controls erstellen und bei Bedarf sichtbar oder unsichtbar zu machen.

  • Heißt ich soll die 2. Gui am Anfang laden aber mit @SW_HIDE unsichtbar machen und bei Bedarf mit @SW_SHOW sichtbar machen ja?

  • Nun gut , alles klappt soweit perfekt aber er will den Button ( $Button2) aus der zweiten Gui nicht erkennen.
    Weiß jemand wieso?
    habt ihr noch Verbesserungsvorschläge?

    • Offizieller Beitrag

    er will den Button ( $Button2) aus der zweiten Gui nicht erkennen.


    Falls du mit GUIGetMsg() arbeitest, mußt du die erweiterte Form verwenden: GUIGetMsg(1)
    Dann bekommst du auslösendes ID + GUI zurück. Schau mal in die Hilfe.
    Geht wesentlich einfacher, wenn man mit OnEventMode arbeitet, da weist du Funcs zu und gut ist's :)

    Hier mal Bsp. zu beiden Varianten:

    GUIGetMsg-Mode
    [autoit]

    #include <GUIConstants.au3>

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

    $gui1 = GUICreate('GUI 1')
    $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)

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

    $gui2 = GUICreate('GUI 2')
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle
    Case $gui1
    Switch $msg[0] ; Event
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
    OnEvent-Mode
    [autoit]

    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1) ; OnEventMode = EIN

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

    $gui1 = GUICreate('GUI 1')
    GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI1_close')
    $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
    GUICtrlSetOnEvent(-1, 'ClickButton1')

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

    $gui2 = GUICreate('GUI 2')
    GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI2_close')
    $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
    GUICtrlSetOnEvent(-1, 'ClickButton2')

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

    GUISetState(@SW_SHOW, $gui1)

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

    While True
    Sleep(100)
    WEnd

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

    Func GUI1_close()
    Exit
    EndFunc

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

    Func GUI2_close()
    GUISetState(@SW_HIDE, $gui2)
    EndFunc

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

    Func ClickButton1()
    GUISetState(@SW_SHOW, $gui2)
    EndFunc

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

    Func ClickButton2()
    MsgBox(0, '', 'Button 2 geklickt')
    EndFunc

    [/autoit]
  • Oh , mit OnEventMode kenn ich mich garnicht aus.
    Könntest du mir nen 5 Sekundne Crashkurs geben?

  • Ok , habe es jetzt so gemacht:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #NoTrayIcon

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

    $Form2 = GUICreate("Move Window", 186, 75, @DesktopWidth / 2 - 100, 0, $WS_POPUP)
    $Label2 = GUICtrlCreateLabel("X:", 6, 6, 14, 17)
    $x1 = GUICtrlCreateInput("", 24, 3, 31, 21)
    $Label3 = GUICtrlCreateLabel("Y:", 6, 33, 14, 17)
    $y1 = GUICtrlCreateInput("", 24, 30, 31, 21)
    $Label4 = GUICtrlCreateLabel("DesktopHeight", 72, 6, 75, 17)
    $Label5 = GUICtrlCreateLabel("DesktopWidth", 72, 33, 75, 17)
    $hoehe1 = GUICtrlCreateInput("", 150, 3, 31, 21)
    $breite1 = GUICtrlCreateInput("", 150, 30, 31, 21)
    $Button2 = GUICtrlCreateButton("Ok!", 66, 57, 46, 16, 0)
    GUISetState(@SW_HIDE)

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

    $Form1 = GUICreate("Windows © r1fLeX from Autoit.de", 302, 198, 364, 285)
    GUICtrlSetBkColor(-1, 0xFF8000)
    $Label1 = GUICtrlCreateLabel("Window Title:", 3, 12, 90, 17)
    $fenster = GUICtrlCreateInput("", 105, 9, 181, 21)
    GUICtrlSetCursor(-1, 5)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group1 = GUICtrlCreateGroup("Funktions", 42, 39, 208, 136)
    $Checkbox1 = GUICtrlCreateCheckbox("Hide Window", 48, 54, 88, 19)
    $Checkbox2 = GUICtrlCreateCheckbox("Show Window", 48, 78, 88, 19)
    $Checkbox3 = GUICtrlCreateCheckbox("Flash Window", 48, 102, 88, 19)
    $Checkbox4 = GUICtrlCreateCheckbox(" Set Trans", 156, 102, 88, 19)
    $Checkbox6 = GUICtrlCreateCheckbox("Move Window", 102, 129, 88, 19)
    $Checkbox7 = GUICtrlCreateCheckbox("Change Titel", 156, 54, 82, 19)
    $Checkbox8 = GUICtrlCreateCheckbox("Close Window", 156, 78, 88, 19)
    $Button1 = GUICtrlCreateButton("Ok", 120, 150, 55, 19, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    $menu1 = GUICtrlCreateMenu("&Options")
    $exit = GUICtrlCreateMenuItem("Platzhalter", $menu1)
    $exit2 = GUICtrlCreateMenuItem("Platzhalter", $menu1)
    $exit3 = GUICtrlCreateMenuItem("Platzhalter", $menu1)
    $menu2 = GUICtrlCreateMenu("&Help")
    $help2 = GUICtrlCreateMenuItem("Help", $menu2)
    WinSetTrans("Windows © r1fLeX from Autoit.de", "", 240)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle
    Case $Form1
    Switch $msg[0] ; Event
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    $fenstername = GUICtrlRead($fenster)
    $checkbox1_1 = GUICtrlRead($Checkbox1)
    $checkbox1_2 = GUICtrlRead($Checkbox2)
    $checkbox1_3 = GUICtrlRead($Checkbox3)
    $checkbox1_4 = GUICtrlRead($Checkbox4)
    $checkbox1_6 = GUICtrlRead($Checkbox6)
    $checkbox1_7 = GUICtrlRead($Checkbox7)
    $checkbox1_8 = GUICtrlRead($Checkbox8)
    If $fenstername = "" Then
    MsgBox(0, "Error", "Please fill in the Window Name")
    ElseIf $checkbox1_1 = 1 Then
    WinSetState($fenstername, "", @SW_HIDE)
    ElseIf $checkbox1_3 = 1 Then
    WinFlash($fenstername, "", 5)
    ElseIf $checkbox1_2 = 1 Then
    WinSetState($fenstername, "", @SW_SHOW)
    ElseIf $checkbox1_4 = 1 Then
    $trans = InputBox("Trans", "Please insert a value for transparency." & @CRLF & "[Full visible] 0-255 [Not Visible]")
    WinSetTrans($fenstername, "", $trans)
    ElseIf $checkbox1_6 = 1 Then
    WinSetState("Move Window", "", @SW_SHOW)
    ElseIf $checkbox1_7 = 1 Then
    $neuername = InputBox("New Title", "Please insert a new Title", "r1fLeX is awesome")
    WinSetTitle($fenstername, "", $neuername)
    GUICtrlSetData($fenster, $neuername)
    ElseIf $checkbox1_8 = 1 Then
    WinKill($fenstername)
    GUICtrlSetData($fenster, "")
    EndIf
    EndSwitch
    Case $Form2
    Switch $msg[0]

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

    Case $Button2
    $x = GUICtrlRead($x1)
    $y = GUICtrlRead($y1)
    $breite = GUICtrlRead($breite1)
    $hoehe = GUICtrlRead($hoehe1)
    If $x = "" Or $y = "" Or $breite = "" Or $hoehe = "" Then
    MsgBox(48, "Error", "Please fill in all!")
    Else
    $fenstername = GUICtrlRead($fenster)
    WinMove($fenstername, "", $x, $y, $hoehe, $breite)
    WinSetState("Move Window", "", @SW_HIDE)
    EndIf
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Jedoch erkennt er nur die 1. Gui. Was zum Teufel mache ich falsch?

  • Könntest du mir vllt meinen Code anpassen?
    Verstehe das nicht wirklich aber ich denke wenn ich den COde sehen dann weiß ich wsd u meintest :).

  • ja les doch die hilfe durch.

    naja gib dir mal ein einfachen code:

    Spoiler anzeigen
    [autoit]

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

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

    $Form1 = GUICreate("Form1", 330, 352, 193, 125)
    $Klick = GUICtrlCreateButton("Klick", 72, 248, 201, 25, $BS_DEFPUSHBUTTON)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 88, 56, 177, 17)
    GUISetState(@SW_SHOW)

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

    $Form2 = GUICreate("Form2", 331, 353, 193, 125)
    $label = GUICtrlCreateLabel("bn", 100, 100, 200,50)

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

    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form1
    Exit
    Case $msg[0] = $Klick And $msg[1] = $Form1
    $ck = GUICtrlRead($Checkbox1)
    If $ck = 1 Then
    GUICtrlSetData($label, "Checkbox wurde makiert")
    Else
    GUICtrlSetData($label, "Checkbox wurde nicht makiert")
    EndIf
    GUISetState(@SW_SHOW, $form2)
    Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form2
    GUISetState(@SW_HIDE,$Form2)
    EndSelect
    WEnd

    [/autoit]