Den Cursor in einer Editbox setzen?

  • Ich hab die Position des Cursors in der Editbox mit folgendem Befehl in Variable $X und $Y gespeichert

    [autoit]

    $X = ControlCommand ( "", "", $Editbox, "GetCurrentCol", "" )
    $Y = ControlCommand ( "", "", $Editbox, "GetCurrentLine", "" )

    [/autoit]

    Aber wie kann ich den Cursor später dort wieder hinsetzen?
    Muss ja gehn sonst wär "GetCurrentLine" ziemlich sinnlos

    Pls help me

  • Wenn man den Cursor nur speichern will und Col/Row egal sind:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Region Main
    $Form1 = GUICreate('Cursor-Selection', 400, 300, 200, 50)
    $Input = GUICtrlCreateInput('dfsfsdfsfs dfgd ädf', 10, 10, 380, 21)
    GUISetState()
    #EndRegion Main
    MsgBox(0,"External","In den nächsten 5 Sekunden die Markierung änder!")
    Sleep(5000)
    $hWnd = GUICtrlGetHandle($Input)
    $iLong = _ControlSendMsg($hWnd,$EM_GETSEL)
    $start = BitAND($iLong, 0xFFFF) ;Lo-Word
    $end = BitShift($iLong, 16) ;Hi-Word
    MsgBox(0, $start, $end)
    _ControlSendMsg($hWnd,$EM_SETSEL,0,0)
    Sleep(1000)
    _ControlSendMsg($hWnd,$EM_SETSEL,$start,$end)
    Sleep(1000)

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

    MsgBox(0,"Internal","In den nächsten 5 Sekunden die Markierung änder!")
    Sleep(5000)
    $hWnd = GUICtrlGetHandle($Input)
    $iLong = GUICtrlSendMsg($Input,$EM_GETSEL,0,0)
    $start = BitAND($iLong, 0xFFFF) ;Lo-Word
    $end = BitShift($iLong, 16) ;Hi-Word
    MsgBox(0, $start, $end)
    GUICtrlSendMsg($Input,$EM_SETSEL,0,0)
    Sleep(1000)
    GUICtrlSendMsg($Input,$EM_SETSEL,$start,$end)
    Sleep(1000)

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

    Func _ControlSendMsg($hWnd,$Msg,$wParam="",$lParam="")
    Local $res = DllCall("user32.dll","int","SendMessage","hwnd",$hWnd,"uint",$Msg,"long",$wParam,"long",$lParam)
    Return $res[0]
    EndFunc

    [/autoit]
  • Ich wollte so eine Art HTML Editor schreiben und wenn man auf einen Button klickt wird in die Editbox zum Beispiel <html/> gesetzt.
    Aber die Editbox deaktiviert sich immer danach. Also setz ich den Focus auf die Editbox.

    Problem: Der Cursor ist nicht an der Stelle, wo der Text eingefügt wurde. Wie kann ich das machen?

    Um den Text einzufügen benutze ich

    [autoit]

    ControlCommand ( "", "", $Editbox, "EditPaste", "<html/>")

    [/autoit]

    Um den Focus zu setzen benutze ich

    [autoit]

    ControlFocus ("", "", $Editbox)

    [/autoit]

    Und dann hab ich GetCurrentCol und GetCurrentLine gefunden und dachte das es damit geht.
    Leider weis ich nich wie ich wie ich den Cursor in der Editbox setzen kann.

    • Offizieller Beitrag

    Da du also das Edit-Ctrl selbst erstellst, nutze die Edit-UDF.
    Du kannst eine Auswahl setzen mit _GUICtrlEdit_SetSel($hWnd, $iStart, $iEnd).
    Wenn $iStart und $iEnd denselben Wert haben, wird nicht markiert, sondern nur der Cursor gesetzt - das, was du willst.
    Dazu brauchst du also die Anzahl der geschriebenen Zeichen - aber das solltest du hinbekommen.