العثور على كلمة الماوس فوق لمكون النص (فليكس / أكشن)

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

سؤال

هل من الممكن (إذا كان الأمر كذلك كيف) لمعرفة ما هو كلمة المؤشر / الماوس فوق عندما تتحرك على: عنصر ؟ هكذا على سبيل المثال كما يقوم المستخدم بتحريك الماوس على طول الجملة (داخل عنصر النص)، فإن كل كلمة تسليط الضوء لأنها تذهب (وأنا أعلم أنك يمكن تسليط الضوء أثناء الضغط على زر الماوس لأسفل - ولكن هذا ليس كيف أود أن تفعل ذلك) <. / P>

وشكرا على اي معلومات.

هل كانت مفيدة؟

المحلول

وهنا طريقة واحدة للقيام بذلك: تحتاج إلى إنشاء مكون الخاص الذي يمتد 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