эквивалент getCharIndexAtPoint () в Spark RichEditableText - PullRequest
1 голос
/ 25 марта 2010

Я хочу найти способ получить индекс символа в RichEditableText на основе Spark на основе позиции мыши x, y.

В mx.controls.TextArea есть защищенный метод getCharIndexAtPoint (), но я не могу найти эквивалент этого в Spark RichEditableText, что разочаровывает.

Есть идеи или рекомендации?

Ответы [ 4 ]

1 голос
/ 01 ноября 2010

Я искал подобное решение после того, как из back2dos я придумал следующее решение, вероятно, нужно немного поработать, но оно работает

http://www.justinpante.net/?p=201

1 голос
/ 25 марта 2010

Я понимаю почему. Кажется, RichEditableText использует FTE, а TextArea использует TextField, поэтому вы можете просто использовать TextField :: getCharIndexAtPoint . у вас точно также может не быть символа в точке.

Прошло много времени с тех пор, как я изучал FTE, но я думаю, что TextLine :: getAtomIndexAtPoint было бы хорошим началом. Кроме того, вы должны взглянуть на TLFTextField :: getCharIndexAtPoint .

0 голосов
/ 30 апреля 2012

У меня была такая же проблема. Первоначально ответ, который дал даже Миен, у меня не сработал.

С изменениями, приведенными ниже, я заработал.

        var globalPoint:Point = new Point(stage.mouseX, stage.mouseY);

        var flowComposer:IFlowComposer = this.textFlow.flowComposer;

        for (var i:int = 0; i < flowComposer.numLines; i++)
        { 
            var textFlowLine:TextFlowLine = flowComposer.getLineAt(i);
            var textLine:TextLine = textFlowLine.getTextLine(true);
            var textRect:Rectangle = textLine.getRect(stage);

            if (globalPoint.y >= textRect.top && globalPoint.y < textRect.bottom)
            {
                return textFlowLine.absoluteStart + textLine.getAtomIndexAtPoint(globalPoint.x, globalPoint.y);
            }
        }

        return 0;
0 голосов
/ 02 декабря 2010

Вот что я использовал:

private function getCharAtPoint(ta:RichEditableText, x:Number, y:Number) : int 
{

    var globalPoint:Point = ta.localToGlobal(new Point(x, y));

    var flowComposer:IFlowComposer = ta.textFlow.flowComposer;

    for (var i:int = 0; i < flowComposer.numLines; i++){ 

        var textFlowLine:TextFlowLine = flowComposer.getLineAt(i);

        if (y >= textFlowLine.y && y < textFlowLine.height + textFlowLine.y)
        {
            return textFlowLine.absoluteStart 
                 + textFlowLine.getTextLine(true)
                     .getAtomIndexAtPoint(globalPoint.x, globalPoint.y);
        }
    }

    return -1;
}
...