Функциональность вам нужно содержится в TextField
классе. Вы должны использовать метод getLineIndexAtPoint
TextField
, чтобы получить линию под определенным положением.
Но TextArea скрывает внутренний TextField
класс от пользователя.
Итак, вариант 1 - использовать UITextField
. Вариант 2 распространяется на TextArea
и реализует там необходимую функциональность.
Вот быстрый прототип, который должен помочь вам начать работу:
package test
{
import mx.controls.TextArea;
import flash.events.MouseEvent;
import flash.text.TextFormat;
public class HighlightTextArea extends TextArea
{
public function HighlightTextArea()
{
super();
}
override protected function createChildren():void
{
super.createChildren();
textField.addEventListener(MouseEvent.CLICK, textField_clickHandler);
}
private function textField_clickHandler (event:MouseEvent):void
{
var lineIndex:int = textField.getLineIndexAtPoint(event.localX, event.localY);
if (lineIndex == -1)
return;
var lineOffset:int = textField.getLineOffset(lineIndex);
var lineLength:int = textField.getLineLength(lineIndex);
if (lineLength > 0)
textField.setTextFormat(new TextFormat(null, null, 0xFF0000), lineOffset, lineOffset+lineLength);
}
}
}
Спасибо за быстрый ответ Hrundik. Он работает ..... Но как я могу выделить фон конкретной линии? Еще раз спасибо. – shivang
Очень полезный совет, я не знал о TextField.getLineIndexAtPoint(). Обратите внимание, что mx.controls.TextArea скрывает textField, но fl.controls.TextArea имеет публичное свойство textField, – jhocking