Frage

Ist es möglich (wenn ja, wie), um herauszufinden, welches Wort der Cursor / Maus über ist, wenn es eine bewegte über Komponente? So zum Beispiel, wenn der Benutzer die Maus entlang eines Satzes bewegt (im Textkomponente), wird jedes Wort markieren, wie sie gehen (ich weiß, Sie markieren können, während Sie die Maustaste nach unten drücken - aber das ist nicht, wie ich wünschte, es zu tun) <. / p>

Vielen Dank für jede Info.

War es hilfreich?

Lösung

Hier ist eine Möglichkeit, es zu tun: Sie müssen Ihre eigene Komponente erstellen, die mx erweitert: Textkomponente. Früher habe ich MyText in diesem Beispiel. Hier ist der vollständige Code für MyText:

<?xml version="1.0" encoding="utf-8"?>
<mx:Text xmlns:mx="http://www.adobe.com/2006/mxml" mouseMove="onMouseMove(event)" initialize="init()">
    <mx:Script>
        <![CDATA[

            // Text formats
            private var normalTextFormat:TextFormat;
            private var highlightTextFormat:TextFormat;

            // Saved word start and end indexes
            private var wordStartIndex:int = -1;
            private var wordEndIndex:int = -1;

            private function init():void
            {
                normalTextFormat = textField.getTextFormat();
                normalTextFormat.color = 0;
                highlightTextFormat = textField.getTextFormat();
                highlightTextFormat.color = 0xFF0000;
            }

            private function onMouseMove(event:MouseEvent):void
            {
                // Clear previous word highlight
                textField.setTextFormat(normalTextFormat, wordStartIndex, wordEndIndex);

                var charIndexUnderMouse:int = textField.getCharIndexAtPoint(event.localX, event.localY);
                wordStartIndex = charIndexUnderMouse;
                wordEndIndex = charIndexUnderMouse;

                // Find start of word
                while (text.charAt(wordStartIndex) != " " && wordStartIndex > 0)
                {
                    wordStartIndex--;
                }

                // Find end of word
                while (text.charAt(wordEndIndex) != " " && wordEndIndex < text.length)
                {
                    wordEndIndex++;
                }

                // Highlight character
                textField.setTextFormat(highlightTextFormat, wordStartIndex, wordEndIndex);
            }
        ]]>
    </mx:Script>

</mx:Text>

Es funktioniert durch die Methoden des Textfield-Objekts in der Textkomponente, das Finden den Zeichenindex unter den Mauskoordinaten zugreifen und dann das Wort zu finden, das Zeichen gehört. Dies ist ein kurzes Beispiel, müssen Sie wahrscheinlich es aufwändigere für reale Welt Verwendung machen.

Andere Tipps

Sie müssen die Textsnapshot-Klasse verwenden. Sie können es aus dem Text-Steuerelement aus der textsnapshot Eigenschaft greifen. Textsnapshot hat eine hitTestTextNearPos () Funktion, die Sie, welches Zeichen des Benutzers Maus in der Nähe ist verwenden können, zu bestimmen.

...
var startIndex:Number;
...

private function textMouseMoveHandler(event:MouseEvent):void
{
    var snapshot:TextSnapshot = text.textSnapshot;
    var index = snapshot.hitTestTextNearPos(event.x, event.y);

    snapshot.setSelected(startIndex, index, true);
}

// I do not know how you want to begin the selection, so I put it here in the MouseEnter event.
private function textMouseEnterHandler(event:MouseEvent):void
{

    var snapshot:TextSnapshot = text.textSnapshot;
    startIndex = snapshot.hitTestTextNearPos(event.x, event.y);
}

Nicht sicher, wie Sie die Auswahl zu handhaben wollen starten, aber so etwas wie das funktionieren soll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top