用drawtext在canvas上画文本的时候自动折行,如何得知共有多少行?每行有什么字符串? (300分)

  • 主题发起人 主题发起人 djdj
  • 开始时间 开始时间
D

djdj

Unregistered / Unconfirmed
GUEST, unregistred user!
用drawtext在canvas上画文本的时候自动折行,<br>如何得知共有多少行?每行有什么字符串?<br>drawtext(dc, pchar(s), length(s), Rect, &nbsp;DT_WORDBREAK or DT_EXTERNALLEADING);
 
怎么没有人帮忙阿?<br><br>很难么?
 
不是吧!是高手不想说吗?
 
帮帮忙,提前一下也有分。
 
我没有见到过这样的控件,不过用代码可以实现。
 
用printer控制应该可以吧!
 
FastReport应该就可以啊
 
fastreport真的可以吗?<br><br>哪里有demo?
 
//看一下吧.<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; ARect : TRect;<br>&nbsp; nRow : Integer;<br>Const<br>&nbsp; STR = 'ABC'+#13+<br>&nbsp; &nbsp; &nbsp; &nbsp; 'ABC'+#13+<br>&nbsp; &nbsp; &nbsp; &nbsp; 'ABC'+#13+<br>&nbsp; &nbsp; &nbsp; &nbsp; 'ABC'+#13+<br>&nbsp; &nbsp; &nbsp; &nbsp; 'ABC';<br>begin<br>&nbsp; ARect := Rect(10,10,100,100);<br>&nbsp; with Canvas do<br>&nbsp; begin<br>&nbsp; &nbsp; DrawText(Handle, STR, Length(STR), ARect, DT_WORDBREAK);<br>&nbsp; &nbsp; DrawText(Handle, STR, Length(STR), ARect, DT_CALCRECT or DT_SINGLELINE);<br>&nbsp; &nbsp; nRow := ARect.Bottom - ARect.Top;<br>&nbsp; &nbsp; DrawText(Handle, STR, Length(STR), ARect, DT_CALCRECT or DT_WORDBREAK);<br>&nbsp; &nbsp; if nRow &gt; 0 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; ShowMessage(IntToStr((ARect.Bottom - ARect.Top) div nRow));<br>&nbsp; &nbsp; end;<br>&nbsp; end;<br>end;
 
呵呵,amli,你是第一个参与问题的人,谢谢。<br>哎,现在的大富翁,这么高分的贴子硬是没有人理会。<br>我明白你的意思,你是计算draw一行的高度,然后<br>计算整个的rect高度除以它就得到行数。<br>其实我需要的是每一行确切的字符串。<br><br>没有好的办法,我只好用一个memo跟这个rect一样大小,<br>然后用memo.text := STR来“模拟“拉。求得memo.lines<br>尤其是这种方法对于中文还好用,有英文比较多的误差就比较大。<br>英文drawtext是自动判断单词的,而mome不管那些。<br><br>哎,真不想用这种方法,谁还有更好的方法?<br>
 
drawText 看来是没有提供这样的功能的 DrawTextEx也没有,还真的挺难的。
 
后退
顶部