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