Многострочный редактор и строки
Для работы с многострочным текстом используется компонент Memo, или многострочный редактор. Свойство WordWrap отвечает за автоматический перенос не умещающихся по ширине окна строк текста. А свойство Alignment отвечает за выравнивание текста по левому (taLeftJustify) или правому (taRightJustify) краям, или по центру (taCenter).
Для работы с множеством строк могут понадобиться полосы прокрутки. За их наличие и расположение отвечает свойство ScrollBars, которое может принимать одно за 4 значений: ssNone – без полос прокрутки (это значение принято по умолчанию), ssHorizontal – полоса для горизонтальной прокрутки, ssVertical – полоса для вертикальной прокрутки и ssBoth – с обеими полосами прокрутки.
Рассмотрим свойства, относящиеся собственно к текстовому содержимому многострочного редактора. Разумеется, у него есть свойство Text, через которое можно получить доступ к всему содержимому сразу. Но если вы поместите элемент Memo на форму и посмотрите на инспектор объекта, то не найдете в нем этого свойства. Дело в том, что оно не является опубликованным для класса TMemo, и доступно лишь программно. Зато у многострочного редактора имеется другое, более подходящее свойство – Lines, являющееся опубликованным.
Если в инспекторе объекта щелкнуть по кнопке с многоточием напротив этого свойства, то откроется окно редактирования, в котором можно ввести начальный текст.
В качестве типа данных для свойства Lines используется не строка, а специальный объект TStrings, являющийся классом, инкапсулирующем работу со строками, или, если быть точнее – со списками строк. С его помощью можно манипулировать содержимым многострочного редактора, рассматривая его как отдельные строки. Свойства класса TStrings приведены в таблице.
| Свойство | Тип данных | Описание | |
| CommaText | String | Представляет весь список одной строкой, разделенной запятыми. При этом строки с пробелами заключаются в двойные кавычки | |
| Count | Integer | Указывает на количество строк в списке | |
| DelimitedText | String | Представляет весь список одной строкой в соответствии со значениями свойств Delimeter и QuoteChar | |
| Delimiter | Char | Определяет разделитель для свойства DelimitedText | |
| Names | [Index: Integer]: string | Представляет собой массив имен для строк формата имя-значение | |
| NameValueSeparator | Char | Определяет символ, по которому будут разделены имя и значение | |
| Objects | [Index: Integer]: TObject | Представляет собой массив объектов, ассоциированных со строками | |
| QuoteChar | Char | Определяет символ кавычек для свойства DelimitedText | |
| Strings | [Index: Integer]: string | Представляет список в качестве массива строк | |
| Text | String | Список строк одной строкой, включая символы «возврат каретки» и «новая строка» | |
| ValueFromIndex | [Index: Integer]: string | Представляет собой массив значений для строк формата имя-значение | |
| Values | [const Name: string]: string | Позволяет получить значение по его имени для строк формата имя-значение | 
Что касается свойств, предназначенных для работы со списком как с единой строкой текста, то это, прежде всего, свойство Text, представляющее все содержимое списка в качестве одной строки. При этом в тех местах, где заканчиваются реальные строки списка, добавляются символы новой строки и возврата каретки (#10 и #13). Применительно к компоненту Memo, его собственное свойство Text содержит точно те же данные, что и Lines.Text.
Что касается методов класса TStrings, то среди них можно выделить Add, AddObject, AddStrings, Append, Assign, Clear, Delete, IndexOf, Insert, LoadFromFile и SaveToFile. Пожалуй, самыми интересными являются последние 2 метода, позволяющие без каких-либо дополнительных действий загрузить из файла или сохранить в файл сразу все содержимое текстового редактора.
| Метод | Параметры | Описание | 
| Add | const S: string | Добавляет новую строку к списку | 
| AddObject | const S: string; AObject: TObject | Добавляет строку к списку и ассоциирует с ней объект | 
| AddStrings | Strings: TStrings | Добавляет группу строк к списку | 
| Append | const S: string | Добавляет строку к списку, но в отличие от Add не возвращает результат операции | 
| Assign | Source: TPersistent | Присваивает строки, и, по возможности, объекты, из другого списка к данному | 
| Clear | - | Удаляет все строки списка | 
| CustomSort | Compare: TStringListSortCompare | Сортирует строки в списке используя правила, определенные в указанной функции | 
| Delete | Index: Integer | Удаляет из списка строку с указанным индексом | 
| Equals | Strings: TStrings | Сравнивает 2 списка и возвращает результат сравнения | 
| Exchange | Index1, Index2: Integer | Меняет между собой расположение 2 строк в списке | 
| Find | const S: string; var Index: Integer | Находит строку в отсортированном списке и возвращает ее индекс | 
| IndexOf | const S: string | Аналогично Find, но подходит и для несортированных списков | 
| IndexOfName | const Name: string | Возвращает индекс первого найденного совпадения имени для списков типа имя-значение | 
| IndexOfObject | AObject: TObject | Возвращает индекс первой строки, ассоциированной с указанным объектом | 
| Insert | Index: Integer; const S: string | Вставляет строку в указанную позицию списка | 
| InsertObject | Index: Integer; const S: string | Вставляет строку и объект в указанную позицию | 
| LoadFromFile | const FileName: string | Заполняет список строками текста из указанного текстового файла | 
| Move | CurIndex, NewIndex: Integer | Перемещает строку в списке | 
| SaveToFile | const FileName: string | Сохраняет строки списка в указанный файл | 
| Sort | - | Производит сортировку строк списка |