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

73

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

Теги:
newline

12 ответов

133
Лучший ответ

В 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.

  • 11
    Спасибо за это! Я всегда использовал № 13 # 10.
  • 1
    Вау, это намного лучше, чем я надеялся!
29

Здесь еще более короткий подход:

my_string := 'Hello,'#13#10' world!';
  • 8
    не кроссплатформенный :)
12

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

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

  • 0
    И это все еще работает на 2009 год (Unicode).
8

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

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

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

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;
2

Агнетический путь plattform был бы 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html

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

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

François:

Ваш метод Label1.Caption := Memo1.Lines.Text; не является хорошим!

Примеры многострочных текстов:

''          // Empty one, no line at all
#13#10      // One empty line 
'One'       // One non empty line
'One'#13#10 // Two lines, first not empty, last empty
#13#10'One' // Two lines, first empty, last not empty
etc

Присвоение каждой строки Lines.Text приводит к тому, что вещи не ожидаются...

Другими словами:

MyLabel.Caption:='One Line'; // One single line with no line break on it, with just 8 chars
Memo1.Lines.Text:=MyLabel.Caption;
ShowMessage(IntToStr(Length(MyLabel.Caption)+' - '+IntToStr(Length(Memo1.Lines.Text)));

Покажет (в Windows): 8 - 10

Примечание. По крайней мере, на моем Turbo Delphi 2006.

Это вызвано тем, что реализация .Text добавляет новый разрыв строки (два символа в окнах) после каждой строки, поэтому всегда заканчивается новой строкой.

Это также происходит:

MyLabel.Caption:=''; // Empty string, length=0
Memo1.Lines.Text:=MyLabel.Caption;
ShowMessage(IntToStr(Length(MyLabel.Caption)+' - '+IntToStr(Length(Memo1.Lines.Text)));

Покажет (в Windows): 0 - 2

Так что ему нужно "небольшое" исправление... удалить эту последнюю строку прерывания, которая добавлена, но это может быть очень сложно...

Я объясню это:

Если вы это сделаете:

MyLabel.Caption:='Non Empty Line'+#13#10; // #13#10 is Windows break line (16 chars in total)
Memo1.Lines.Text:=MyLabel.Caption;
ShowMessage(IntToStr(Length(MyLabel.Caption)+' - '+IntToStr(Length(Memo1.Lines.Text)));

Покажет (в Windows): 16 - 16

Он не добавил ни одного разрыва строки, так как последняя строка была пуста, когда была указана на .Text

Проблема действительно внутри .Text, нет простой работы, потому что вы должны знать, была ли последняя строка пуста.

Надеюсь, что когда-нибудь это будет исправлено!!! До тех пор... я буду использовать другой способ работы с многострочными строками.

0

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

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

-3
 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;
  • 0
    Пожалуйста, отформатируйте ваш код и добавьте описание того, как это решает проблему.
-3

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

Caption = 'Line 1' # 13'Line 2 '# 13'Line 3'

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

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

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

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

Dave

  • 0
    Принятый ответ прямо к сути, как и вопрос. Этот ответ, напротив, добавляет больше, чем просили; еще хуже: не очень ясно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню