
- •Лабораторная работа 1
- •Лабораторная работа 2 Переменные и константы. Базовые типы. Арифметические операции
- •Операции
- •Ввод и вывод данных
- •Лабораторная работа 3 Циклический и ветвящийся поток управления
- •Алгоритмы разветвляющейся структуры
- •Операторы выбора
- •Операторы циклов
- •Операторы перехода
- •Задание
- •Лабораторная работа 4 Функции. Вызов функций с формальными параметрами, передаваемыми по значению
- •Задание
- •Лабораторная работа 5 Одномерные массивы
- •Задание
- •Лабораторная работа 6 Многомерные массивы
- •Задание
- •Лабораторная работа 7 Функции для работы с символами
- •Лабораторная работа 8 Строки, литералы. Передача строк в функции
- •Строки и литералы
- •Библиотечные функции для работы со строками
- •Выделение памяти под строки
- •Передача строк в качестве параметров функций
- •Задание
- •Лабораторная работа 9 Указатели и динамические массивы
- •Задание
- •Варианты
- •Лабораторная работа 10 Динамические структуры данных
- •Структуры и указатели
- •Задание
- •Лабораторная работа 11 Объектно-ориентированное программирование. Создание классов и объектов
- •Задание
- •Лабораторная работа 12 Знакомство со средой быстрой разработки приложений. Использование компонент библиотеки vcl
- •Лабораторная работа 13 Вывод в форму результатов работы программы
- •Лабораторная работа 14 Изучение обработчиков событий компонентов библиотеки vcl
- •Лабораторная работа 15 Использование таймера для создания различных эффектов
- •Лабораторная работа 16 Рисование в канве. Построение графиков функций
- •Лабораторная работа 17 Изучение принципа работы текстового редактора
- •Список рекомендуемой литературы
- •Оглавление
Лабораторная работа 17 Изучение принципа работы текстового редактора
Цель работы – понять основы работы простейшего текстового редактора.
Теория
Текстовый редактор – компьютерная программа, предназначенная для создания и изменения текстовых файлов, а также их просмотра на экране, вывода на печать, поиска фрагментов текста и т. п.
Различают два типа текстовых редакторов.
Первый тип ориентирован на работу с последовательностью символов в текстовых файлах. Такие редакторы обеспечивают расширенную функциональность – подсветку синтаксиса, сортировку строк, шаблоны, конвертацию кодировок, показ кодов символов и т. п. Иногда их называют редакторами кода, так как основное их предназначение – написание исходных кодов компьютерных программ.
Второй тип текстовых редакторов имеет расширенные функции форматирования текста, внедрения в него графики и формул, таблиц и объектов. Такие редакторы часто называют текстовыми процессорами и предназначены они для создания различного рода документов, от личных писем до официальных бумаг. Классический пример – Microsoft Word.
Задание
Приведенная ниже программа представляет собой текстовый редактор. Разберитесь в основных принципах ее работы. Опишите используемые функции, операторы, компоненты библиотеки VCL, обработчики событий. Объясните, для чего они нужны в данной программе.
#include <vcl.h>
#pragma hdrstop
#include "lab15_task1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString FileName;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
FileName = "Безымянный";
Form1->Caption = "Текстовый редактор - " + FileName;
ComboBox1->Items->Assign(Screen->Fonts);
}
void __fastcall TForm1::N8Click(TObject *Sender)
{
Form1->Close();
}
void __fastcall TForm1::N6Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
FileName = OpenDialog1->FileName;
Form1->Caption = "Текстовый редактор - " +
OpenDialog1->FileName;
}
}
void __fastcall TForm1::N7Click(TObject *Sender)
{
if(RichEdit1->Modified)
{
if (SaveDialog1->Execute())
{
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
RichEdit1->Modified = false;
}
}
}
void __fastcall TForm1::N5Click(TObject *Sender)
{
if(RichEdit1->Lines->Count > 0)
{
int answer;
answer = MessageBox(0,"Сохранить содержимое
окна?","Сохранить?",MB_YESNOCANCEL);
if(answer==IDYES)
{
N7Click(Sender);
RichEdit1->Clear();
}
else if(answer==IDNO)
{
RichEdit1->Clear();
}
}
}
void __fastcall TForm1::N9Click(TObject *Sender)
{
if(FileName == "Безымянный.txt")
{
N7Click(Sender);
}
else
{
RichEdit1->Lines->SaveToFile(FileName);
}
}
void __fastcall TForm1::N10Click(TObject *Sender)
{
PrinterSetupDialog1->Execute();
}
void __fastcall TForm1::N11Click(TObject *Sender)
{
if (PrintDialog1->Execute())
{
RichEdit1->Print(OpenDialog1->FileName);
}
}
void __fastcall TForm1::N12Click(TObject *Sender)
{
RichEdit1->CutToClipboard();
}
void __fastcall TForm1::N13Click(TObject *Sender)
{
RichEdit1->CopyToClipboard();
}
void __fastcall TForm1::N14Click(TObject *Sender)
{
RichEdit1->PasteFromClipboard();
}
void __fastcall TForm1::N16Click(TObject *Sender)
{
if(N16->Checked)
{
RichEdit1->WordWrap = false;
N16->Checked = false;
}
else
{
RichEdit1->WordWrap = true;
N16->Checked = true;
}
}
void __fastcall TForm1::N15Click(TObject *Sender)
{
if(FontDialog1->Execute())
{
RichEdit1->Font = FontDialog1->Font;
}
}
void __fastcall TForm1::N17Click(TObject *Sender)
{
RichEdit1->Clear();
}
void __fastcall TForm1::N19Click(TObject *Sender)
{
RichEdit1->Undo();
}
void __fastcall TForm1::N20Click(TObject *Sender)
{
N19Click(Sender);
}
void __fastcall TForm1::N21Click(TObject *Sender)
{
N12Click(Sender);
}
void __fastcall TForm1::N22Click(TObject *Sender)
{
N13Click(Sender);
}
void __fastcall TForm1::N23Click(TObject *Sender)
{
N14Click(Sender);
}
void __fastcall TForm1::N24Click(TObject *Sender)
{
N17Click(Sender);
}
void __fastcall TForm1::N31Click(TObject *Sender)
{
RichEdit1->SelectAll();
}
void __fastcall TForm1::N32Click(TObject *Sender)
{
N31Click(Sender);
}
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
RichEdit1->SelAttributes->Name = ComboBox1->Text;
}
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
RichEdit1->SelAttributes->Size = StrToInt(ComboBox2->Text);
}
void __fastcall TForm1::N33Click(TObject *Sender)
{
MessageBox(NULL, "Лабораторная работа № 17\n", "О программе...", MB_OK | MB_ICONINFORMATION);
}
void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
N9Click(Sender);
}
void __fastcall TForm1::ToolButton3Click(TObject *Sender)
{
N5Click(Sender);
}
void __fastcall TForm1::ToolButton2Click(TObject *Sender)
{
N6Click(Sender);
}
void __fastcall TForm1::N34Click(TObject *Sender)
{
RichEdit1->Paragraph->Alignment = taLeftJustify;
N34->Checked = true;
N35->Checked = false;
N36->Checked = false;
}
void __fastcall TForm1::N35Click(TObject *Sender)
{
RichEdit1->Paragraph->Alignment = taCenter;
N34->Checked = false;
N35->Checked = true;
N36->Checked = false;
}
void __fastcall TForm1::N36Click(TObject *Sender)
{
RichEdit1->Paragraph->Alignment = taRightJustify;
N34->Checked = false;
N35->Checked = false;
N36->Checked = true;
}
void __fastcall TForm1::ToolButton4Click(TObject *Sender)
{
N34Click(Sender);
}
void __fastcall TForm1::ToolButton6Click(TObject *Sender)
{
N35Click(Sender);
}
void __fastcall TForm1::ToolButton7Click(TObject *Sender)
{
N36Click(Sender);
}
void __fastcall TForm1::ToolButton10Click(TObject *Sender)
{
N10Click(Sender);
}