Учебный пример разработки текстового редактора на основе компонента richedit в системе программирования Delphi

NovaInfo 39
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 7
CC BY-NC

Аннотация

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

Ключевые слова

ПРОЦЕСС ОБУЧЕНИЯ, ТЕКСТОВЫЙ РЕДАКТОР, ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ, РАЗРАБОТКА ПРОГРАММЫ, ФОРМАТИРОВАНИЕ ТЕКСТА

Текст научной работы

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

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

В процессе обучения программированию учащиеся знакомятся с основными конструкциями языков программирования, применяют их для решения разнообразных задач. Правильная методика и подходы при обучении этой важной дисциплине позволяют вырабатывать у учащихся такие качества и способности, как логическое и критическое мышление, внимательность, аккуратность, находчивость, изобретательность, конструктивное мышление, у учащегося раскрываются его творческие способности [4, 7, 8, 13].

Для подготовки специалиста, конкурентоспособного на современном рынке информационных услуг, чрезвычайно важно в процессе обучения программированию постепенно отказываться от традиционных задач в пользу более интересных, сложных, ориентированных на решение практически важных проблем [2-4, 7-11, 16, 19].

Ниже в статье мы рассмотрим учебный пример, показывающий работу в среде визуального программирования Delphi (учебный пример на разработку программы построения графика функции рассмотрен в [17]). Среда разработки Delphi в курсе программирования может быть успешно использована при написании игровых [4, 6, 16], обучающих и контролирующих программ [5, 12], реализации моделей физических и экономических процессов [18], разработки прикладных программ [5, 12, 14, 15]. Для первоначального ознакомления со средой разработки Delphi можно использовать, например, книги [1, 20].

Рассмотрим следующую задачу. Необходимо разработать текстовый редактор, поддерживающий возможности форматирования текста. Программа должна иметь следующие возможности:

  • ввод текста с заданным начертанием и форматированием (выравнивание, настройка размеров, стилей и цвета шрифта);
  • применение настроек форматирования к любому фрагменту текста;
  • сохранение текущих настроек форматирования как параметров по умолчанию при последующих запусках программы;
  • открытие ранее сохраненного документа;
  • сохранение подготовленного документа в файл.

Рассмотрим, какие компоненты и в каком количестве будут использованы в программе. Для удобства представим это в виде таблицы 1. Сразу отметим, что исходный код программы составляет порядка 400 строк и представлен с некоторыми пояснениями в виде архива в [21]. Окно готовой разработанной программы показано на рис. 1.

Таблица 1. Типы компонент и их назначение в программе

Тип компонента

Количество

Назначение в программе

TRichEdit

1

Рабочая область программы для ввода текста документа.

TComboBox

2

Хранят список доступных шрифтов и стандартные размеры шрифта.

TToolBar

1

Панель инструментов.

TSpeedButton

11

Кнопки панели инструментов.

TToolButton

1

Разделитель на панели инструментов.

TColorDialog

1

Диалог выбора цвета.

OpenDialog

1

Диалог открытия файла.

TSaveDialog

1

Диалог сохранения файла.

TMainMenu

1

Основное меню программы (содержит два пункта: "Файл", "Справка").

TPopupMenu

1

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

TStatusBar

1

Служит для отображения полного имени текущего файла с текстом документа.

Окно программы "Текстовый редактор"
Рисунок 1. Окно программы "Текстовый редактор"

Рассмотрим некоторые вопросы, связанные с реализацией программы.

Выясним сначала, какой компонент выбрать для рабочего поля программы. Очевидно, что компонент Memo для наших целей не подходит, т.к. в нем нет возможностей для форматирования отдельных фрагментов текста. Поэтому мы выберем компонент RichEdit. Он позволит работать как с отдельными абзацами, так и с выделенными фрагментами текста.

Чтобы работать с параметрами текста, набираемого в окне разрабатываемого редактора, в процессе разработки удобно ввести отдельную структуру (запись) следующего содержания:

Settings = Record    Align: TAlignment;    Font_Name: String[50];    Font_Size: Integer;    Font_Color: TColor;    Text_Attrib: String[3];End;

Для удобства работы со стилями текста ("жирный", "курсивный", "подчеркнутый") введем отдельную переменную:

Text_Attrib: String[3];

Смысл ее введения заключается в следующем: переменная будет содержать тройку нулей и единиц. При этом символы будут отвечать за активность (значение единица) или не активность стилей: первый символ за стиль "жирный", второй — за "курсивный", третий — за "подчеркнутый". Обработка стилей текста будет выполняться следующей процедурой:

Procedure Font_Style;Var Vrem,Code: Integer;Begin    Val(Text_Attrib,Vrem,Code);    Case Vrem Of        0: Form1.RichEdit1.SelAttributes.Style:=[];        1: Form1.RichEdit1.SelAttributes.Style:=[fsUnderLine];        10: Form1.RichEdit1.SelAttributes.Style:=[fsItalic];        11: Form1.RichEdit1.SelAttributes.Style:=[fsItalic,fsUnderLine];        100: Form1.RichEdit1.SelAttributes.Style:=[fsBold];        101: Form1.RichEdit1.SelAttributes.Style:=[fsBold,fsUnderLine];        110: Form1.RichEdit1.SelAttributes.Style:=[fsBold,fsItalic];        111: Form1.RichEdit1.SelAttributes.Style:=[fsBold,fsItalic,fsUnderLine];    End; {Case}End;

