Итак, добавьте на форму пока только одну кнопку. Измените ее свойство caption на очистить и имя на ciearButton. Кстати, давайте изменим имя компонента Memo1 на MainMemo.Создайте для кнопки обработчик событияonclick. В нем напишите следующее:
В этом программном коде вызывается метод clear объекта Lines, который в свою очередь принадлежит объекту MainMemo. Немного запутано, но со временем вы поймете, что это очень даже удобно. У компонента MainMemo есть свойство Lines, значит, чтобы получить к нему доступ, мы должны написать MainMemo.Lines. Свойство Lines — это целый объект, и у него есть метод Clear, который очищает содержимое строк редактора.
Попробуйте запустить программу и написать внутри компонента Memo какой- нибудь текст. Потом нажмите кнопку Очистить, чтобы уничтожить все, что вы ввели.
Теперь давайте усложним наш пример, добавив возможность сохранения введенного текста и загрузки его обратно.
Создайте обработчик события Onshow (срабатывает, когда отображается окно) для формы и напишите в нем следующее:
Здесь вызывается метод LoadFromFile объекта Lines. Ему нужно передать только один параметр — имя файла, откуда будет происходить загрузка данных. Есть только один недостаток — если вы сейчас попытаетесь запустить программу, то во время загрузки произойдет ошибка, потому что файла memo.txt нет. Тут есть два выхода:
- заранее создать файл;
- при старте программы проверять, есть ли файл, и только если он существует, производить загрузку текста.
С первым способом все понятно. А вот для реализации второго способа можно воспользоваться функцией FileExists. Ей нужно передать имя файла, существование которого надо проверить, и если такой файл существует, функция вернет true. Давайте изменим обработчик события Onshow следующим образом:
Теперь создадим обработчик события OnClose (срабатывает на закрытие окна).
В нем напишем процедуру сохранения содержимого MainMemo.
Здесь используется метод SaveToFile, который работает так же, как и LoadFromFile, только сохраняет данные.
Теперь осталось только научиться программно добавлять, удалять и изменять строки в компоненте Tmemo, и можно считать, что мы досконально изучили этот компонент.
В этом компоненте текст хранится как простая последовательность строк — массив. Используя предыдущий пример, наберите текст и после закрытия программы посмотрите, как он выглядит в файле. Вот содержимое моего примера memo.txt:
DelphiComponent.ru
Как видите, в файле четыре строки (вторая пустая). Точно так же строки расположены и в файле.
Для доступа к каждой строке можно воспользоваться свойством strings свойства Lines. На рис. 7.6 наглядно показано, как получить доступ к строкам. Чтобы получить нулевую строку, нужно написать MainMemo.Lines.strings[0], для первой строки — MainMemo. Lines . Strings [ 1 ] И Т. Д.
Давайте напишем пример, который будет получать доступ к строкам, чтобы увидеть все это на практике. Добавьте к предыдущему примеру три кнопки.
- Добавить. Дадим этой кнопке ИМЯ-- AddButton.
- Удалить. Дадим этой кнопке ИМЯ — DelButton.
- Изменить. Дадим этой кнопке ИМЯ — ChangeButton.
Давайте изменим обработчик события Onshow следующим образом:
Теперь создадим обработчик события OnClose (срабатывает на закрытие окна). В нем напишем процедуру сохранения содержимого MainMemo.
Здесь используется метод SaveToFile, который работает так же, как и LoadFromFile, только сохраняет данные.
Можете расположить их, как показано на рис. 7.7. Теперь создадим обработчик события onclick для кнопки Добавить. Здесь мы будем программно добавлять новую строку В MainMemo.Для ЭТОГО У объекта Lines есть метод Add,у которого только один параметр — текст новой строки:
Теперь создадим обработчик событияonclickдля кнопки Удалить. По этому событию мы должны удалить строку, в которой находится сейчас курсор. Для этого напишите в обработчике следующий текст:
В первой строке кода проверяется, сколько строк в компоненте MainMemo. Для этого есть свойство Lines, count. Если оно не равно нулю (MainMemo.Lines .count<>o), значит, строки есть, и мы можем удалить текущую строку.
Для удаления используется метод Delete объекта Lines. В качестве единственного параметра нужно передать номер строки для удаления. Но как узнать, какая строка сейчас является текущей? Для этого у MainMemo есть свойство CaretPos, которое указывает на текущую позицию курсора.
CaretPos— это переменная типаTPoint.Этот тип определяется как запись. С таким типом мы подробно познакомимся немного позже. Единственное, что сейчас необходимо знать, так это то, что данный тип похож на объект, только у него нет методов, а только свойства. У TPoint есть два свойства х и y:
х указывает на текущую колонку,
a y— на текущую строку.
Таким образом можно узнать текущую строку С ПОМОЩЬЮ MainMemo.CaretPos.y.
Итак,MainMemo.Lines.Delete удаляет указанную строку. Указание текущей строки происходит С ПОМОЩЬЮ MainMemo.CaretPos.Y.
Теперь осталось только написать обработчик события onclick для кнопки Изменить. В нем напишите следующий код:
В первой строке мы изменяем текущую строку на "Horrific". Второй строкой кода я изменяю первую строку мапмето на "Текст изменен".
Здесь вам уже все должно быть знакомым. Так что теперь можно считать, что мы изучили основные возможности компонента TMemo.