1

マウスのx、y位置に基づいて、SparkベースのRichEditableTextで文字インデックスを取得する方法を見つけたいと思います。

mx.controls.TextAreaには保護されたgetCharIndexAtPoint()メソッドがありますが、これに相当するものがSparkRichEditableTextに見つかりません。これは残念です。

アイデアや推奨事項はありますか?

4

4 に答える 4

1

back2dos から頭を上げた後、同様のソリューションを探していました。次のソリューションを思いつきました。おそらく少し作業が必要ですが、機能します

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

于 2010-11-01T06:57:58.900 に答える
1

理由がわかります。RichEditableText は FTE を使用しているようですが、TextArea は TextField を使用しているため、TextField::getCharIndexAtPointを使用できます。ある時点で char がない場合もあります。

FTE を見てから長い時間が経ちましたが、 TextLine::getAtomIndexAtPointが良い出発点になると思います。また、TLFTextField::getCharIndexAtPointを見てください。

于 2010-03-25T12:46:49.487 に答える
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;
于 2012-04-29T22:33:32.380 に答える
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;
}
于 2010-12-02T18:09:51.023 に答える