Далее учтем, что при наборе текста, перемещении по абзацам или выделении фрагмента текста должны отражаться его параметры в панели инструментов (должны быть нажаты или отжаты соответствующие кнопки, указан цвет текста, шрифт, его размер). За это будут отвечать следующие две процедуры.

Procedure SpeedButton_Settings;Begin    If Text_Attrib[1]='1' Then        Form1.SpeedButton4.Down:=True    Else        Form1.SpeedButton4.Down:=False;    If Text_Attrib[2]='1' Then        Form1.SpeedButton5.Down:=True    Else        Form1.SpeedButton5.Down:=False;    If Text_Attrib[3]='1' Then        Form1.SpeedButton6.Down:=True    Else        Form1.SpeedButton6.Down:=False;    If Form1.RichEdit1.Paragraph.Alignment=taLeftJustify Then        Form1.SpeedButton7.Down:=True    Else        Form1.SpeedButton7.Down:=False;    If Form1.RichEdit1.Paragraph.Alignment=taCenter Then        Form1.SpeedButton8.Down:=True    Else        Form1.SpeedButton8.Down:=False;    If Form1.RichEdit1.Paragraph.Alignment=taRightJustify Then        Form1.SpeedButton9.Down:=True    Else        Form1.SpeedButton9.Down:=False;End;Procedure Font_Delta;Var Vrem: String;begin    Form1.SpeedButton11.Font.Color:=Form1.RichEdit1.SelAttributes.Color;    Str(Form1.RichEdit1.SelAttributes.Size,Vrem);    Form1.ComboBox2.Text:=Vrem;    Form1.ComboBox1.Text:=Form1.RichEdit1.SelAttributes.Name;    If Form1.RichEdit1.SelAttributes.Style=[] Then        Text_Attrib:='000';    If Form1.RichEdit1.SelAttributes.Style=[fsUnderLine] Then        Text_Attrib:='001';    If Form1.RichEdit1.SelAttributes.Style=[fsItalic] Then        Text_Attrib:='010';    If Form1.RichEdit1.SelAttributes.Style=[fsItalic,fsUnderLine] Then        Text_Attrib:='011';    If Form1.RichEdit1.SelAttributes.Style=[fsBold] Then        Text_Attrib:='100';    If Form1.RichEdit1.SelAttributes.Style=[fsBold,fsUnderLine] Then        Text_Attrib:='101';    If Form1.RichEdit1.SelAttributes.Style=[fsBold,fsItalic] Then        Text_Attrib:='110';    If Form1.RichEdit1.SelAttributes.Style=[fsBold,fsItalic,fsUnderLine] Then        Text_Attrib:='111';    SpeedButton_Settings;End;

При формулировке задачи было требование, чтобы при повторном запуске программы она могла восстанавливать заданные параметры набора текста. Для реализации такой возможности необходимо сохранять параметры набора в отдельный файл (назовем его Settings.inf), а при загрузке программы загружать их из него. Создание такого файла будет выполняться по требованию пользователя, а при его отсутствии в каталоге с программой параметры набора текста будут заданы такими, как это было принято по умолчанию при разработке программы. Изменить содержимое файла с настройками можно посредством кнопки "Принять указанные параметры текста по умолчанию", обработчик которой содержит следующий код:

procedure TForm1.SpeedButton12Click(Sender: TObject);Var F: File of Settings;begin    Param.Align:=Form1.RichEdit1.Paragraph.Alignment;    Param.Font_Name:=Form1.ComboBox1.Text;    Param.Font_Size:=StrToInt(Form1.ComboBox2.Text);    Param.Font_Color:=Form1.SpeedButton11.Font.Color;    Param.Text_Attrib:=Text_Attrib;    AssignFile(F,ExtractFileDir(Application.ExeName)+'\Settings.inf');    Rewrite(F);    Write(F,Param);    CloseFile(F);end;

При запуске программе необходимо выполнить следующие действия (см. процедуру FormCreate в [21]):

  • загрузить параметры набора текста из файла Settings.inf, а при его отсутствии принять настройки по умолчанию;
  • отобразить в панели статуса имя текущего файла документа (сразу после запуска программы имя файла по умолчанию NoName.rtf);
  • загрузить список доступных шрифтов в компонент ComboBox1.

Программная реализация всего проекта в целом будет ясна из приведенного кода в [21].

На рис. 2 показано окно разработанной программы, рабочая область которой содержит набранный текст. Некоторый фрагмент текста выделен и вызвано контекстное меню.

Окно программы с выделенным фрагментом текста
Рисунок 2. Окно программы с выделенным фрагментом текста

Рассмотренный пример показывает, как можно использовать компонент RichEdit для создания простого текстового редактора. Написанная программа может использоваться в качестве интерактивного метода обучения программированию (метод проектов).

