是否有可能(如果是这样的话)找出当光标移动到<!> lt时光标/鼠标的字样。 mx:文字<!> gt;零件? 因此,例如当用户沿着句子(文本组件内部)移动鼠标时,每个单词将在它们移动时突出显示(我知道您可以在按下鼠标按钮的同时突出显示 - 但这不是我希望如何操作)。 / p>

感谢您的任何信息。

有帮助吗?

解决方案

这是一种方法:您需要创建自己的组件来扩展mx:Text组件。我在这个例子中使用了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>

它的工作原理是访问Text组件内的TextField对象的方法,在鼠标坐标下找到字符索引,然后找到该字符所属的单词。这是一个简单的例子,你可能需要让它更精细地用于现实世界。

其他提示

您需要使用TextSnapshot类。您可以从textSnapshot属性的文本控件中获取它。 TextSnapshot有一个hitTestTextNearPos()函数,可用于确定用户鼠标所在的字符。

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

不确定如何处理启动选择,但这样的事情应该有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top