Многострочное поле ввода (TMemo) Delphi

Итак, добавьте на форму пока только одну кнопку. Измените ее свойство 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

Многострочное поле ввода (TMemo) DelphiКак видите, в файле четыре строки (вторая пустая). Точно так же строки распо­ложены и в файле.

 

Для доступа к каждой строке можно воспользоваться свойством 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:

х указывает на текущую колонку,

y— на текущую строку.

Таким образом можно узнать теку­щую строку С ПОМОЩЬЮ MainMemo.CaretPos.y.

Итак,MainMemo.Lines.Delete удаляет указанную строку. Указание текущей строки происходит С ПОМОЩЬЮ MainMemo.CaretPos.Y.

Теперь осталось только написать обработчик события onclick для кнопки Изменить. В нем напишите следующий код:

В первой строке мы изменяем текущую строку на "Horrific". Второй строкой ко­да я изменяю первую строку мапмето на "Текст изменен".

Здесь вам уже все должно быть знакомым. Так что теперь можно считать, что мы изучили основные возможности компонента TMemo.

dle

Помоги проекту! Расскажи друзьям об этом сайте: