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);
}
}
}
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
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