문제

<mx : 텍스트> 구성 요소로 이동할 때 커서/마우스가 끝나는 단어를 찾는 것이 가능합니까? 예를 들어, 사용자가 문장 (내부 텍스트 구성 요소)을 따라 마우스를 움직일 때 각 단어는 갈수록 강조 표시됩니다 (마우스 버튼을 아래로 누르는 동안 강조 표시 할 수는 있지만 내가 원하는 방식은 아닙니다).

정보에 감사드립니다.

도움이 되었습니까?

해결책

다음과 같은 방법은 다음과 같습니다. MX : 텍스트 구성 요소를 확장하는 고유 한 구성 요소를 만들어야합니다. 나는 사용했다 MyText 이 예에서. 다음은 전체 코드입니다 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>

텍스트 구성 요소 내부의 텍스트 필드 객체의 메소드에 액세스하여 마우스 좌표 아래에서 문자 색인을 찾은 다음 문자가 속한 단어를 찾습니다. 이것은 빠른 예입니다. 아마도 실제 세계 사용을 위해 더 정교하게 만들어야 할 것입니다.

다른 팁

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