如何正确使用DrawText DT_CALCRECT?

时间:2013-05-02 16:28:22

标签: delphi winapi drawtext

我正在生成一个在页脚中有标题的报表。我使用DrawText找出标题的尺寸。问题是文本总是被剪裁,但是当我在文本末尾有一个回车符时,所有文本都显示完美。

lClientRect := Rect(0, 0, 4770, 59);
lFlags := DT_CALCRECT or DT_EXPANDTABS or Alignments[Alignment]
       or WordWraps[WordWrap] or DT_NOPREFIX or DT_TOP or DT_EXTERNALLEADING;

DrawText(lCanvas.Handle, PChar(lsCaption), Length(lsCaption), lClientRect, lFlags);

我在调用DrawText后检查了rect,它是(0,0,436,69),但是当我有回车符时,它是(0,0,436,118)。

我对发生的事情一无所知。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

回车符将第二行文本添加到字符串中,从而使计算出的矩形的高度加倍。 (Windows对于换行符或回车符是否开始换行很灵活。)

至于剪裁文本的原因(我假设在底部边缘),可能是你使用与绘制文本时不同的字体来计算尺寸。