Показать сообщение отдельно
Старый 02.08.2011, 17:19
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
такой вот вараинт
Код 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 они соответствуют реальным символам)


Последний раз редактировалось silin; 02.08.2011 в 17:35.