Delphi7 Canvas.TextOut无法编写新行

时间:2012-04-23 08:41:44

标签: delphi delphi-7 newline

我正在尝试用新行替换所有“#”:

Canvas.TextOut(0,0,''+StringReplace('a#b','#',#13#10,[rfReplaceAll]));

但没有。
TextOut打印“a#b”,就像被替换的部分甚至不存在一样(但确实存在):ab
而不是:

a
b

#13#10是新行(Windows)吗? 那为什么这不起作用?

谢谢。

2 个答案:

答案 0 :(得分:7)

您需要使用DrawText来生成多行文字:

var
  R: TRect;
....
R := Rect(0, 0, Width, Height);
DrawText(
  Canvas.Handle,
  PChar(StringReplace('a#b','#',#13#10,[rfReplaceAll])),
  -1,
  R,
  0
);

您可能希望在最终参数中使用不同的标记,但我确定您可以阅读documentation并找出所需内容。

答案 1 :(得分:2)

Textout基本上是Windows.ExtTextOut的包装器,它不支持多行。另一种方法是使用DrawText:

var
  r: TRect
  s: string
begin
  s := StringReplace('a#b','#',#13#10,[rfReplaceAll]);
  r.Left := 10;
  r.Top := 10;
  DrawText(Canvas.Handle, PWideChar(s), Length(s), r, DT_NOPREFIX or DT_WORDBREAK);
end;

如果您使用的是Delphi 7,那么您可能希望用PChar替换PWideChar。