Многострочный редактор и строки

Для работы с многострочным текстом используется компонент 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 - Производит сортировку строк списка