Gui Variable Problem

  • Hallo,

    ich habe ein Problem mit Hotkeys.
    Bei der einen Gui klappt es, aber bei der anderen nicht!

    Leertaste und Returntase klappt bei der ersten Gui nicht, aber bei der zweiten Gui!
    Sollte eigentlichen bei beiden funktionieren:

    Mein Code:

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

    $cDummy1 = GUICtrlCreateDummy()
    $cDummy2 = GUICtrlCreateDummy()
    $cDummy3 = GUICtrlCreateDummy()
    $cDummy4 = GUICtrlCreateDummy()

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

    GUISetState(@SW_SHOW, $gui1)

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

    Global $aAccelKeys[2][2] = [["{Space}", $cDummy1],["{Enter}", $cDummy2]]
    GUISetAccelerators($aAccelKeys, $GUI1)
    Global $aAccelKeys2[2][2] = [["{Space}", $cDummy3],["{Enter}", $cDummy4]]
    GUISetAccelerators($aAccelKeys2, $GUI2)

    [/autoit] [autoit][/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)
    Case $cDummy1
    Msgbox(0,"","Leertaste Gui 1")
    Case $cDummy2
    Msgbox(0,"","Returntaste Gui 1")
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $cDummy3
    Msgbox(0,"","Leer Taste")
    Case $cDummy4
    Msgbox(0,"","Return Taste")
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Bekomme es einfach nicht zu laufen.

    Liebe Grüße
    :( Ilse

    Einmal editiert, zuletzt von Ilse (28. Mai 2012 um 11:28)

  • Moin Ilse,

    so geht's. ;)

    Spoiler anzeigen
    [autoit]

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

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

    $cDummy1 = GUICtrlCreateDummy()
    $cDummy2 = GUICtrlCreateDummy()

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

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

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

    $cDummy3 = GUICtrlCreateDummy()
    $cDummy4 = GUICtrlCreateDummy()

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

    GUISetState(@SW_SHOW, $gui1)

    [/autoit]

    Grüße
    Greenhorn


  • Hallo Greenhorn,

    bin ich froh daß du da bist!
    Ich habe heute den ganzen Tag damit verbracht.

    Super, es läuft!

    1000 x Danke!


    Liebe Grüße
    ;) Ilse

  • Hallo Greenhorn,

    darf ich dich noch etwas fragen:

    In meinem Code (...ein anderer etwas komplexer)
    habe ich ein focus Problem:

    Der Focus ist bei Firefox. Hier im Beispiel auf der GUI!
    Wenn ich nun die F4 Taste drücke sollte der Fokus
    bei dem Gui-Fenster $Navi sein, das geht leider nicht!
    Hotkey F4 ruft diese Fokus-Funktion auf!

    [autoit]


    #include <GUIConstants.au3>
    #include <array.au3>
    #include <GDIPlus.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GuiComboBox.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <GuiEdit.au3>

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

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

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

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

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

    $cDummy3 = GUICtrlCreateDummy()
    $cDummy4 = GUICtrlCreateDummy()

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

    $Navi = GUICreate("Navi", 258, 50, @DesktopWidth/2 * 2 - 260, 207, BitOR($WS_DLGFRAME,$WS_POPUP,$WS_CLIPSIBLINGS))
    GUISetBkColor(0x800000)
    $lblNavi = GUICtrlCreateLabel("Auswahl", 8, 8, 236, 36, $SS_RIGHT)
    GUICtrlSetFont(-1, 20, 800, 0, "Arial")
    GUICtrlSetColor(-1, 0xFFFFFF)
    WinSetOnTop($Navi, "", 1)
    GUISetState(@SW_SHOW, $navi)
    GUISetState(@SW_SHOW, $gui1)

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

    HotKeySet("{F4}", "_Navi")

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

    Dim $aAccelKeys[2][2] = [["{Space}", $cDummy1],["{Enter}", $cDummy2]]
    GUISetAccelerators($aAccelKeys)
    Dim $aAccelKeys2[2][2] = [["{Space}", $cDummy3],["{Enter}", $cDummy4]]
    GUISetAccelerators($aAccelKeys2,$gui2)
    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)
    Case $cDummy1
    ;GUISetState(@SW_SHOW, $gui1)
    Msgbox(0,"","Leertaste Gui 1")
    Case $cDummy2
    Msgbox(0,"","Returntaste Gui 1")
    EndSwitch
    Case $gui2
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    Case $cDummy3
    Msgbox(0,"","Leer Taste")
    Case $cDummy4
    Msgbox(0,"","Return Taste")
    Case $btn2
    MsgBox(0, '', 'Button 2 geklickt')
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Navi()

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

    GUICtrlSetData($lblNavi, "Steuerung")
    ;GUICtrlSetFont(-1, 40, 400, 0, "@Arial Unicode MS")
    GUISetState(@SW_Show, $Navi)

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

    EndFunc ;==>_Gross

    [/autoit]

    Das Problem ist, ich kann den Focus nicht
    entziehen und auf die $Navi Gui legen!

    ;) Grüße Ilse

    2 Mal editiert, zuletzt von Ilse (27. Mai 2012 um 21:05)

  • Yep, ist wie m-obi schrieb, Du musst WinActivate benutzen ...

    [autoit]

    Func _Navi()

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

    GUICtrlSetData($lblNavi, "Steuerung")
    ;GUICtrlSetFont(-1, 40, 400, 0, "@Arial Unicode MS")
    ;~ GUISetState(@SW_Show, $Navi)
    WinActivate ($Navi)

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

    EndFunc ;==>_Gross

    [/autoit]

    Grüße
    Greenhorn


  • Guten Morgen zusammen,

    merci, das war's.

    Verstanden hab ich das zwar nicht so ganz.
    Gui Focus setzt doch auch aktiv.
    Dachte WinActivate braucht z.B. die Titelleiste,
    die war ja ausgeblendet.

    Egal, es läuft super

    Liebe Grüße
    ;) Ilse

  • Du hast ja nur Show gemacht, also das Fenster ist dann nur sichtbar. Und bei den Win-Funktionen reicht es auch, wenn du nur das Handle hast. Steht auch wie immer in der Hilfe.

  • Guten Morgen m-obi,

    merci, eine Frage noch:
    $Navi ist ja ein Label, das sich ändert!

    Wie kann ich das {enter} mit einem Mausclick machen.

    [autoit]


    Global $aAccelKeys[2][2] = [["{Space}", $cDummy1],["{Enter}", $cDummy2]]

    [/autoit]

    Ich meine, daß der Befehl nicht nur bei Enter ausgeführt wird,
    sondern auch wenn ich das das Label anklicke! Geht das?

    Liebe
    Grüße Ilse ;)

  • Hallo Chesstiger,

    hm...was ich nicht so ganz verstanden habe ist folgendes:

    Also: Das Label wechselt ja die Caption

    Heißt einmal
    Start
    Ende
    Tastatur...
    und je nachdem wird die Funktion Start oder Ende per Return mit den Dummys aufgerufen.

    Mir ist nicht klar wie ich dem Dummy(Return) sagen kann mach das auch per Mausklick!


    :( Grüße Ilse

  • Also, einmal fragst du das mit einem Dummy ab:

    [autoit]


    $Dummy = GUICtrlCreateDummy()
    Dim $AccelKeys[1][2] = [["{Enter}", $Dummy]]
    ;...
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $Dummy
    _Funktion()
    EndSwitch
    WEnd

    [/autoit]

    Dann nochmal einfach so das Label:

    [autoit]


    $Label = GUICtrlCreateLabel("Bla",50,50)
    ;...
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $Label
    _Funktion()
    EndSwitch
    WEnd

    [/autoit]

    Und das eben noch miteinander kombinieren.

    lg chess