我想找到一種方法,以基於Spark xy,y位置的基於Spark的RichEditableText獲取字符索引。getCharIndexAtPoint()在Spark RichEditableText中相當於
mx.controls.TextArea有一個受保護的getCharIndexAtPoint()方法,但我無法在Spark RichEditableText中找到這個令人失望的等價物。
任何想法或建議?
我想找到一種方法,以基於Spark xy,y位置的基於Spark的RichEditableText獲取字符索引。getCharIndexAtPoint()在Spark RichEditableText中相當於
mx.controls.TextArea有一個受保護的getCharIndexAtPoint()方法,但我無法在Spark RichEditableText中找到這個令人失望的等價物。
任何想法或建議?
我明白了爲什麼。似乎RichEditableText使用FTE,而TextArea使用TextField,因此您可以使用TextField::getCharIndexAtPoint。你可能還沒有一點焦點。
這是很長的時間,因爲我看了FTE,但我認爲TextLine::getAtomIndexAtPoint將是一個好的開始。另外,你應該看看TLFTextField::getCharIndexAtPoint。
我一直在尋找從back2dos的對決後,類似的解決方案,我想出了以下解決方案,可能需要一些工作,但它的功能
下面是我用什麼:
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;
}
我有同樣的問題。最初,Even 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;