PostHeaderIconУрок12. Компонент TMemo


Он находится на палитре компонентов Standart. Как мы уже успели понять, он представляет собой поле для отображения и редактирования неформатированного текста. Текст можно загрузить из файла, набрать на клавиатуре, вставить из буфера обмена. Т.е. он имеет многие доступные свойства для редактирования текста, что способствует его применению в простейших текстовых редакторах для просмотра (редактирования) текста, наподобие того примера, который мы с вами периодически дописываем вот уже несколько уроков.

В этом компоненте текст всегда имеет одинаковый шрифт, задающийся через свойство Font.

Программно для компонента Memo1, расположенного на форме это делается следующим образом. Допустим, на форме расположено три компонента: поле редактирования текста Memo1 (страница Standart), диалог выбора шрифта FontDialog1 (страница Dialogs) и кнопка Button1 (страница Standart). Реакция на событие нажатия на кнопку Button1


procedure TForm1.Button1Click(Sender: TObject);
begin
if FontDialog1.Execute then // если пользователь выбрал шрифт
Memo1.Font:=FontDialog1.Font; // установить выбранный шрифт
end;

Если необходимо, чтобы в диалоге выбора шрифта изначально был выбран текущий шрифт, установленный компоненте Memo1, то перед вызовом диалога Execite устанавливаем в диалоге нужный шрифт.


procedure TForm1.Button1Click(Sender: TObject);
begin
FontDialog1.Font:=Memo1.Font; // установить шрифт в диалоге
if FontDialog1.Execute then
Memo1.Font:=FontDialog1.Font;
end;

Можно изменять шрифт для компонента TMemo (и не только для него) программно. Для этого в свойстве Font устанавливаются необходимые свойства во время работы приложения.

Memo1.Font.Name:='Arial'; // установка имени шрифта
Memo1.Font.Size:=14; // установка размера шрифта
Memo1.Font.Color:=clRed; // цвет шрифта

{ для того, чтобы увидеть полный список доступных стандартных цветов воспользуйтесь справочной системой, например, подведя курсор под clRed и нажав на Ctrl+F1 }

Memo1.Font.Style:=[fsBold]; // установить жирный стиль


Style представляет собой массив свойств стиля шрифта. Необходимо в квадратных скобках указывать через запятую необходимые стили. Пустые кавычки будут означать установку шрифта без стиля. Список доступный свойств стиля шрифта:

fsBold - жирный;
fsItalic - наклонный;
fsUnderline - подчеркнутый;
fsStrikeout - перечеркнутый.

Свойство WordWrap устанавливает, может или нет текст автопереносится на следующую строчку, если он достиг левого края компонента. Автоперенос работает и когда пользователь во время работы приложения изменяет размеры компонента.

Текст в компоноDте доступен через свойство Lines. Он содержит массив строк, находящихся в компоненте. Можно получить доступ как к отдельной строке, так и к всему тексту. Это свойство можно редактировать и во время работы приложения, и во время разработки в инспекторе объектов.

Загрузка строк из файла через процедуру

Memo1.Lines.LoadFromFile('c:\1.txt');

где "c:\1.txt" - загружаемый файл в компонент. Следует при этом помнить, что компонент TMemo ограничен в размерах текста.

Сохранение строк в файл.

Memo1.Lines.SaveToFile('c:\1.txt');

Количество строк в компоненте можно узнать через свойство Memo1.Lines.Count, а доступ к отдельной строчке через функцию Strings. Например:

ShowMessage(Memo1.Lines.Strings[0]); // Показывает в окошке первую строчку текста.

Strings - это массив строк, начинающихся с нулевого знака, заканчивающиеся Count-1. Об этом следует помнить при написании подобных процедур доступа, иначе произойдет выход за доступный предел массива, что вызовет ошибку в программе.

Можно для примера организовать цикл поочередного отображения строк из компонента Memo1. Для реакции на нажатия на кнопку Button1 это выглядит следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
Var i:Integer; // объявление целочисленной переменной
begin
if Memo1.Lines.Count<>0 then // проверка ненулевого количества строк
for i:=0 to Memo1.Lines.Count-1 do // задается цикл, равный кол-ву строк
ShowMessage(Memo1.Lines.Strings[i]); // вывод строк в сообщение
end;


Очистить Strings можно одной процедурой Memo1.Lines.Clear.

Добавить строчку:
Memo1.Lines.Add('добавленная строка');

Вставить строчку в заданное место:
Memo1.Lines.Insert(0,'вставленная строка');

Последний пример вставляет текстовую строку в первую строку (первая строка -1 = 0).

Удалить строчку:
Memo1.Lines.Delete(0); // удаляет первую строку

При применении процедуры удаления строк Delete помните, что сначала нужно проверять компонент TMemo на наличие таковых вообще. Проверка через функцию Count, которая возвращает их целочисленное значение.

Работа с выделенным текстом программно аналогична работе пользователя вручную. Если пользователь выберет процедуру вырезания выделенного текста в буфер или его удаление, то он пропадет. Выделение текста производится с помощью двух процедур.

Memo1.SelStart:=0; // установить начальное положение выделения
Memo1.SelLength:=15; // установить длину выделенного текста

Если необходимо всегда видит выделенный текст, даже при переходе управления на другой элемент управления, то установите свойство HideSelection в false.

Работа с выделенным фрагментом текста

Memo1.ClearSelection; // удалить выделенный текст
Memo1.CutToClipboard; // вырезать в буфер обмена
Memo1.CopyToClipboard; // скопировать в буфер обмена
Memo1.PasteFromClipboard; // вставить из буфера обмена
Memo1.SelText; // эта функция возвращает текстовую строку выделенного текста


Отмена последнего изменения - процедура Memo1.Undo.

Компонент TMemo является оконным визуальным компонентом, т.е. у него имеются свойства, характерные множеству компонентов, таких как Border, Color, Align, Enabled, Visible.


© www.nmarket.ru - при перепечатке прямая ссылка обязательна
 
Copyright © 2007-2010 IsIProg.ru. All Rights Reserved.