103

我想创建一个跨越多行的字符串以分配给标签标题属性。这在 Delphi 中是如何完成的?

4

12 回答 12

184

在 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。

于 2008-10-31T21:21:14.430 回答
38

这是一个更短的方法:

my_string := 'Hello,'#13#10' world!';
于 2008-10-31T18:36:03.560 回答
20

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

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

于 2008-10-31T18:11:56.137 回答
8

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

Label1.Caption := Memo1.Lines.Text;

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

于 2008-10-31T19:32:15.257 回答
8

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

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

您可以将 ^M 和 ^J 之间的 + 去掉,但是编译器会发出警告(但它仍然可以正常编译)。

于 2008-10-31T20:18:23.230 回答
3
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;
于 2014-07-18T21:06:18.077 回答
3

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

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

于 2015-11-30T13:41:06.390 回答
0

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

希望这可以帮助。

于 2008-11-01T17:01:23.970 回答
0
ShowMessage('Hello'+Chr(10)+'World');
于 2009-04-09T14:52:21.440 回答
0

您已经根据您正在使用的操作系统进行了处理const sLineBreakSystem.pas unit

使用示例:

TForm1.btnInfoClick(Sender: TObject);
begin
   ShowMessage ('My name is Jhon' + sLineBreak
      'Profession: Hollywood actor');
end;
于 2021-04-08T20:33:47.677 回答
-2

有时我不想弄乱我的代码空间,尤其是对于静态标签。要在表单中定义它,请在表单上输入标签文本,然后右键单击同一表单上的任意位置。选择“以文本形式查看”。您现在将看到所有设计的对象,但仅作为文本。向下滚动或搜索您的文本。找到它后,编辑标题,使其看起来像:

Caption = '第 1 行'#13'第 2 行'#13'第 3 行'

#13 表示序数 13,或用于回车的 ascii。Chr(13) 是同样的想法,CHR() 将数字更改为序数类型。

请注意,在 Delphi 的这个特定方面没有分号,并且使用“=”而不是“:=”。每行的文本都用单引号括起来。

完成后,再次右键单击并选择“以表单形式查看”。您现在可以进行任何格式设置,例如粗体、右对齐等。您不能重新编辑表单上的文本,否则您将丢失换行符。

我还使用“以文本形式查看”进行多项更改,我只想滚动浏览并进行替换等。快速。

戴夫

于 2017-08-02T20:01:29.247 回答
-2
 private
   { Private declarations }
   {declare a variable like this}
   NewLine : string; // ok
  // in next event handler assign a value to that variable (NewLine)
  // like the code down
procedure TMainForm.FormCreate(Sender: TObject);
begin`enter code here`
  NewLine := #10;
 {Next Code To show NewLine In action}
  //ShowMessage('Hello to programming with Delphi' + NewLine + 'Print New Lin now !!!!');
end;
于 2017-10-15T18:32:20.563 回答