2009-06-11 6 views

Répondre

3

La fonctionnalité dont vous avez besoin est contenu dans TextField classe. Vous devez utiliser la méthode getLineIndexAtPoint de TextField pour obtenir la ligne dans certaines positions.

Mais TextArea masque la classe interne TextField de l'utilisateur. Donc, l'option 1 est d'utiliser UITextField. L'option deux étend TextArea et la mise en œuvre des fonctionnalités requises là-bas.

Voici un prototype rapide qui devrait vous aider à démarrer:

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

Merci pour la réponse rapide Hrundik. Cela fonctionne ..... Mais comment puis-je mettre en évidence l'arrière-plan d'une ligne particulière? Merci encore. – shivang

+0

Astuce très utile, je ne savais pas à propos de TextField.getLineIndexAtPoint(). Notez que mx.controls.TextArea cache textField, mais fl.controls.TextArea a une propriété publique 'textField' – jhocking

Questions connexes