Focus Problem

  • Hallo,

    folgendes Problem:
    Ich habe eine Form mit mehreren Buttons.
    Diese Buttons werden per TAB angewählt.
    Also nicht per Click!

    Und da liegt mein Problem.

    Wie kann ich sobald ein "Button" den Focus bekommt
    genau diesem Button sagen deine Größe ist z.B. @DesktopWidth -20, @DesktopHeight -20
    Bei Lostfocus ist er wieder normal. Beim weiteren TAB wird der nächste Button vergrößert.
    Hat das Input den Focus sind alle Buttons normal.

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 607, 206, 252, 144)
    $Input1 = GUICtrlCreateInput("Input1", 24, 40, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 24, 96, 163, 73, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 200, 96, 163, 73, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Button3", 376, 96, 171, 73, $WS_GROUP)

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

    ControlFocus($Form1, "", 3)

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

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

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

    Local $control = ControlGetFocus($Form1)
    Local $hHandle = ControlGetHandle($Form1, "", $control); Handle des selektierten Controls holen
    Local $ICtrlId = _WinAPI_GetDlgCtrlID($hHandle); CtrlId aus dem Handle erstellen
    MsgBox(0, "", $control)

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

    While 1
    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _Focus()

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

    endfunc

    [/autoit]


    Hab mit ControlFocus, ControlgetFocus... probiert

    Hoffe Ihr habt ne Idee


    Liebe Grüße
    ;) Ilse

    Einmal editiert, zuletzt von Ilse (24. April 2012 um 13:16)

  • Hatte leider keine Zeit, mich länger damit zu beschäftigen, aber das hilft Dir vielleicht weiter:

    Ob ein bestimmter Button den Fokus hat, kannst Du mit "_GUICtrlButton_GetFocus($hdl) = True" ermitteln
    (braucht #include <GuiButton.au3>).

    Ich hab's mal quick and dirty beim Verlassen der Hauptschleife eingefügt:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GuiButton.au3> ; Zusätzlich eingefügt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    $Form1 = GUICreate("Form1", 607, 206, 252, 144)
    $Input1 = GUICtrlCreateInput("Input1", 24, 40, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 24, 96, 163, 73, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Button2", 200, 96, 163, 73, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Button3", 376, 96, 171, 73, $WS_GROUP)

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

    ControlFocus($Form1, "", 3)

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

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

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

    Local $control = ControlGetFocus($Form1)
    Local $hHandle = ControlGetHandle($Form1, "", $control); Handle des selektierten Controls holen
    Local $ICtrlId = _WinAPI_GetDlgCtrlID($hHandle); CtrlId aus dem Handle erstellen
    MsgBox(0, "", $control)

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

    While 1
    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    If _GUICtrlButton_GetFocus($Button1) = True Then ; provisorisch eingefügt
    MsgBox(0, "", "Button1 hat den Fokus")
    ElseIf _GUICtrlButton_GetFocus($Button2) = True Then
    MsgBox(0, "", "Button2 hat den Fokus")
    ElseIf _GUICtrlButton_GetFocus($Button3) = True Then
    MsgBox(0, "", "Button3 hat den Fokus")
    Else
    MsgBox(0, "", "Kein Button hat den Fokus")
    EndIf

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

    Exit
    EndSwitch
    WEnd

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

    Func _Focus()

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

    EndFunc ;==>_Focus

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

    Weitere Vorgehensweise wäre für mich dann:

    1. Abfrage ob Tab-Taste gedrückt, in der Haupschleife

    2. Ermitteln welcher Button den Fokus hat

    3. Entweder einen größeren Button oder ggf. Child-Fenster darüber legen

    4. Bei Fokus-Verlust diesen wieder löschen und die neue Konstellation abfragen

    ...

    MfG ThPfund

    "Es könnte alles so einfach sein..."