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

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


person Brendan    schedule 31.10.2008    source источник


Ответы (10)


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

person Jim McKeeth    schedule 31.10.2008

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

my_string := 'Hello,'#13#10' world!';
person Zartog    schedule 31.10.2008

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

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

person Brendan    schedule 31.10.2008

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

Label1.Caption := Memo1.Lines.Text;

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

person Francesca    schedule 31.10.2008

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

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

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

person skamradt    schedule 31.10.2008

Независимым от платформы способом будет 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html.

Написать ('Hello' + sLineBreak + 'World!');

person Wendigo    schedule 30.11.2015

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

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

person Toby Allen    schedule 01.11.2008

У вас есть const sLineBreak в System.pas unit, который уже выполняет обработку в соответствии с ОС, над которой вы работаете.

Пример использования:

TForm1.btnInfoClick(Sender: TObject);
begin
   ShowMessage ('My name is Jhon' + sLineBreak
      'Profession: Hollywood actor');
end;
person Samuel Cruz    schedule 08.04.2021

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

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

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

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

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

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

Дэйв

person Dave Sonsalla    schedule 02.08.2017
comment
Принятый ответ прямо по делу, как и вопрос. Этот ответ, напротив, добавляет больше, чем просили; еще хуже: не так ясно. - person ranieribt; 02.08.2017

person    schedule
comment
Отформатируйте свой код и добавьте описание того, как это решает проблему. - person Blastfurnace; 16.10.2017