Spark RichEditableText中的getCharIndexAtPoint()等价物

时间:2010-03-25 09:07:58

标签: flex actionscript-3 flex4

我想找到一种基于鼠标x,y位置在基于Spark的RichEditableText中获取字符索引的方法。

mx.controls.TextArea有一个受保护的getCharIndexAtPoint()方法,但我在Spark RichEditableText中找不到令人失望的等价物。

任何想法或建议?

4 个答案:

答案 0 :(得分:1)

我明白为什么。似乎RichEditableText使用FTE,而TextArea使用TextField,因此您只需使用TextField::getCharIndexAtPoint。你可能在某一点上也没有炭。

自从我看过FTE已经有很长一段时间了,但我认为TextLine::getAtomIndexAtPoint将是一个良好的开端。另外,您应该查看TLFTextField::getCharIndexAtPoint

答案 1 :(得分:1)

我正在寻找一个类似的解决方案,从back2dos抬头后,我提出了以下解决方案,可能需要一些工作,但它的功能

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

答案 2 :(得分:0)

以下是我使用的内容:

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

答案 3 :(得分:0)

我遇到了同样的问题。最初,即使Mien给出的答案对我不起作用。

通过以下更改我得到了它的工作。

        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;