Уроки по Delphi

       

Компонент 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 устанавливает, может или нет текст автопереносится на следующую строчку, если он достиг левого края компонента. Автоперенос работает и когда пользователь во время работы приложения изменяет размеры компонента.
Текст в компоненте доступен через свойство 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.
С уважением, ведущий уроков Semen semen@krovatka.net

Содержание раздела