Funktion funktioniert nur ein Mal

  • Hallo,
    ich habe zwei GUIs, per Button öffne ich die zweite GUI, aber es funktioniert nur ein Mal.
    Warum?

    Spoiler anzeigen
    [autoit]

    Func _SettingsWin()
    $aCurInfo = GUIGetCursorInfo()
    If IsArray($aCurInfo) Then
    Switch $aCurInfo[4]
    Case $ButtonSettings
    ConsoleWrite("zeigen")
    GUISetState(@SW_SHOW, $SubGUI)
    Case $Button1Sub
    GUISetState(@SW_HIDE, $SubGUI)
    EndSwitch
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von btcode (8. April 2013 um 19:18)

  • Stell bitte mal dein ganzes Skript bzw. ein lauffähiges Beispiel rein. ;)
    Dann kann dir besser geholfen werden.

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Hier bitte.

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    $MainGUI = GUICreate("GUI1", 213, 85, -1, -1, -1, $WS_EX_TOPMOST)
    $ButtonSettings = GUICtrlCreateButton("Settings", 112, 10, 91, 25)
    GUICtrlSetOnEvent(-1, "_SettingsWin")

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

    $SubGUI = GUICreate("Settings", 184, 239, -1, -1, -1, $WS_EX_TOPMOST)
    $Button1Sub = GUICtrlCreateButton("&OK", 9, 203, 75, 25)
    GUICtrlSetOnEvent(-1, "_SettingsWin")
    GUISetState(@SW_SHOW, $MainGUI)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _SettingsWin()
    $aCurInfo = GUIGetCursorInfo()
    If IsArray($aCurInfo) Then
    Switch $aCurInfo[4]
    Case $ButtonSettings
    ConsoleWrite("zeigen")
    GUISetState(@SW_SHOW, $SubGUI)
    Case $Button1Sub
    GUISetState(@SW_HIDE, $SubGUI)
    EndSwitch
    EndIf
    EndFunc

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

    Func _Close()
    Exit
    EndFunc

    [/autoit]
  • ein GUISwitch wirkt da manchmal Wunder :

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    $MainGUI = GUICreate("GUI1", 213, 85, -1, -1, -1, $WS_EX_TOPMOST)
    $ButtonSettings = GUICtrlCreateButton("Settings", 112, 10, 91, 25)
    GUICtrlSetOnEvent(-1, "_SettingsWin")

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

    $SubGUI = GUICreate("Settings", 184, 239, -1, -1, -1, $WS_EX_TOPMOST)
    $Button1Sub = GUICtrlCreateButton("&OK", 9, 203, 75, 25)
    GUICtrlSetOnEvent(-1, "_SettingsWin")
    GUISetState(@SW_SHOW, $MainGUI)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _SettingsWin()
    $aCurInfo = GUIGetCursorInfo()
    If IsArray($aCurInfo) Then
    Switch $aCurInfo[4]
    Case $ButtonSettings
    ConsoleWrite("zeigen")
    GUISetState(@SW_SHOW, $SubGUI)
    Case $Button1Sub
    GUISetState(@SW_HIDE, $SubGUI)
    GUISwitch($MainGUI)
    EndSwitch
    EndIf
    EndFunc

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

    Func _Close()
    Exit
    EndFunc ;==>hGUIClose

    [/autoit]


    Aber warum denn so umständlich, guck dir mal das Makro an :

    [autoit]

    @GUI_CtrlID

    [/autoit]
  • Ganz einfach, GUIGetCursorInfo() bezieht sich auf das aktuelle Fenster (wenn kein Handle angegeben ist ...).
    Das aktive Fenster ist das versteckte ... Und darauf bezieht sich GUIGetCursorInfo().

    Aus diesen Grund funktioniert das ganze auch nur einmal. :D