Case mit Variablen aus Function

  • Hi,

    meine Frage: Wie kann ich (Pseudocode):

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    Auch mit einem Gui-Fenster verwenden das in einer Function erst erstellt wird?

    Also

    [autoit]


    1. Gui Fenster: GUICreate("XYZUZ", 215, 90, 232, 135)
    2. Button: $button1 = GUICtrlCreateButton("132", 169, 5, 41, 41,$BS_ICON)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    _NeuesFenster()
    Case $button2
    MsgBox(2,"Test","hio")
    EndSwitch
    WEnd

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

    Func _NeuesFenster()
    2. GUiFenster: GUICreate("XYHUI", 200, 43, 232, 135)
    2. Button: $button2 = GUICtrlCreateButton("210", 169, 5, 41, 41,$BS_ICON)
    EndFunc

    [/autoit]

    Wenn ich z.B. auf "Schließen" klicke im Functions-Fenster, dann schließen beide Fenster -.-

    Sry wenns vielleicht eine Noob-Frage ist, ich bin da noch nicht so fit ;)

    Mfg
    Johannes

  • schlechter Anzatz

    besser:

    erstelle alle guis am Anfang und setze nur die benötigte sichtbar mit GUISetState

    dann mit GUIGetMsg(1) noch zusätzlich die id abfragen und alles in deine eine while-Schleife setzen

    bitte in der Hilfedatei die Beispiele anschauen, ist alles erklärt

  • Hi,
    etwa so:

    Spoiler anzeigen
    [autoit]


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

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

    $Gui = GUICreate("GUI 1", 215, 90, 232, 135)
    $button1 = GUICtrlCreateButton("132", 169, 5, 41, 41, $BS_ICON)

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

    GUISetState(@SW_SHOW, $Gui)

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

    $GUiFenster = GUICreate("GUI 2", 200, 43, 232, 250)
    $button2 = GUICtrlCreateButton("210", 169, 5, 41, 41, $BS_ICON)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    _NeuesFenster()
    Case $button2
    MsgBox(2, "Test", "hio")
    EndSwitch
    WEnd

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

    Func _NeuesFenster()
    GUISetState(@SW_SHOW, $GUiFenster)
    EndFunc ;==>_NeuesFenster

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


    Viel Erfolg ! :)

  • Hey,

    vielen dank für eure antworten..

    RR04: Danke für das Script. Aber wenn ich auf "Schließen" des 2ten Fensters klicke, dann schließen sich beide Fenster -.- Trotzdem Vielen Dank!

  • Ich nehm mal das Beispiel von RR04:

    Spoiler anzeigen
    [autoit]

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

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

    $Gui = GUICreate("GUI 1", 215, 90, 232, 135)
    $button1 = GUICtrlCreateButton("132", 169, 5, 41, 41, $BS_ICON)
    $gui1 = 1
    GUISetState(@SW_SHOW, $Gui)

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

    $GUiFenster = GUICreate("GUI 2", 200, 43, 232, 250)
    $button2 = GUICtrlCreateButton("210", 169, 5, 41, 41, $BS_ICON)
    $gui2 = 0
    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    If $msg[1] = $Gui Then
    GUIDelete($Gui) ;das passiert wenn Fenster 1 geschlossen wird
    $gui1 = 0 ;gui1 existiert jetzt nicht mehr
    ElseIf $msg[1] = $GUiFenster Then
    GUIDelete($GUiFenster) ;das passiert wenn Fenster 2 geschlossen wird
    $gui2 = 0 ;gui2 existiert jetzt nicht mehr
    EndIf
    Case $button1
    _NeuesFenster()
    Case $button2
    MsgBox(2, "Test", "hio")
    EndSwitch
    If $gui1 = 0 And $gui2 = 0 Then Exit ;wenn beide GUIs nicht mehr existieren, AutoIt schließen
    WEnd

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

    Func _NeuesFenster()
    GUISetState(@SW_SHOW, $GUiFenster)
    $gui2 = 1
    EndFunc ;==>_NeuesFenster

    [/autoit]

    Sollte geht. Habs nicht getestet.

    Edit: Habs noch kurz so umgeschrieben, dass es sich schließt wenn alle Fenster zu sind. Evtl. musst du das Skript noch etwas anpassen

    2 Mal editiert, zuletzt von Carsten8 (28. Oktober 2008 um 16:49)

  • Also... wenn bei GUIGetMsg die 1 in den Klammern gesetzt wird, wird ein Array zurückgegeben. Element 0 ist das was passiert ist, Element 2 ist von wem das Ereignis ausgelöst ist (also GUI1 oder GUI2). Das andere steht in den Kommentaren ^^

  • Spoiler anzeigen
    [autoit]


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

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

    $Gui = GUICreate("GUI 1", 215, 90, 232, 135)
    $button1 = GUICtrlCreateButton("132", 169, 5, 41, 41, $BS_ICON)

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

    GUISetState(@SW_SHOW, $Gui)

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

    $GUiFenster = GUICreate("GUI 2", 200, 43, 232, 250)
    $button2 = GUICtrlCreateButton("210", 169, 5, 41, 41, $BS_ICON)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    _NeuesFenster()
    Case $button2
    _closeNeuesFenster()
    EndSwitch
    WEnd

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

    Func _NeuesFenster()
    GUISetState(@SW_SHOW, $GUiFenster)
    EndFunc ;==>_NeuesFenster

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

    Func _closeNeuesFenster()
    GUISetState(@SW_HIDE, $GUiFenster)
    EndFunc ;==>_closeNeuesFenster

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