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

108
我想创建一个跨多行的字符串,以将其分配给标签标题属性。在Delphi中应该如何实现?
12个回答

193
在自动使用的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中使用,我相信这是从Delphi 6开始的。


42

以下是更简洁的方法:

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

1
更短,但不具可移植性! - SAMPro

22

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

#13#10是十进制下的回车换行符。


12

或者您也可以使用^M+^J快捷键。这只是个人喜好。"CTRL-CHAR"代码由编译器翻译。

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

你可以在^M和^J之间去掉加号,但是编译器会发出警告(但它仍然可以编译成功)。


8

另外,一个有用的小技巧:
如果您将多个字符串保存在TStrings中,您只需要使用TStrings的Text属性,就像以下示例一样。

Label1.Caption := Memo1.Lines.Text;

您将获得多行标签...


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;

5

2
你可以在 System.pas unit 中使用 const sLineBreak ,它已经根据你所使用的操作系统进行了处理。
使用示例:
TForm1.btnInfoClick(Sender: TObject);
begin
   ShowMessage ('My name is Jhon' + sLineBreak
      'Profession: Hollywood actor');
end;

1
ShowMessage('Hello'+Chr(10)+'World');

0

我手头没有 Delphi 的副本,但我相当确定如果您将 wordwrap 属性设置为 true,将 autosize 属性设置为 false,则应在您制作标签的大小处包装任何文本。如果您想在特定位置换行,则如果您设置上述设置并从文本编辑器粘贴,则可能会起作用

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接