Highlight a paragraph when the user clicks a character
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.text.TextLineMetrics;
public class Main extends Sprite {
private var _field:TextField = new TextField( );
private var _highlight:Sprite = new Sprite( );
public function Main( ) {
_field.border = true;
_field.background = true;
_field.multiline = true;
_field.wordWrap = true;
_field.selectable = false;
_field.width = 400;
_field.height = 400;
addChild(_field);
_field.text = "Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text ";
_field.addEventListener(MouseEvent.CLICK, onDoubleClick);
addChild(_highlight);
}
private function onDoubleClick(event:MouseEvent):void {
var index:int = _field.getCharIndexAtPoint(mouseX, mouseY);
var startIndex:int = _field.getFirstCharInParagraph(index);
var stopIndex:int = startIndex + _field.getParagraphLength(index);
var startLine:int = _field.getLineIndexOfChar(startIndex);
var stopLine:int = _field.getLineIndexOfChar(stopIndex - 1);
var metrics:TextLineMetrics;
var lineCharacter:int;
var rectangle:Rectangle;
_highlight.graphics.clear( );
_highlight.graphics.lineStyle(0, 0, 0);
for(var i:int = startLine; i <= stopLine; i++) {
lineCharacter = _field.getLineOffset(i);
rectangle = _field.getCharBoundaries(lineCharacter);
metrics = _field.getLineMetrics(i);
_highlight.graphics.beginFill(0x00FFFF, .25);
_highlight.graphics.drawRect(rectangle.x, rectangle.y, metrics.width, metrics.height);
_highlight.graphics.endFill( );
}
}
}
}
Related examples in the same category