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