Delphi7 Canvas.TextOut无法写入新行
我试图用新的线条来代替所有的线条:Delphi7 Canvas.TextOut无法写入新行,delphi,delphi-7,newline,Delphi,Delphi 7,Newline,我试图用新的线条来代替所有的线条: Canvas.TextOut(0,0,''+StringReplace('a#b','#',#13#10,[rfReplaceAll])); 但什么都没有。 TextOut打印ab,就像被替换的部件甚至不存在一样,但它确实存在:ab 与此相反: a b 1310新线对吗? 那为什么这不起作用呢 谢谢。您需要使用DrawText生成多行文本: var R: TRect; .... R := Rect(0, 0, Width, Height); DrawT
Canvas.TextOut(0,0,''+StringReplace('a#b','#',#13#10,[rfReplaceAll]));
但什么都没有。
TextOut打印ab,就像被替换的部件甚至不存在一样,但它确实存在:ab
与此相反:
a
b
1310新线对吗?
那为什么这不起作用呢
谢谢。您需要使用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,那么您可能希望用PChar替换PWideChar。据我所知,TextOut无法处理多行。尝试将DrawText或DrawTextEx与DT_WORDBREAK一起使用。看这里:这里还有一个:您可以使用PChar而不是PWideChar,因为DrawText在非Unicode Delphi中映射到DrawTextA,在Delphi的Unicode版本中映射到DrawTextW。PChar在Unicode版本中是PWideChar,在非Unicode版本中是PAnsiChar。