0

すべての「#」を新しい線に置き換えて描画しようとしています:

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

しかし、何もありません。
TextOut は、置き換えられた部分が存在しないように "a#b" を出力します (ただし、もちろん存在します):ab
これの代わりに:

a
b

#13#10改行(Windows)は正しいですか?
では、なぜこれが機能しないのですか?

ありがとうございました。

4

2 に答える 2

7

DrawText複数行のテキストを生成するには、次を使用する必要があります。

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

最終パラメーターでさまざまなフラグを使用したい場合もありますが、ドキュメントを読んで必要なものを解決できると確信しています。

于 2012-04-23T08:55:07.997 に答える
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を使用している場合は、おそらくPWideCharをPCharに置き換えたいと思うでしょう。

于 2012-04-23T09:00:39.677 に答える