delphi Canvas的TextOut如何自动换行?

delphi Canvas的TextOut如何自动换行?,第1张

用textout自动换行非常麻烦,你在写代码控制偏移量时要考虑到字体,字体大小等因素。如果你的要求是直接在画布上绘出可以自动换行的文字,你可以考虑用DrawText来实现,下面是实现代码:

//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数组中保存的就是各行文字了.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11939344.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存