Для тренировки предлагаем читателю усовершенствовать код программы и внести возможности выравнивания текста по ширине, настройку межстрочного интервала (компонент RichEdit такие возможности также поддерживает), а также некоторые другие возможности, которые читатель сочтет нужным добавить в программу.

Читайте также

Список литературы

  1. Бобровский С.И. Delphi 7. Учебный курс. – СПб.: Питер, 2008. – 735 с.
  2. Дмитриев В.Л. Теория и практика решения задач по программированию. Ч. 1. Уфа: РИЦ БашГУ, 2007. – 264 с.
  3. Дмитриев В.Л. Теория и практика программирования на С++. – Стерлитамак: РИО СФ БашГУ, 2013. – 308 с.
  4. Дмитриев В.Л. Игровые проекты как средство повышения мотивации к изучению программирования // СМАЛЬТА. 2014. № 4. – С. 89-92.
  5. Дмитриев В.Л. Тестирование в игровой форме как способ проверки ус-воения учебного материала // Информатика в школе. 2012. №10 (83). – С. 41-43.
  6. Дмитриев В.Л. Компьютерная игра как средство тренировки зрительной памяти // NovaInfo.Ru. 2014. № 29. – С. 32-37.
  7. Дмитриев В.Л. Опыт отбора задач для активизации интереса школьников к изучению программирования // Информатика в школе. 2015. № 4. – С. 26-33.
  8. Дмитриев В.Л. Поэтапная разработка программы в среде Turbo Pascal на примере поиска пути с использованием волнового алгоритма // Информатика и образование. 2013. № 8 (247). – С. 29-33.
  9. Дмитриев В.Л. Развитие представлений об объектно-ориентированном программировании на примере разработки объектов в среде программирования Turbo Pascal // Информатика в школе. 2014. № 2. – С. 54-59.
  10. Дмитриев В.Л. Об эффективных алгоритмах решения ряда задач при обучении программированию // Профильная школа. 2014. Т.2. № 3. – С. 19-26.
  11. Дмитриев В.Л. Учебный пример реализации класса "Многочлен " на языке программирования C++ // NovaInfo.Ru. 2014. № 29. – С. 37-45.
  12. Дмитриев В.Л. Компьютерная программа для проведения тестирования с поддержкой произвольного расположения материалов теста // Информатика и образование. 2014. № 2 (251). – С. 74-77.
  13. Дмитриев В.Л., Ахмадеева Р.З. Развитие конструктивного мышления при изучении программирования // Информатика и образование. 2009. № 2. – С. 69-73.
  14. Дмитриев В.Л., Тугузбаева А.Р. Программная реализация метода приближенного решения матричных игр // NovaInfo.Ru. 2015. № 39. [Электронный ресурс]. – Режим доступа: http://novainfo.ru/archive/39/metod-priblizhennogo-resheniya-matrichnykh-igr (дата обращения: 04.12.2015).
  15. Дмитриев В.Л., Тугузбаева А.Р. Информационная система учета заказов малого частного предприятия // NovaInfo.Ru. 2015. № 39. [Электронный ресурс]. – Режим доступа: http://novainfo.ru/archive/39/informatsionnaya-sistema-ucheta-zakazov (дата обращения: 01.12.2015).
  16. Дмитриев В.Л., Евдокимова Н.Л., Мухаметова Л.К. Роль игровых проектов при обучении программированию // Современные научные исследования и инновации. 2015. № 12. [Электронный ресурс]. – Режим доступа: http://web.snauka.ru/issues/2015/12/60674 (дата обращения: 09.12.2015).
  17. Дмитриев В.Л., Евдокимова Н.Л., Мухаметова Л.К. Учебный пример разработки программы построения графика функции в системе программирования Delphi // NovaInfo.Ru. 2015. № 39. [Электронный ресурс]. – Режим доступа: http://novainfo.ru/archive/39/programma-postroeniya-grafika-funktsii (дата обращения: 18.12.2015).
  18. Дмитриев В.Л., Тодорович А.А. Численное моделирование теплопроводности в плоской неоднородной пластине // Современные научные исследования и инновации. 2015. № 12. [Электронный ресурс]. – Режим доступа: http://web.snauka.ru/issues/2015/12/61187 (дата обращения: 16.12.2015).
  19. Окулов С.М. Программирование в алгоритмах. – М.: БИНОМ. Лаборатория знаний. 2002. – 341 с.
  20. Стивенс Р. Delphi. Готовые алгоритмы: учебное пособие. – М.: ДМК Пресс, 2007. – 379 с.
  21. Текстовый редактор на основе компонента RichEdit в Delphi. [Электронный ресурс]. – Режим доступа: https://yadi.sk/d/gdzbqHVdmLEDx

Цитировать

Дмитриев, В.Л. Учебный пример разработки текстового редактора на основе компонента richedit в системе программирования Delphi / В.Л. Дмитриев, Н.Л. Евдокимова, Л.К. Мухаметова. — Текст : электронный // NovaInfo, 2015. — № 39. — URL: https://novainfo.ru/article/4066 (дата обращения: 24.01.2022).

Поделиться