Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вспывающая подсказка к тексту (http://www.flasher.ru/forum/showthread.php?t=162552)

Sergespb 02.08.2011 13:57

Вспывающая подсказка к тексту
 
Здравствуйте, уважаемые форумчане.

Задали вот такое задание:
1. Сделать редактируемое текстовое поле.
2. При наведении на какое-либо слово в этом тексте всплывает подсказка (всё что угодно).

Вот меня интересует. Подскажите хотябы в какую сторону копать.

Как сделать так чтобы вызывалось событие при наведении на слово и обработчику передавалось само это слово?

Заранее спасибо.

toFL 02.08.2011 14:17

Копай в сторону: MouseEvent, RegExp (выделение строки между пробелами)

Sergespb 02.08.2011 16:16

Ну так то понятно... только как дать понять функции вызываемой MouseEvent над каким словом мышь зависла?

tsarapkabel 02.08.2011 16:27

Если делать по-хитрому: ловим MouseEvent.DOUBLE_CLICK и получаем _textField.selectedText.

Sergespb 02.08.2011 16:45

Хорошая идея с даблкликом. Надо будет запомнить. Но сейчас мне нужно при наведении. ((

alatar 02.08.2011 17:12

Не нужны тут ни RegExp, ни DOUBLE_CLICK. По MOUSE_MOVE проверяется над каким символом находится курсор (getCharIndexAtPoint) и в обе стороны от этого символа, в строке, ищутся ближайшие пробелы. После чего вызывается функция показа подсказки.

Sergespb, будет плодить одинаковые темы, получите плюс от модераторов.

toFL 02.08.2011 17:12

Цитата:

Сообщение от Sergespb (Сообщение 1017152)
Ну так то понятно... только как дать понять функции вызываемой MouseEvent над каким словом мышь зависла?

Цитата:

TextField.getCharIndexAtPoint(x, y);
Смотрим документацию TextField

Sergespb 02.08.2011 17:17

Цитата:

Sergespb, будет плодить одинаковые темы, получите плюс от модераторов.
Я новичок на форуме. Тема появилась не сразу. Поэтому создал вторую. А удалить нельзя. =( Надеюсь не накажут в первый раз.

silin 02.08.2011 17:19

такой вот вараинт
Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.text.*;
        //import silin.utils.Hint;// http://silin.su/#AS3
 
        public class Main extends Sprite
        {
                private var label:TextField;
                private var currId:int = -1;
                private var wordArr:Array /*String*/;
 
                public function Main():void
                {
                        var i:int;
                        label = new TextField();
                        label.autoSize = TextFieldAutoSize.LEFT;
                        label.text = "Необходимо, чтобы при наведении, на какое-либо слово в этом поле всплывала подсказка.";
                        addChild(label);
                        var tmp:String = label.text;
                        // мяняем пунктацию на пробелы
                        var nonWordChars:Array = [',', ';', '.'];// !,=,+,...или что там нужно еще
                        for (i = 0; i < nonWordChars.length; i++)
                        {
                                tmp = tmp.split(nonWordChars[i]).join(" ");
                        }
                        // массив слов
                        wordArr = tmp.split(" ");
 
                        //Hint.register(stage);
                        addEventListener(Event.ENTER_FRAME, enterFrame);
 
                }
 
                private function enterFrame(e:Event):void
                {
                        var charIndx:int = label.getCharIndexAtPoint(mouseX, mouseY);
                        if (charIndx < 0)
                        {
                                currId = -1;
                                return;
                        }
 
                        var wordIndx:int = 0;
                        var charCount:int = wordArr[0].length;
 
                        while (charCount < charIndx && wordIndx < wordArr.length - 1)
                        {
                                charCount += wordArr[++wordIndx].length + 1;
                        }
 
                        if (wordIndx != currId)
                        {
                                var word:String = wordArr[wordIndx];
                                if (word != "")
                                {
                                        trace("word : " + word);
                                        //Hint.show(word);
                                        currId = wordIndx;
                                }
 
                        }
                }
        }
}

поправил: не надо удалять пустые элементы из массива слов (путаница будет, потому как в getCharIndexAtPoint они соответствуют реальным символам)


Часовой пояс GMT +4, время: 19:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.