
//delphi XE中编译通过
procedure TForm1.Button1Click(Sender: TObject)
const
str = '汉字进行自动换行汉字进行自动换行汉字进行自动换行'
var
R: TRect
begin
with R do
begin
Left := 10
Top := 10
right := 50
end
DrawText(Form1.Canvas.Handle, str, Length(str), R, DT_WORDBREAK)
//DT_WORDBREAK表示自动换行。left与right来确定矩形的宽度,根据文字的多少,可以自动调//整矩形的高度
end
我把资料整理一下,一会儿发到我的百度空间上!
将文字显示在一个div中, 调整div样式, 保持宽度, 字体, 行高, 字号等信息和要在canvas上绘制的文字样式一致, 然后把要绘制的文字赋值到这个div中var rng = document.createRange() //生成一个文本区域
rng.selectNode(div.childNodes[0]) //文本区指向刚才的div里面的文本内容
var rects = rng.getClientRects() //获得文本区的形状
用关键词"Range"去查询一下firefox的官方文档, 这个rects是一个数组
如果文本区自动换行成了3行, 那么rects中就会有3个
下面进行循环, div.childNodes[0].length 得到文字数量
var node = div.childNodes[0]
var length = node.length
var lines = []
for(var i = 0i <lengthi++)
{
rng.setEnd(node, i)
if(rng.getClientRects().length <2)
continue
if(i == length - 1)
{
lines.push(rng.toString())
break
}
var txt = rng.toString()
lines.push(txt.substr(0, txt.length - 1))
rng.setStart(node, i - 1)
}
现在, lines数组中保存的就是各行文字了.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)