我想全部替換「#」替換爲新線畫出:Delphi7的Canvas.TextOut不能寫入新線
Canvas.TextOut(0,0,''+StringReplace('a#b','#',#13#10,[rfReplaceAll]));
,但沒有。
的TextOut打印 「A·B」 之類的將被替換部分甚至不存在(但它確實存在ofcourse):ab
取而代之的是:
a
b
#13#10
是新線(Windows)中右?
那爲什麼這不起作用?
謝謝。
我想全部替換「#」替換爲新線畫出:Delphi7的Canvas.TextOut不能寫入新線
Canvas.TextOut(0,0,''+StringReplace('a#b','#',#13#10,[rfReplaceAll]));
,但沒有。
的TextOut打印 「A·B」 之類的將被替換部分甚至不存在(但它確實存在ofcourse):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
);
你很可能要在最後一個參數使用不同的標誌,但我敢肯定,你可以閱讀documentation,並制定你需要什麼。
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。
由於'DrawText'在非Unicode Delphi中映射到'DrawTextA',並且在Delphi的Unicode版本中映射到'DrawTextW',所以您可以使用'PChar'而不是'PWideChar'。 'PChar'是Unicode版本中的'PWideChar'和非Unicode中的'PAnsiChar'。 – TLama 2012-04-23 09:08:30
據我所知,'TextOut'不能處理多行。嘗試在'DT_WORDBREAK'中使用'DrawText'或'DrawTextEx'。看看這裏:http://stackoverflow.com/questions/1648277/delphi-textrect-wordwrap – 2012-04-23 08:51:57
另一個這裏:http://stackoverflow.com/questions/7719025/delphi-drawing-text-to-canvas-word-wrap -and-measuring-size – pritaeas 2012-04-23 08:54:12