2009-06-11 10 views

Antwort

3

Die Funktionalität, die Sie in TextField Klasse enthalten müssen. Sie sollten getLineIndexAtPoint Methode von TextField verwenden, um die Linie unter einer bestimmten Position zu erhalten.

Aber TextArea versteckt innere TextField Klasse von Benutzer.

Also, Option eins ist UITextField zu verwenden. Option zwei erweitert TextArea und implementiert erforderliche Funktionalität dort.

Hier ist ein kurzer Prototyp, der Ihnen den Einstieg sollte helfen:

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

Dank für die schnelle Antwort Hrundik. Es funktioniert ..... Aber wie kann ich den Hintergrund der bestimmten Linie hervorheben? Danke nochmal. – shivang

+0

Sehr nützlicher Tipp, wusste ich nicht über TextField.getLineIndexAtPoint(). Beachten Sie, dass mx.controls.TextArea das textField versteckt, aber fl.controls.TextArea eine öffentliche Eigenschaft 'textField' hat. – jhocking

Verwandte Themen