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

StackOverflow https://stackoverflow.com/questions/254407

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

my_string: = 'Здравствуйте,' + # 13 # 10 + 'world!';

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

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

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

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

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

Label1.Caption := Memo1.Lines.Text;

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

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;

Агностическим способом для платформы будет sLineBreak: http://www.freepascal.org/docs-html/rtl/system /slinebreak.html

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

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

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

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

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

Подпись = 'Строка 1'#13' Строка 2'#13' Строка 3'

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

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

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

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

Дэйв

 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top