Recherchez le mot sur lequel se trouve la souris pour le composant Texte (Flex / Actionscript)

StackOverflow https://stackoverflow.com/questions/811595

Question

Est-il possible (si tel est le cas comment) de savoir quel mot le curseur / souris est sur quand il se déplace sur un < mx: Texte > composant? Ainsi, par exemple, lorsque l'utilisateur déplace la souris le long d'une phrase (composant de texte interne), chaque mot est mis en surbrillance au fur et à mesure (je sais que vous pouvez le surligner en appuyant sur le bouton de la souris, mais ce n'est pas ainsi que je souhaite le faire). / p>

Merci pour toute information.

Était-ce utile?

La solution

Voici un moyen de le faire: vous devez créer votre propre composant qui étend le composant mx: Text. J'ai utilisé MyText dans cet exemple. Voici le code complet pour <=>:

<?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>

Cela fonctionne en accédant aux méthodes de l'objet TextField à l'intérieur du composant Text, en recherchant l'index du caractère sous les coordonnées de la souris, puis en recherchant le mot auquel le caractère appartient. Ceci est un exemple rapide, vous devrez probablement le rendre plus élaboré pour une utilisation dans le monde réel.

Autres conseils

Vous devez utiliser la classe TextSnapshot. Vous pouvez le récupérer dans votre contrôle de texte à partir de la propriété textSnapshot. TextSnapshot a une fonction hitTestTextNearPos () que vous pouvez utiliser pour déterminer le caractère de la souris de l'utilisateur.

...
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);
}

Vous ne savez pas comment vous voulez gérer le démarrage de la sélection, mais cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top