2009-06-11 1 views
1

HI Everyone, Как я могу найти номер строки в таких событиях, как щелчок мышью, нажатие клавиш и активация клавиш. А также выделите эту строку цветом. Я использовал TextArea.Как рассчитать номер строки относительно позиции курсора в TextArea с помощью Flex?

Спасибо заранее.

С уважением, shivang

ответ

3

Функциональность вам нужно содержится в TextField классе. Вы должны использовать метод getLineIndexAtPointTextField, чтобы получить линию под определенным положением.

Но 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); 
    } 
} 
} 
+0

Спасибо за быстрый ответ Hrundik. Он работает ..... Но как я могу выделить фон конкретной линии? Еще раз спасибо. – shivang

+0

Очень полезный совет, я не знал о TextField.getLineIndexAtPoint(). Обратите внимание, что mx.controls.TextArea скрывает textField, но fl.controls.TextArea имеет публичное свойство textField, – jhocking

Смежные вопросы