首页 > 设计 > WEB开发 > 正文

4.15.找出一个TextArea 中最后显示的字符

2023-08-05 15:52:18
字体:
来源:转载
供稿:网友
4.15.1. 问题
我想找出一个TextArea 中最后显示的字符。
4.15.2. 解决办法
使用TextField 的绑定方法来返回TextArea 的大小,然后使用getLineMetrics 方法确定实际行高。然后决定最后一个可视行,使用getLineOffset 和getLineLength 方法找出最后一个可视行中的最后一个字符。
4.15.3. 讨论
一个TextField 中的每一行都有它自己特征的属性并传给getLineMetrics 方法,同时使用TextLineMetrics 对象来返回。TextLineMetrics 定义了一行文本的多个属性:高度,宽度,基线和行间距。图4-1 描述了TextLineMetrics 对象定义的属性。

图4-1. TextLineMetrics对象的属性

下面的例子使用了高度属性来找出TextArea 中最后显示的行。首先,使用getBounds 方法取回一个关于可视TextArea 的宽高xy 值得矩形。然后使用TextLineMetrics 对象取得最后一个可视行,然后添加它。最后,使用getLineOffset 方法获取这一行的最后一个字符,getLineOffset 可以取得一行的第一个字符索引,把它与这一行的总长度相加就得到了最后一个字符:
+展开
-ActionScript
changeArea.text.charAt(changeArea.getLineOffset(i-1)+changeArea.getLineLength(i-1))

下面是完整的例子:
+展开
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="400"
height="300xmlns:cookbook="oreilly.cookbook.*">

<mx:Script>
<![CDATA[
private function findLineMetrics():void
{
if(changeField.text.length > 1)
{
var rect:Rectangle = changeArea.getBounds(this);
var visibleTextHeight:Number = 0;
var i:int = 0;
while(visibleTextHeight < rect.height && i <
changeArea.numLines)
{
var metrics:TextLineMetrics =
changeArea.getLineMetrics(i);
visibleTextHeight+=metrics.ascent+metrics.height;
i++;
}
trace(changeArea.text.charAt(changeArea.getLineOffset(i-1)+
changeArea.getLineLength(i-1)));
}
}

]]>
</mx:Script>
<mx:TextInput id="changeFieldwidth="200"
textInput="findLineMetrics()"/>

<cookbook:SpecialTextArea id="changeArea"
text="{changeField.text}wordWrap="truewidth="150"
height="30y="100"/>

</mx:Canvas>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表