"markiertes" input rausfinden^^

  • Gibt es eine Funktion in der ich ein markiertes Input (GUI) finden kann also dass mir die Funktion die ID des Inputs zurückgibt?

    Ich meine wenn man mehrere Inputs hat dass es das findet welches gerade "markiert" also wo der | blinkt^^ man wie beschreibt man denn das?

    Ich hoffe ihr wisst was ich meine und das es auch eine Funktion dafür gibt... Hab mal was mit State gesucht aber nix gefunden...

    MFG Fire

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    2 Mal editiert, zuletzt von FireFlyer (9. März 2008 um 01:13)

    • Offizieller Beitrag

    Mit

    [autoit]

    ControlGetFocus()

    [/autoit]

    erhältst du den ClassName des Controls, das den Fokus besitzt.
    Der ClassName ist aber nicht identisch mit der ID. Du müßtest also ein Array führen, welches ID und zugehörige ClassName führt.
    Inputfelder gehören zu ClassName: Edit
    Das erste (erstellte) Input ist dann Edit1, das zweite Edit2 usw.
    Edit-Controls gehören natürlich auch zu dieser Kategorie.
    Wichtig ist die Reihenfolge, in der die Controls erstellt werden. Das bestimmt dann die fortlaufende Nr. (Instance) hinter der ClassName-Bezeichnung.

    • Offizieller Beitrag

    Hallo

    Z.B. so:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 137, 93, 193, 125)
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    $Input2 = GUICtrlCreateInput("Input2", 8, 32, 121, 21)
    $Input3 = GUICtrlCreateInput("Input3", 8, 56, 121, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $x = ControlGetFocus($Form1)
    $gt = ControlGetText($Form1,"",$x)
    ControlSetText($Form1,"",$x,"AKTIV!")
    Sleep(500)
    ControlSetText($Form1,"",$x,$gt)
    EndSwitch
    WEnd

    [/autoit]

    Mfg Spider

  • Wenn jedes Input eine andere Funktion auslösen soll, kann man es z.B. So machen:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>

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

    Global $last_focus = -1

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

    $GUI = GUICreate("Test Edit")
    $Edit1 = GUICtrlCreateInput("", 20, 50, 150, 30)
    $Edit2 = GUICtrlCreateInput("", 20, 90, 150, 30)
    $Edit3 = GUICtrlCreateInput("", 20, 140, 150, 30)
    $Edit4 = GUICtrlCreateInput("", 20, 180, 150, 30)
    $Button = GUICtrlCreateButton("Button", 20, 210)
    GUICtrlSetState(-1, $Gui_Focus)
    GUISetState()

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case -3
    Exit
    EndSwitch
    If Not _IsFocused($GUI,$last_focus) Then
    Select
    Case _IsFocused($GUI, $Edit1)
    GUICtrlSetData($Button,$Edit1)
    $last_focus = $Edit1
    Case _IsFocused($GUI, $Edit2)
    GUICtrlSetData($Button,$Edit2)
    $last_focus = $Edit2
    Case _IsFocused($GUI, $Edit3)
    GUICtrlSetData($Button,$Edit3)
    $last_focus = $Edit3
    Case _IsFocused($GUI, $Edit4)
    GUICtrlSetData($Button,$Edit4)
    $last_focus = $Edit4
    EndSelect
    EndIf
    WEnd

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

    ;from http://www.autoitscript.com/forum/index.ph…2&hl=_IsFocused , but changed a bit
    Func _IsFocused($hWnd, $nCID)
    Return GUICtrlGetHandle($nCID) = ControlGetHandle($hWnd, '', ControlGetFocus($hWnd))
    EndFunc

    [/autoit]
  • hmm aber das input is ja in nem GUI von mir geht dass dann nicht auch so? :

    [autoit]

    Func focustest()
    $state = GUICtrlGetState($input)
    If $state = $GUI_FOCUS Then
    MsgBox(0, "TEST", "TEST")
    EndIf
    EndFunc

    [/autoit]

    Allerdings tut sich bei mir nix... kann es sein dass das am Gui Event Modus = On liegt?

    focustest läuft natürlich inner endlosschleife also daran liegts schonmal nicht!!!

    MFG Fire

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • lässt sich nichtr auslesen:

    Zitat

    ONLY the state of a control enabled/disabled/hidden/show/dropaccepted


    da steht nichts von FOCUS

  • ;( des aber schon traurig... und mit classname wird das echt übelst umständlich denn in meinem gui befinden sich über 100 inputs :(

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    • Offizieller Beitrag

    Im GUIOnEvent-Mode gibt es noch eine andere Möglichkeit:

    [autoit]


    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)

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

    $Form1 = GUICreate("Form1", 137, 93, 193, 125)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, 'test')
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    $Input2 = GUICtrlCreateInput("Input2", 8, 32, 121, 21)
    $Input3 = GUICtrlCreateInput("Input3", 8, 56, 121, 21)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(20)
    WEnd

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

    Func test()
    Local $msg = GUIGetCursorInfo()
    msgbox(0,'',$msg[4]-$Input1)
    EndFunc

    [/autoit]

    GUIGetCursorInfo() liefert ein Array zurück, dessen Eintrag [4] die ID des Controls unter dem Mauszeiger ist. Verbunden mit dem PRIMARYDOWN-Event erhält man die ID des angeklickten Inputs. Reagiert allerdings nur auf Mausklicks. Die Tasten TAB und/oder ENTER müsste man extra abfangen.


  • Da ist doch nichts mit Classname. Da brauchst du nur die CtrlID, die du beim erstellen des Controls bekommst.
    Im Bsp. wird eine Funktion ausgeführt. wenn sich der Fokus verändert hat, und zwar abhängig von der GUICtrlID!