Encontre a palavra o mouse está sobre para o componente de texto (Flex / ActionScript)
-
03-07-2019 - |
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
Obrigado por qualquer informação.
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.