Как мне включить символ новой строки в строку в Delphi?

97

Я хочу создать строку, охватывающую несколько строк, для назначения свойству Label Caption. Как это делается в Delphi?

Брендан
источник

Ответы:

174

В 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';

Работает во всех версиях Delphi с момента появления sLineBreak, который, как мне кажется, был Delphi 6.

Джим МакКит
источник
33

Вот еще более короткий подход:

my_string := 'Hello,'#13#10' world!';
Зартог
источник
15

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

#13#10 это символы CR / LF в десятичном формате

Брендан
источник
8

Или вы также можете использовать ярлык ^ M + ^ J. Все дело в предпочтениях. коды "CTRL-CHAR" транслируются компилятором.

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

Вы можете убрать + между ^ M и ^ J, но тогда вы получите предупреждение от компилятора (но он все равно будет компилироваться нормально).

Skamradt
источник
7

С другой стороны, полезный трюк:
если вы храните несколько строк в TStrings, вам просто нужно использовать свойство Text TStrings, как в следующем примере.

Label1.Caption := Memo1.Lines.Text;

И вы получите многострочную этикетку ...

Франческа
источник
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;
Джессе Кэтринк
источник
0
ShowMessage('Hello'+Chr(10)+'World');
голубоватый
источник
0

У меня нет под рукой копии Delphi, но я вполне уверен, что если вы установите для свойства wordwrap значение true, а для свойства autosize - false, он должен обернуть любой текст, который вы поместите, в размер, который вы делаете для метки. Если вы хотите разбить строку в определенном месте, это может сработать, если вы установите указанные выше параметры и вставите их из текстового редактора .

Надеюсь это поможет.

Тоби Аллен
источник
-2

Иногда я не хочу загромождать свое пространство кода, особенно для статической метки. Чтобы просто определить его в форме, введите текст метки в форме, затем щелкните правой кнопкой мыши в любом месте той же формы. Выберите «Просмотреть как текст». Теперь вы увидите все объекты как задуманные, но только как текст. Прокрутите вниз или найдите свой текст. Когда вы найдете его, отредактируйте заголовок, чтобы он выглядел примерно так:

Заголовок = 'Строка 1' # 13'Строка 2 '# 13'Строка 3'

# 13 означает порядковый номер 13 или ascii для возврата каретки. Chr (13) - та же идея, CHR () меняет число на порядковый номер.

Обратите внимание, что в этом конкретном аспекте Delphi нет точки с запятой, и вместо «: =» используется «=». Текст каждой строки заключен в одинарные кавычки.

Когда вы закончите, щелкните правой кнопкой мыши еще раз и выберите «Просмотреть как форму». Теперь вы можете выполнять любое форматирование, такое как полужирный шрифт, выравнивание по правому краю и т. Д. Вы просто не можете повторно редактировать текст в форме, иначе вы потеряете разрывы строк.

Я также использую «Просмотр в виде текста» для множественных изменений, где я просто хочу пролистать и заменить и т. Д. Быстро.

Дэйв

Дэйв Сонсалла
источник
Принятый ответ прямо по делу, как и вопрос. Этот ответ, напротив, добавляет больше, чем просили; еще хуже: не так ясно.
ranieribt 02
-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;
boodyman28
источник
Отформатируйте свой код и добавьте описание того, как это решает проблему.
Blastfurnace