Überprüfen, ob der Cursor in einem Input ist

  • Hi an Alle^^

    Ich bin gerade blind.
    Weiß einer von euch gerade zufällig, wie ich überprüfen könnte ob der Cursor in einem Input ist und ihn ggf. hineinsetzen kann?
    Ich hab es per

    [autoit]


    If Not (GUICtrlGetState($Input1) = 80) Then GUICtrlSetState($Input1, $GUI_FOCUS)

    [/autoit]


    versucht, aber Guictrlgetstate gibt hier immer 80 zurück
    Weiß einer von euch eine Lösung?

    Padmak

  • Ja danke das hab ich gesucht :)
    jetzt hab ich noch das Problem mit dem "Cursor-hinein-setzen"
    Ich habe es so probiert:

    [autoit]


    $caretpos = WinGetCaretPos()
    $Down = ControlGetPos($Form1, "", $Input1)
    If ($caretpos[0] < $Down[0] And WinActive("Test")) Or ($caretpos[1] < $Down[1] And WinActive("Test")) Then GUICtrlSetState($Input1, $GUI_FOCUS)

    [/autoit]


    Aber das geht nicht...
    es löscht immer sofort...
    weiß vielleicht jemand wie man den Cursor ins Input setzen kann ohne den inhalt zu markieren?

    Padmak

    Einmal editiert, zuletzt von Padmak (15. Februar 2009 um 10:13)

  • Meinst Du in etwa so ?

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $IDC_EDIT = GUICtrlCreateInput ('foo', 56, 72, 200, 20)
    $IDC_BUTTON = GUICtrlCreateButton ('OK', 20, 400, 80)
    GUICtrlSetState($IDC_BUTTON, $GUI_FOCUS)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $IDC_BUTTON
    If (GUICtrlGetState($IDC_EDIT) <> $GUI_FOCUS) Then
    GUICtrlSetState($IDC_EDIT, $GUI_FOCUS)
    Send ('{RIGHT}')
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]


    LG
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (15. Februar 2009 um 00:05)

  • Fast
    Ich habe ein Input und ein Edit.
    Der Cursor soll immer im Input bleiben
    Hier mal ein Teil meines Scriptes (ist an Jam00's komischen CMD-Ersatz angelehnt^^)

    Spoiler anzeigen
    [autoit]


    #include-once
    #RequireAdmin
    #NoTrayIcon
    #include <Array.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <INet.au3>
    Opt("CaretCoordMode", 0)
    #AutoIt3Wrapper_Icon=cmd.ico
    Global $Befehle = "Bla|"
    Global $BefehleB = "Blaaa|"
    Global $sBefehle = StringSplit($Befehle, "|")
    Global $sBefehleB = StringSplit($BefehleB, "|")
    Global $testen, $ipconfig
    Global $Pfad = @ScriptDir & ">"
    Global $Pfad2 = @ScriptDir & ">"
    Opt("GUIOnEventMode", 1)
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
    $Form1 = GUICreate("CMD Advanced", 648, 308, @DesktopWidth / 2 - (648 / 2), @DesktopHeight / 2 - (308 / 2))
    GUISetIcon(@ScriptDir & "\cmd.ico")
    GUISetBkColor(0xFFFFFF)
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 648, 308, BitOR($ES_AUTOVSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_VSCROLL), 0)
    GUICtrlSetData(-1, $Pfad)
    GUICtrlSetFont(-1, 10, 600, 0, "Lucida Console")
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x000000)
    $Input1 = GUICtrlCreateInput("", 290, 0, 241, 19, $ES_AUTOHSCROLL, 0)
    GUICtrlSetState(-1, $GUI_FOCUS)
    GUICtrlSetFont(-1, 10, 600, 0, "Lucida Console")
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button = GUICtrlCreateButton("OK", 0, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button]]
    GUISetAccelerators($Form1_AccelTable)
    _InputPos()
    $testen = True
    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_ENDE")
    GUICtrlSetOnEvent($Button, "_Main")
    GUICtrlSetState($Input1, $GUI_FOCUS)

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

    Func _ENDE()
    Exit
    EndFunc ;==>_ENDE
    Func _Main()
    _GUICtrlEdit_BeginUpdate($Edit1)
    $Fund = False
    $ReadBefehl = GUICtrlRead($Input1)
    If $ReadBefehl = "" Then Return
    _GUICtrlEdit_AppendText($Edit1, $ReadBefehl & @CRLF)
    $Befehl = StringSplit($ReadBefehl, " ")
    If $Fund = False Then _NotFound()
    _Scroll($Edit1)
    _GUICtrlEdit_EndUpdate($Edit1)
    GUICtrlSetData($Input1, "")
    EndFunc ;==>_CMD

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

    Func _Scroll($Feld)
    $Lines = _GUICtrlEdit_GetLineCount($Feld)
    _GUICtrlEdit_LineScroll($Feld, 0, $Lines)
    EndFunc ;==>_Scroll

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

    Func _NoParameters($sBefehlRead)
    _GUICtrlEdit_AppendText($Edit1, "Falsche Parameter angegeben, bitte help " & $sBefehlRead & " eingeben." & @CRLF)
    EndFunc ;==>_NoParameters

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

    Func _InputPos()
    $read = GUICtrlRead($Input1)
    $Zeichen3 = _GUICtrlEdit_GetTextLen($Edit1)
    $Down = _GUICtrlEdit_PosFromChar($Edit1, $Zeichen3 - 1)
    $Pos = ControlGetPos($Form1, "", $Input1)
    If $Pos[0] <> $Down[0] And $Pos[1] <> $Down[1] Then
    GUICtrlSetPos($Input1, $Down[0] + 8, $Down[1])
    EndIf
    If $testen = True Then GUICtrlSetPos($Input1, $Down[0] + 8, $Down[1])
    ;~ $Down = ControlGetPos($Form1, "", $Input1)
    ;~ If ($caretpos[0] < $Down[0] And WinActive("CMD Advanced")) Or ($caretpos[1] < $Down[1] And WinActive("CMD Advanced")) Then
    ;~ Send("{tab}")
    ;~ Send("{right}")
    ;~ EndIf
    EndFunc ;==>_InputPos

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

    Func _NotFound()
    $Befehl = GUICtrlRead($Input1)
    _GUICtrlEdit_AppendText($Edit1, 'Der Befehl "' & $Befehl & '" ist entweder falsch geschrieben oder konnte nicht gefunden werden.' & @CRLF & $Pfad)
    EndFunc ;==>_NotFound

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

    While 1
    _InputPos()
    Sleep(10)
    WEnd

    [/autoit]


    Wenn man hier in das Edit klickt, kommt man nur noch per Tab in das Input
    oder weiß einer von euch wie man Klicks auf das Edit ins Input umleiten kann bzw. das Edit "unklickbar" machen kann?

    Padmak

  • (ist an Jam00's komischen CMD-Ersatz angelehnt^^)


    Siehst du das Wort "angelehnt"? :D
    Komisch an deinem find ich die Schriftfarbe :D
    *augenkrebs*
    Ist des deine Lieblingsfarbe?

    Padmak