
Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.edit.SelectionFormat;
import flashx.textLayout.edit.SelectionManager;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.events.SelectionEvent;
import flashx.textLayout.formats.TextLayoutFormat;
/**
* ...
* @author wolsh
*/
public class Main extends Sprite
{
//// Цвет и непрозрачность закрашивания полосы "подсветки" при выделении
private var _selectionColorFocusOn:uint = 0xDD2222; //Different color is 0x4fe4e4
private var _selectionColorFocusOff:uint = 0xDDDD00;
private var _selectionAlpha:Number = 1;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//// отображаемый контейнер текста
var textContainer:Sprite = new Sprite();
this.addChild(textContainer);
textContainer.x = 100;
textContainer.y = 100;
//// Стиль для выделения (в фокусе)
var colorOn:uint = getDifferentColor(_selectionColorFocusOn);
var selectionStyleFocusOn:SelectionFormat = new SelectionFormat(colorOn, _selectionAlpha);
//// Стиль для выделения (без фокуса)
var colorOff:uint = getDifferentColor(_selectionColorFocusOff);
var selectionStyleFocusOff:SelectionFormat = new SelectionFormat(colorOff, _selectionAlpha);
//// Менеджер стилей для выделения
var selectionManager:SelectionManager = new SelectionManager();
//// Устанавливаем стиль для выделения в фокусе
selectionManager.focusedSelectionFormat = selectionStyleFocusOn;
selectionManager.unfocusedSelectionFormat = selectionStyleFocusOff;
//// Text Font settings
var textFormat:TextLayoutFormat = new TextLayoutFormat();
textFormat.fontFamily = "Arial";
textFormat.fontSize = 14;
//// Контроллер для управления отображением нашего текста
var textController:ContainerController = new ContainerController(textContainer);
//// Устанавливаем формат текста
textController.format = textFormat;
//// Устанавливаем размеры текстового блока
textController.setCompositionSize(1000, 40);
//// строчный элемент
var textSpan:SpanElement = new SpanElement();
textSpan.text = "Вот какой-то текст, который будем выделять.";
//// блок текста, содержащий наш строчный элемент
var textParagraph:ParagraphElement = new ParagraphElement();
textParagraph.addChild(textSpan);
//// Главный управляющий элемент))
var textFlow:TextFlow = new TextFlow();
textFlow.addChild(textParagraph);
//// Устанавливаем управляющего выделением
textFlow.interactionManager = selectionManager;
//// Добавляем управляющего нашим текстом
textFlow.flowComposer.addController(textController);
//// Запускаем обновление отображения
textFlow.flowComposer.updateAllControllers();
//// Подписываемся на собтие выделения
textFlow.addEventListener(SelectionEvent.SELECTION_CHANGE, handlerSelection);
}
private function getDifferentColor(selectionColor:uint):uint
{
var r:uint = 0xFF - (selectionColor >> 16);
var g:uint = 0xFF - (selectionColor >> 8) & 0xFF;
var b:uint = 0xFF - selectionColor & 0xFF;
var rgb:uint = (r << 16) + (g << 8) + b;
return rgb;
}
private function handlerSelection(event:SelectionEvent):void
{
var selectionBegin:int = event.selectionState.absoluteStart;
var selectionEnd:int = event.selectionState.absoluteEnd;
trace(event.selectionState.textFlow.getText(selectionBegin, selectionEnd))
}
}
}