Delphi как передать переносы из Memo в Label?

Главная форма отображает текст из ini-файла. В него записаны настройки и текст из memo второй формы. Текст в оригинале был с кодом на переносы: Контора Рога и Копыта'+#13+'работает с 12:00 до 15:00 часов'+#13+'Личные приёмы с 13:00 до 14:00'
Вопрос, как это передать в Label?
В ini файле сохраняется построчно. В переменную тоже всё построчно принимается. Но на Label выводится лишь первая строка.


Дополнение. В статике всё отлично работает, когда в коде прописан текст label с '+#13'. Но дело в том, что решил прикрутить Memo для редактирования текста. Текст сохраняется в ini.
Т.е. при старте, FormCreate, В label идёт переменная прочитанная из ini. В самом ini есть переносы. Но не в Memo, ни в Label они уже не могут считаться из ini.
Как быть?

запись в ini F.WriteString('main_text', 'text', text1); переменная tex1 - string

Вид при вводе:

введите сюда описание изображения

Вид из ini-файла:

введите сюда описание изображения

результаты:

введите сюда описание изображения

введите сюда описание изображения


Ответы (3 шт):

Автор решения: MBo

Label умеет отображать многострочный текст:

label1.Caption := 'Контора Рога и Копыта'+#13+'работает с 12:00 до 15:00 часов'+#13+'Личные приёмы с 13:00 до 14:00';

введите сюда описание изображения

но дело не в Label, а в работе с ini-файлами.

ini-файлы не предназначены для хранения многострочных параметров. При чтении ReadString использует функцию Windows GetPrivateProfileString, `которая находит строку вида

key=value

извлекает из неё value, и ничего не делает с далее идущими строками.

Вы можете при записи многострочного параметра заменять перенос строки на спецсимвол или последовательность, а при чтении выполнять обратную замену (StringReplace)

Возможно, стоит посмотреть в сторону других средств хранения и передачи - например, в JSON5 есть {multiline: (в стандартном JSON тоже приходится line1\\nline2 делать)

→ Ссылка
Автор решения: Eugene X

Если стандартными методами Delphi то лучше всего вот так.

implementation

{$R *.dfm}

    uses System.IniFiles;

    procedure TForm1.LoadBtnClick(Sender: TObject);
    begin
        if not OpenDialog1.Execute(Handle) then Exit;
        memo1.Lines.Clear;
        var inif := TIniFile.Create(OpenDialog1.FileName);
        try
            var Count := inif.ReadInteger('Memo1_Lines', 'Count', 0);
            for var I := 0 to Count do begin
                memo1.Lines.Add(inif.ReadString('Memo1_Lines', IntToHex(I, 4), ''));
            end;
        finally
            FreeAndNil(inif);
        end;

    end;

    procedure TForm1.SaveBtnClick(Sender: TObject);
    begin
        if not SaveDialog1.Execute(Handle) then Exit;
        var inif := TIniFile.Create(SaveDialog1.FileName);
        try
            var lines := Pred(Memo1.Lines.Count);
            inif.WriteInteger('Memo1_Lines', 'Count', lines);
            for var I := 0 to lines do begin
                inif.WriteString('Memo1_Lines', IntToHex(I, 4), Memo1.Lines[I]);
            end;
        finally
            FreeAndNil(inif);
        end;
    end;

end.

На выходе получится вот такой вот файлчик

[Memo1_Lines]
Count=4
0000=Memo1
0001=Is the
0002=perfect
0003=Container for Lines
0004==)

Если нестандартными то просто читаешь файл пока не встретишь нужную секцию, после читаешь до следующей секции.

→ Ссылка
Автор решения: I_CaR

Решение подсказано #MBo (и прочитано на старом delphibasics-ru).

//читаем из ini 
text1:=F.ReadString('main_text', 'text', 'сюда получаем текст из ini, содержащий это \\, это и будет наш символ переноса строки');

//далее делаем реплейсмент:
text2:= StringReplace(text1, '\\', #13, [rfReplaceAll, rfIgnoreCase]);
Label1.Caption := text2;
→ Ссылка