Pergunta

É possível (se assim como) para descobrir o que a palavra do cursor / mouse está sobre quando ele está se movendo ao longo de um componente? Assim, por exemplo, como o usuário move o mouse ao longo de uma sentença (dentro componente de texto), cada palavra irá destacar como eles vão (eu sei que você pode destacar enquanto pressiona o botão do mouse para baixo - mas não como eu gostaria de fazê-lo).

Obrigado por qualquer informação.

Foi útil?

Solução

Aqui está uma maneira de fazê-lo: você precisa criar seu próprio componente que estende o componente mx: Texto. Eu costumava MyText neste exemplo. Aqui está o código completo para 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>

Ele funciona acessando os métodos do objeto TextField dentro do componente Texto, encontrando o índice de caractere sob as coordenadas do mouse e, em seguida, encontrar a palavra o personagem pertence. Este é um exemplo rápido, você provavelmente precisa para torná-lo mais elaborado para uso no mundo real.

Outras dicas

Você precisa usar a classe TextSnapshot. Você pode agarrá-lo do seu controle de texto a partir da propriedade textSnapshot. TextSnapshot tem hitTestTextNearPos () função que você pode usar para determinar qual personagem do mouse do usuário está próximo.

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

Não sei como você deseja manipular iniciar a seleção, mas algo como isso deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top