如何在Delphi中的字符串中包含换行符?

Bre*_*dan 94 delphi newline

我想创建一个跨越多行的字符串,以分配给Label Caption属性.这是如何在Delphi中完成的?

Jim*_*eth 165

在System.pas(自动使用)中定义了以下内容:

const
  sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF} 
               {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};
Run Code Online (Sandbox Code Playgroud)

这是来自Delphi 2009(注意使用AnsiChar和AnsiString).(我添加了换行.)

因此,如果要进行TLabel换行,请确保将AutoSize设置为true,然后使用以下代码:

label1.Caption := 'Line one'+sLineBreak+'Line two';
Run Code Online (Sandbox Code Playgroud)

自从引入sLineBreak以来,所有版本的Delphi都可以使用,我相信它是Delphi 6.

  • 感谢那!我一直用#13#10. (12认同)
  • 哇,这比我期望的要好得多! (2认同)

Zar*_*tog 32

这是一个更短的方法:

my_string := 'Hello,'#13#10' world!';
Run Code Online (Sandbox Code Playgroud)


Bre*_*dan 14

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

#13#10 是十进制的CR/LF字符


ska*_*adt 8

或者您也可以使用^ M + ^ J快捷方式.所有的偏好问题."CTRL-CHAR"代码由编译器翻译.

MyString := 'Hello,' + ^M + ^J + 'world!';
Run Code Online (Sandbox Code Playgroud)

你可以在^ M和^ J之间取+,但是你会得到编译器的警告(但它仍然可以正常编译).


Fra*_*ois 7

另一方面,一个有用的技巧:
如果在TStrings中保存多个字符串,则只需使用TStrings的Text属性,如下例所示.

Label1.Caption := Memo1.Lines.Text;
Run Code Online (Sandbox Code Playgroud)

你会得到你的多线标签......


Jes*_*nck 6

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;
Run Code Online (Sandbox Code Playgroud)


小智 5

与平台无关的方式是“sLineBreak”: http://www.freepascal.org/docs-html/rtl/system/slinebreak.html

Write('你好' + sLineBreak + '世界!');