Показать сообщение отдельно
Старый 17.01.2011, 19:45
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Полученный Rectangle имеет координаты относительно TextLine. Т.е. надо скорректировать x и y. Вот проверенный код. Обратите внимание на номер символа, они отсчитываются с 0.
Код:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="100" minHeight="100">

    <fx:Script>
        <![CDATA[
            import flash.text.engine.TextLine;
            
            import flashx.textLayout.compose.TextFlowLine;
            import flashx.textLayout.elements.TextFlow;
            
            import mx.events.FlexEvent;
            import mx.graphics.SolidColor;
            
            import spark.primitives.Rect;

            protected function area_creationCompleteHandler(event:FlexEvent):void
            {
                var flow:TextFlow = area.textFlow;
                var flowLine:TextFlowLine = flow.flowComposer.findLineAtPosition(4);
                var textLine:TextLine = flowLine.getTextLine();
                
                var atomInd:int = textLine.getAtomIndexAtCharIndex(4);
                
                var rect:Rectangle = textLine.getAtomBounds(atomInd);
                
                rect.x += textLine.x;
                rect.y += textLine.y;
                
                trace(rect);
                
                var rectItem:Rect = new Rect();
                rectItem.x = rect.x;
                rectItem.y = rect.y;
                rectItem.width = rect.width;
                rectItem.height = rect.height;
                
                rectItem.fill = new SolidColor(0xFF0000);
                
                addElement(rectItem);
            }
        ]]>
    </fx:Script>
    <s:TextArea id="area" text="Hello world" creationComplete="area_creationCompleteHandler(event)"/>
</s:Application>