我正在尝试用要绘制的新行替换所有“#”:
Canvas.TextOut(0,0,''+StringReplace('a#b','#',#13#10,[rfReplaceAll]));
但什么都没有。
TextOut 打印“a#b”,就像被替换的部分甚至不存在(但它确实存在):ab
而不是这个:
a
b
#13#10
新行(Windows)对吗?
那为什么这不起作用?
谢谢你。
您需要使用DrawText
来生成多行文本:
var
R: TRect;
....
R := Rect(0, 0, Width, Height);
DrawText(
Canvas.Handle,
PChar(StringReplace('a#b','#',#13#10,[rfReplaceAll])),
-1,
R,
0
);
您可能很想在最终参数中使用不同的标志,但我相信您可以阅读文档并找出您需要的内容。
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,那么您可能希望将 PWideChar 替换为 PChar。