web-dev-qa-db-ja.com

Delphiの文字列に改行文字を含めるにはどうすればよいですか?

複数行にまたがる文字列を作成して、Label Captionプロパティに割り当てたい。これはDelphiでどのように行われますか?

89
Brendan

System.pas(自動的に使用されます)では、次のものが定義されています。

const
  sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF} 
               {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};

これはDelphi 2009からのものです(AnsiCharとAnsiStringの使用に注意してください)。 (行ラップは私によって追加されました。)

TLabelをラップする場合は、AutoSizeがtrueに設定されていることを確認してから、次のコードを使用します。

label1.Caption := 'Line one'+sLineBreak+'Line two';

SLineBreakが導入されて以来、Delphiのすべてのバージョンで動作します。

164
Jim McKeeth

さらに短いアプローチがあります:

my_string := 'Hello,'#13#10' world!';
32
Zartog

my_string := 'Hello,' + #13#10 + 'world!';

#13#10は10進数のCR/LF文字です

14
Brendan

または、^ M + ^ Jショートカットも使用できます。すべての好みの問題。 「CTRL-CHAR」コードはコンパイラーによって変換されます。

MyString := 'Hello,' + ^M + ^J + 'world!';

^ Mと^ Jの間で+を削除できますが、コンパイラーから警告が表示されます(ただし、コンパイルは正常に行われます)。

8
skamradt

一方で、役に立つトリック:
TStringsに複数の文字列を保持する場合、次の例のようにTStringsのTextプロパティを使用するだけです。

Label1.Caption := Memo1.Lines.Text;

そして、複数行のラベルを取得します...

7
François
var
  stlst: TStringList;
begin
  Label1.Caption := 'Hello,'+sLineBreak+'world!';

  Label2.Caption := 'Hello,'#13#10'world!';

  Label3.Caption := 'Hello,' + chr(13) + chr(10) + 'world!';

  stlst := TStringList.Create;
  stlst.Add('Hello,');
  stlst.Add('world!');
  Label4.Caption := stlst.Text;

  Label5.WordWrap := True; //Multi-line Caption
  Label5.Caption := 'Hello,'^M^J'world!';

  Label6.Caption := AdjustLineBreaks('Hello,'#10'world!');
  {http://delphi.about.com/library/rtl/blrtlAdjustLineBreaks.htm}
end;
3
Jessé Catrinck

プラットフォームに依存しない方法は「sLineBreak」です: http://www.freepascal.org/docs-html/rtl/system/slinebreak.html

Write( 'Hello' + sLineBreak + 'World!');

2
Wendigo

Delphiのコピーは手元にありませんが、wordwrapプロパティをtrueに設定し、autosizeプロパティをfalseに設定すると、ラベルを作成するサイズでテキストをラップするはずです。特定の場所で改行したい場合は、上記の設定を設定してテキストエディタから貼り付ければ動作する可能性があります

お役に立てれば。

0
Toby Allen
ShowMessage('Hello'+Chr(10)+'World');
0
SwallowIt