Новая строка внутри строки будет отображаться в TMemoBox

Я создаю String под названием FullMemo, который будет отображаться в TMemoBox, но проблема в том, что я пытаюсь сделать такие символы новой строки:

FullMemo := txtFistMemo.Text + '\n' + txtDetails.Text

Я получил содержимое txtFirstMemo символа \n, а не новую строку, и содержимое txtDetails. Что мне делать, чтобы новая строка работала?


person Nathan Campos    schedule 22.12.2010    source источник
comment
дублируется ... stackoverflow.com/questions/254407/   -  person PA.    schedule 22.12.2010
comment
Если он дублируется, то почему ответы совершенно разные?   -  person Nathan Campos    schedule 26.12.2010


Ответы (5)


Решение состоит в том, чтобы использовать # 13 # 10 или лучше, как предложил Сертак sLineBreak.

FullMemo := txtFistMemo.Text + #13#10 + txtDetails.Text;
FullMemo := txtFistMemo.Text + sLineBreak + txtDetails.Text;
person Community    schedule 22.12.2010
comment
Также можно использовать sLineBreak. - person Sertac Akyuz; 22.12.2010
comment
использование sLineBreak - лучший подход !! - person ; 22.12.2010
comment
@Sertac Akyuz - +1 отличный совет, я не заметил ничего подобного - person ; 22.12.2010

Решение, более независимое от платформы, было бы TStringList.

var
  Strings: TStrings;
begin
  Strings := TStringList.Create;
  try
    Strings.Assign(txtFirstMemo.Lines); // Assuming you use a TMemo
    Strings.AddStrings(txtDetails.Lines);
    FullMemo := Strings.Text;
  finally
    Strings.Free;
  end;
end;

Чтобы добавить пустую новую строку, вы можете использовать:

Strings.Add('');
person Jens Mühlenhoff    schedule 22.12.2010

Использовать

FullMemo := txtFistMemo.Text + #13#10 + txtDetails.Text
person Bharat    schedule 22.12.2010

Вы можете объявить что-то вроде этого:

const 
 CRLF = #13#10; //or name it 'Enter' if you want
 LBRK = CRLF+ CRLF;

в общем блоке и используйте его во всех своих программах. Будет действительно кстати. Теперь, спустя 20 лет, я использую CRLF в тысячах мест!

FullMemo := txtFistMemo.Text + CRLF + txtDetails.Text

ВАЖНО
В Windows правильный формат для ввода - это CRLF, а не просто CR или просто LF, как предлагают другие. Например, Delphi IDe (приложение для Windows) будет действительно сердиться на вас, если ваши файлы не имеют правильных входов (CRLF): Delphi XE - все синие точки сдвинуты на одну строку вверх

person Z80    schedule 02.01.2011

Вы не делаете такие символы новой строки, вы используете символ # 13:

FullMemo := txtFistMemo.Text + #13 + txtDetails.Text
    + Chr(13) + 'some more text'#13.

# 13 - CR, # 10 - LF, иногда достаточно использовать только CR, иногда (например, при написании текстовых файлов) использовать # 13 # 10.

person himself    schedule 22.12.2010
comment
Разрыв строки в Windows всегда # 13 # 10 (или лучше sLineBreak, как предлагает Сертак). - person Jens Mühlenhoff; 22.12.2010
comment
Это не всегда # 13 # 10. Нет правила, согласно которому вы не можете разобрать # 13 на разрыв строки даже в Windows. Например, MessageBox прекрасно это принимает. - person himself; 22.12.2010
comment
@himself - просто работает не равнозначно правильно. Если редактор Delphi задирает вас такими половинками, то во время отладки он будет на вас сильно злиться. - person Z80; 19.02.2021