Wort um Cursor auslesen

  • Hi,
    Ich brauche eine Funktion die das Wort um eine Buchstaben stelle die ich mit GUIGetCursorInfo auslese ausliest.
    Heißt mein Cursor ist z.B auf der 3 Linie an der 12 Stelle (auf dem Wort Baum). Jetzt soll er mir das Wort um den auf dem der Cursor liegt auslesen. Wichtig es soll möglich sein das Wort auch auszulesen wen der Cursor vor dem ersten oder hinter dem Letzten Buchstaben des Wortes liegt.

  • Also ich habe eine Editbox in der ich die Curser Position auslese (Linie und Zeichen).
    Ich will nun dort das ganze Wort auslesen in dem der Cursor sitzt.

    Ich habe schon eine Funktion dafür die auch perfekt klappt AUSER sie ist viel zu langsam den es soll wärend man schreibt das Wort auslesen. HIer meine zu langsame Idee :

    [autoit]

    Func GetStringArroundCursor($String,$Count)
    $StringLeft = StringLeft($String,$Count)
    $StringRight = StringRight($String,StringLen($String)-$Count+1)

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

    Global $First = ""
    Global $Last = ""

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

    Global $W = 0

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

    Global $GoDown = 1

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

    While $W = 0
    $S = StringRight(StringLeft($StringLeft,$Count-$GoDown),1)

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

    If $S = " " or $S = "" Then
    $W = 1
    Else
    $First = $First&$s
    $GoDown = $GoDown+1
    EndIf
    WEnd

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

    $W = 0
    $GoDown = 0

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

    While $W = 0
    $S1 = StringLeft($String,$Count+$GoDown)
    $S = StringRight($S1,1)

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

    If $S = " " or $S = "" Then
    $W = 1
    Else
    $Last = $Last&$s
    $GoDown = $GoDown+1
    EndIf

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

    WEnd

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

    Return _StringReverse($First)&$Last

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

    EndFunc

    [/autoit]
    • Offizieller Beitrag

    es soll wärend man schreibt das Wort auslesen.


    Das hat aber gar nichts mit deiner Fragestellung zu tun.
    Auslesen "on-the-fly" ist kein Wiedergeben eines Wortes unter dem Cursor, da ja während des Schreibens das Wort gar nicht existiert, sondern erst zusammengesetzt wird.
    Du mußt also einen Wortanfang registrieren (im Allgemeinen ein vorhergehendes Leerzeichen oder ein Zeilenumbruch) und dann jedes eingegebene Zeichen deinem aktuellen Wortstring hinzufügen. Wenn du immer an das Ende eines Edits schreibst, ist das nicht problematisch - immer das letzte Zeichen auslesen. Aber wenn du mittendrin schreibst, wird es wesentlich aufwändiger. Dann solltest du den Input abfangen (z. B. mit _IsPressed, gibt zwar Besseres - aber das geht dann in Richtung Keylogging, daher keine näheren Infos).

  • ;)
    Was ist aber wenn ich nichts schreibe sondern nur den Cursor bewege dann macht dein Vorschlag keinen sinn mehr da ich keine Taste registrieren kann !?

    • Offizieller Beitrag

    es soll wärend man schreibt das Wort auslesen.

    aber wenn ich nichts schreibe sondern nur den Cursor bewege dann macht dein Vorschlag keinen sinn mehr da ich keine Taste registrieren kann

    :wacko: Vielleicht solltest du dich einfach mal entscheiden, was du nun wirklich willst.

  • Du willst also eine fertiges Script haben oder wie?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • mit doppelklick auf ein wort wird dieses markiert, was du ja dann kopieren könntest, aber das wird wahrscheinlich nichts taugen während man schreibt.
    ich weiß nicht ob man sowas wie nen event `(on change) auf ne editbox machen kann mitdem man aktuelle auslesen kann und mit vorherigem vergleichen?

  • Wenn man davon ausgeht, dass du einen Text $text sowie eine Position $pos hast, könntest du das vielleicht ungefähr so machen:

    [autoit]


    Func _ExtractWordFromTextWithPositionAndReallyLongFunctionName($text,$pos)
    For $i=$pos To 0 Step -1
    If _textGetChr($i) = " " Then
    $a=$i
    ExitLoop
    For $i=$pos To StringLen($text)-1
    If _textGetChr($i) = " " Then
    $e=$i
    ExitLoop
    Return StringMid($text,$a,$e)
    EndFunc
    Func _textGetChr($i)
    Return StringMid($i,1)
    EndFunc

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.