Текстовый редактор
Методика и основные этапы создания текстового редактора, выбор и обоснование языка программирования. Требования к проектируемой программе. Типы и описание основных констант: целых, с плавающей точкой, символьных. Разработка руководства пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.03.2013 |
Размер файла | 169,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Курсовая работа
Текстовый редактор
Введение
Несколько лет назад исследователи заметили, что программисты в течение определенного времени пишут и отлаживают приблизительно одинаковый по объему код, независимо от используемого языка программирования. Объем работы примерно тот же, но результаты разные. Написание 100 строк на С требует столько же затрат, сколько и 100 строк кода на ассемблере, но возможности кода на С гораздо шире. Поняв это, исследователи начали разрабатывать языки высокого уровня, которые увеличивали бы потенциал отдельного программиста, сокращая тем самым строки и стоимость разработки проектов.
В 70-х годах среди создателей языков программирования приобрела популярность концепция объекта. Объект является совокупностью кода и данных, созданной для воспроизведения свойств физических объектов или абстрактных понятий.
Объектно-ориентированное программирование - это методология, которая концентрируется больше на связях между объектами, чем на деталях реализации. Данные связи обычно развиваются по принципу деревьев, при этом новые типы объектов образуются уже из существующих. Сокрытие реализации объекта ведет к тому, что пользователя больше волнует связь с остальными объектами, чем поведение объекта. Данное отличие очень важно, поскольку оно означает принципиальный отказ от «императивных» языков (таких как С), в которых функции и вызовы функций составляют основу деятельности.
В С++ некоторые объекты являются частью самого языка. Но в целом задача создания новых объектов ложится на пользователя. В C++Builder имеется множество типов объектов, но реальное использование языка требует создания новых типов. Эффективность ООП проявляется только при создании и применении групп связанных между собой объектов. Такие группы называют иерархиями классов. Развитие этих иерархий классов является основой деятельности в ООП.
C++Builder является объектно-ориентированным языком программирования и на примере создания текстового редактора я хочу продемонстрировать всю мощь и быстроту визуального, объектно-ориентированного программирования.
1. Описание программы
1.1 Основные характеристики
Рассматриваемая программа имеет возможность редактирования текстовых файлов типа TXT и RTF, а также им подобные.
Программа представляет собой EXE файл; программа умеет открывать и сохранять текстовые файлы, редактировать их, изменять шрифт и размер текста, имеет поиск и замену текста. Описание функций и клавиш будет приведено ниже.
1.2 Руководство для пользователя
Выполняемый файл называется WORD.EXE. После его запуска на экране появляется окно, показанное на Рисунок 1. 1
Рисунок 1. 1 - Окно программы, возникающее после запуска
После того как программа запустится ее можно использовать.
Кнопки панели управления
- создание нового документа.
- открытие документа
- сохранение документа
- вырезание выделенного текста
- копирование выделенного текста
- вставка текста из буфера обмена
- отмена последнего действия
- поиск в тексте
- замена в тексте
- печать документа
- выбор шрифта для выделенного текста
- изменение размера выбранного текста
- полужирный шрифт
- курсивный шрифт
- подчеркнутый шрифт
- равнение текста по левому краю
- равнение текста по центру
- равнение текста по правому краю
- маркировка выделенного абзаца
Работа с документами
Создание нового документа
1. В меню Файл выберите команду Новый.
2. Начните ввод текста.
3. Чтобы сохранить новый файл, выберите в меню Файл команду Сохранить как и введите имя в поле Имя файла.
Сохранение измененного документа
В меню Файл выберите команду Сохранить.
Примечание
· Чтобы сохранить существующий документ под другим именем, выберите команду Сохранить как и введите новое имя в поле Имя файла.
Открытие документа
1. В меню Файл выберите команду Открыть.
Рисунок 1.2 - Окно открытия файла
2. В открывшемся окне (рис 1.2), в поле со списком Папка выберите диск, содержащий документ, который следует открыть.
3. Дважды щелкните папку, содержащую нужный документ.
4. Выберите документ и нажмите кнопку Открыть.
Примечания
· Если вы не видите нужный документ, попробуйте выбрать другой тип документов в поле со списком Тип файлов.
· Чтобы открыть один из недавно открывавшихся документов, выберите его имя в меню Файл.
Настройка окна MAGWord
Вывод на экран или скрытие линейки
В меню Вид выберите команду Линейка.
Если слева от этой команды в меню стоит метка, линейка находится на экране.
Вывод на экран или скрытие панели инструментов
В меню Вид выберите команду Панель инструментов.
Если слева от этой команды в меню стоит метка, панель инструментов находится на экране.
Примечания
· Панель форматирования содержит кнопки, ускоряющие форматирование текста, например, изменяющие начертание текста или стиль абзаца. Чтобы отформатировать текст, выделите его, а затем нажмите соответствующую кнопку на панели форматирования.
Работа с текстом
Отмена последнего действия
В меню Правка выберите команду Отменить.
Удаление текста
1. Выделите текст, который следует удалить.
2. Чтобы переместить текст в другую часть документа, выберите в меню Правка команду Вырезать.
Чтобы просто удалить текст из документа, нажмите клавишу DELETE.
Примечания
· Чтобы снять выделение, щелкните любое место в документе.
· Чтобы отменить удаление, выберите в меню Правка команду Отменить.
· Чтобы выделить для удаления весь текст в документе нажмите Ctrl+A.
Поиск текста
1. В документе щелкните место, с которого следует начать поиск текста.
2. В меню Правка выберите команду Поиск. В появившемся окне (Рисунок 1.3) установить параметры поиска.
3. В поле Образец введите образец текста для поиска и нажмите кнопку Найти далее.
Рисунок 1.3 - Окно поиска текста
программа текстовый константа редактор
4. Чтобы найти следующие вхождения искомого текста, нажимайте кнопку Найти далее.
Примечания
· Для поиска и замены текста выберите в меню Правка команду Заменить.
Поиск и замена текста
1. В меню Правка выберите команду Заменить.
2. В поле Образец введите образец текста для поиска и замены.
3. В поле Заменить на введите новый текст.
Примечания
· Чтобы заменить все вхождения искомого текста, нажмите кнопку Заменить все.
· Чтобы заменять каждое вхождение образца по отдельности, нажимайте кнопку Найти далее, а затем кнопку Заменить.
Форматирование текста
Создание маркированного списка
1. Щелкните место в документе, с которого следует начать маркированный список.
2. В меню Формат выберите команду Маркер, а затем начинайте ввод текста. При каждом нажатии клавиши ENTER на следующей строке будет появляться новый маркер.
3. Чтобы завершить маркированный список, выберите команду Маркер еще раз.
Изменение шрифта, начертания и размера символов
1. Выделите текст, формат которого следует изменить.
2. В меню Правка выберите команду Шрифт. Откроется диалоговое окно показанное на рисунке 1.4.
Рисунок 1.4 - Окно выбора шрифта
3. Выберите нужные параметры и нажмите кнопку применить.
Примечания
· Чтобы задать шрифт для оформления нового текста, измените его до начала ввода текста.
· Чтобы изменить шрифт всего документа, нажмите Ctrl+A, а затем в меню Правка выберите Шрифт.
Форматирование абзаца
1. Щелкните любое место внутри абзаца, который требуется отформатировать.
2. На панели инструментов щелкните по одной из кнопок выравнивания текста и задайте параметры отступа с помощью линейки.
Печать
Смена принтера и изменение параметров печати
1. Чтобы сменить принтер, нажмите кнопку Печать. Откроется диалоговое окно показанное на рисунке 1.5. Выберите имя принтера в поле со списком Имя.
Рисунок 1.5 - Диалоговое окно печати документа
2. Чтобы начать печать щелкните по кнопке OK.
2. Константы
C++ дает возможность записи значений основных типов: символьных констант, целых констант и констант с плавающей точкой. Кроме того, ноль (0) может использоваться как константа любого указательного типа, и символьные строки являются константами типа char[]. Можно также задавать символические константы. Символическая константа - это имя, значение которого не может быть изменено в его области видимости. В C++ имеется три вида символических констант: (1) любому значению любого типа можно дать имя и использовать его как константу, добавив к его описанию ключевое слово const; (2) множество целых констант может быть определено как перечисление; и (3) любое имя вектора или функции является константой.
Целые константы
Целые константы предстают в четырех обличьях: десятичные, восьмеричные, шестнадцатеричные и символьные константы. Десятичные используются чаще всего и выглядят так, как можно было бы ожидать:
0 1234 976 12345678901234567890
Десятичная константа имеет тип int, при условии, что она влезает в int, в противном случае ее тип long. Компилятор должен предупреждать о константах, которые слишком длинны для представления в машине. Константа, которая начинается нулем за которым идет x (0x), является шестнадцатеричным числом (с основанием 16), а константа, которая начинается нулем за которым идет цифра, является восьмеричным числом (с основанием 8). Вот примеры восьмеричных констант:
0 02 077 0123
их десятичные эквиваленты - это 0, 2, 63, 83. В шестнадцатеричной записи эти константы выглядят так:
0x0 0x2 0x3f 0x53
Буквы a, b, c, d, e и f, или их эквиваленты в верхнем регистре, используются для представления чисел 10, 11. 12, 13, 14 и 15, соответственно. Восьмеричная и шестнадцатеричная записи наиболее полезны для записи набора битов; применение этих записей для выражения обычных чисел может привести к неожиданностям. Например, на машине, где int представляется как двоичное дополнительное шестнадцатеричное целое, 0xffff является отрицательным десятичным числом -1; если бы для представления целого использовалось большее число битов, то оно было бы числом 65535.
Константы с плавающей точкой
Константы с плавающей точкой имеют тип double. Как и в предыдущем случае, компилятор должен предупреждать о константах с плавающей точкой, которые слишком велики, чтобы их можно было представить. Вот некоторые константы с плавающей точкой:
1.23.23 0.23 1. 1.0 1.2e10 1.23e-15
Заметьте, что в середине константы с плавающей точкой не может встречаться пробел. Например, 65.43 e-21 является не константой с плавающей точкой, а четырьмя отдельными лексическими символами (лексемами):
65.43 e - 21
и вызовет синтаксическую ошибку.
Если вы хотите иметь константу с плавающей точкой типа float, вы можете определить ее так:
const float pi = 3.14159265;
Символьные константы
Хотя в C++ и нет отдельного символьного типа данных, точнее, символ может храниться в целом типе, в нем для символов имеется специальная и удобная запись. Символьная константа - это символ, заключенный в одинарные кавычки; например, 'a' или '0'. Такие символьные константы в действительности являются символическими константами для целого значения символов в наборе символов той машины, на которой будет выполняться программа (который не обязательно совпадает с набором символов, применяемом на том компьютере, где программа компилируется). Поэтому, если вы выполняетесь на машине, использующей набор символов ASCII, то значением '0' будет 48, но если ваша машина использует EBCDIC, то оно будет 240. Употребление символьных констант вместо десятичной записи делает программу более переносимой. Несколько символов также имеют стандартные имена, в которых обратная косая \ используется как escape-символ:
'\b' |
возврат назад |
|
'\f' |
перевод формата |
|
'\n' |
новая строка |
|
'\r' |
возврат каретки |
|
'\t' |
горизонтальная табуляция |
|
'\v' |
вертикальная табуляция |
|
'\\' |
обратная косая (обратный слэш) |
|
'\'' |
одинарная кавычка |
|
'\"' |
двойная кавычка |
|
'\0' |
null, пустой символ, целое значение 0 |
Вопреки их внешнему виду каждое является одним символом. Можно также представлять символ одно-, дву- или трехзначным восьмеричным числом (символ \, за которым идут восьмеричные цифры), или одно-, дву- или трехзначным шестнадцатеричным числом (\x, за которым идут шестнадцатеричные цифры). Например:
'\6' '\x6' 6 ASCII ack
'\60' '\x30' 48 ASCII '0'
'\137' '\x05f' 95 ASCII '_'
Это позволяет представлять каждый символ из машинного набора символов, и в частности вставлять такие символы в символьные строки (см. следующий раздел). Применение числовой записи для символов делает программу непереносимой между машинами с различными наборами символов.
Строки
Строковая константа - это последовательность символов, заключенная в двойные кавычки:
«это строка»
Каждая строковая константа содержит на один символ больше, чем кажется; все они заканчиваются пустым символом '\0' со значением 0. Например:
sizeof («asdf»)==5;
Строка имеет тип «вектор из соответствующего числа символов», поэтому «asdf» имеет тип char[5]. Пустая строка записывается «» (и имеет тип char[1]). Заметьте, что для каждой строки s strlen(s)==sizeof(s) - 1, поскольку strlen() не учитывает завершающий 0. Соглашение о представлении неграфических символов с обратной косой можно использовать также и внутри строки. Это дает возможность представлять в строке двойные кавычки и escape-символ \. Самым обычным символом этого рода является, безусловно, символ новой строки '\n'. Например:
cout << «гудок в конце сообщения\007\n»
где 7 - значение ASKII символа bel (звонок). В строке невозможно иметь «настоящую» новую строку:
«это не строка,
а синтаксическая ошибка»
Однако в строке может стоять обратная косая, сразу после которой идет новая строка; и то, и другое будет проигнорировано. Например:
cout << «здесь все \
ok»
напечатает
здесь все ok
Новая строка, перед которой идет escape (обратная косая), не приводит к появлению в строке новой строки, это просто договоренность о записи. В строке можно иметь пустой символ, но большинство программ не будет предполагать, что есть символы после него. Например, строка «asdf\000hjkl» будет рассматриваться стандартными функциями, вроде strcpy() и strlen(), как «asdf».
Вставляя численную константу в строку с помощью восьмеричной или шестнадцатеричной записи благоразумно всегда использовать число из трех цифр. Читать запись достаточно трудно и без необходимости беспокоиться о том, является ли символ после константы цифрой или нет. Разберите эти примеры:
char v1 [] = «a\x0fah\0129»; // 'a' '\xfa' 'h' '\12' '9'
char v2 [] = «a\xfah\129»; // 'a' '\xfa' 'h' '\12' '9'
char v3 [] = «a\xfad\127»; // 'a' '\xfad' '\127'
Имейте в виду, что двузначной шестнадцатеричной записи на машинах с 9-битовым байтом будет недостаточно.
Ноль
Ноль (0) можно употреблять как константу любого целого, плавающего или указательного типа. Никакой объект не размещается по адресу 0. Тип нуля определяется контекстом. Обычно (но не обязательно) он представляется набором битов все-нули соответствующей длины.
Const
Ключевое слово const может добавляться к описанию объекта, чтобы сделать этот объект константой, а не переменной. Например:
const int model = 145;
const int v[] = {1, 2, 3, 4};
Поскольку константе ничего нельзя присвоить, она должна быть инициализирована. Описание чего-нибудь как const гарантирует, что его значение не изменится в области видимости:
model = 145; // ошибка
model++; // ошибка
Заметьте, что const изменяет тип, то есть ограничивает способ использования объекта, вместо того, чтобы задавать способ размещения константы. Поэтому например вполне разумно, а иногда и полезно, описывать функцию как возвращающую const:
const char* peek (int i)
{
return private[i];
}
Функцию вроде этой можно было бы использовать для того, чтобы давать кому-нибудь читать строку, которая не может быть затерта или переписана (этим кем-то). С другой стороны, компилятор может несколькими путями воспользоваться тем, что объект является константой (конечно, в зависимости от того, насколько он сообразителен). Самое очевидное - это то, что для константы не требуется выделять память, поскольку компилятор знает ее значение. Кроме того, инициализатор константы часто (но не всегда) является константным выражением, то есть он может быть вычислен на стадии компиляции. Однако для вектора констант обычно приходится выделять память, поскольку компилятор в общем случае не может вычислить, на какие элементы вектора сделаны ссылки в выражениях. Однако на многих машинах даже в этом случае может достигаться повышение эффективности путем размещения векторов констант в память, доступную только для чтения. Использование указателя вовлекает два объекта: сам указатель и указываемый объект. Снабжение описания указателя «префиксом» const делает объект, но не сам указатель, константой. Например:
const char* pc = «asdf»; // указатель на константу
pc[3] = 'a'; // ошибка
pc = «ghjk»; // ok
Чтобы описать сам указатель, а не указываемый объект, как константный, используется операция const*. Например:
char *const cp = «asdf»; // константный указатель
cp[3] = 'a'; // ok
cp = «ghjk»; // ошибка
Чтобы сделать константами оба объекта, их оба нужно описать const. Например:
const char *const cpc = «asdf»; // const указатель на const
cpc[3] = 'a'; // ошибка
cpc = «ghjk»; // ошибка
Объект, являющийся константой при доступе к нему через один указатель, может быть переменной, когда доступ осуществляется другими путями. Это в частности полезно для параметров функции. Посредством описания параметра указателя как const функции запрещается изменять объект, на который он указывает. Например:
char* strcpy (char* p, const char* q); // не может изменить q
Указателю на константу можно присваивать адрес переменной, поскольку никакого вреда от этого быть не может. Однако нельзя присвоить адрес константы указателю, на который не было наложено ограничение, поскольку это позволило бы изменить значение объекта. Например:
int a = 1;
const c = 2;
const* p1 = &c; // ok
const* p2 = &a; // ok
int* p3 = &c; // ошибка
*p3 = 7; // меняет значение c
Как обычно, если тип в описании опущен, то он предполагается int.
Перечисления
Есть другой метод определения целых констант, который иногда более удобен, чем применение const. Например:
enum {ASM, AUTO, BREAK};
определяет три целых константы, называемы перечислителями, и присваивает им значения. Поскольку значения перечислителей по умолчанию присваиваются начиная с 0 в порядке возрастания, это эквивалентно записи:
const ASM = 0;
const AUTO = 1;
const BREAK = 2;
Перечисление может быть именованным. Например:
enum keyword {ASM, AUTO, BREAK};
Имя перечисления становится синонимом int, а не новым типом. Описание переменной keyword, а не просто int, может дать как программисту, так и компилятору подсказку о том, что использование преднамеренное. Например:
keyword key;
switch (key) {
case ASM:
// что-то делает
break;
case BREAK:
// что-то делает
break;
}
побуждает компилятор выдать предупреждение, поскольку только два значения keyword из трех используются. Можно также задавать значения перечислителей явно. Например:
enum int16 {
sign=0100000, // знак
most_significant=040000, // самый значимый
least_significant=1 // наименее значимый
};
Такие значения не обязательно должны быть различными, возрастающими или положительными.
Перечень ссылок
1. Герберт Шилдт, Самоучитель С++, 3-е издание: BHV - Санкт-Петербург, 1998. - 688 с.
2. Рубенкинг Н. Программирование в Delphi для «чайников». 2-е издание - К.: «Диалектика», 1996. - 368 с.
3. Фаронов В.В. Delphi 4. Учебный курс.-М.: «Нолидж», 1999. - 464 с.
Приложение А
#include <vcl.h>
#pragma hdrstop
#include «About.h»
#include «AlexWord.h»
#include «LogoStrs.h»
const float RulerAdj = 4.0/3.0;
const int GutterWid = 6;
#pragma link «CGRID»
#pragma resource «*.dfm»
TForm1 *Form1;
__fastcall TForm1:TForm1 (TComponent *Owner)
: TForm(Owner)
{
}
void __fastcall TForm1: RichEdit1SelectionChange (TObject *Sender)
{
char sizebuf[6];
try {
FUpdating = True;
ComboBox1->Text = RichEdit1->SelAttributes->Name;
FirstInd->Left = int (RichEdit1->Paragraph->FirstIndent*RulerAdj) - 4+GutterWid;
LeftInd->Left = int((RichEdit1->Paragraph->LeftIndent+
RichEdit1->Paragraph->FirstIndent)*RulerAdj) - 4+GutterWid;
RightInd->Left = Ruler->ClientWidth-6-int(
(RichEdit1->Paragraph->RightIndent+GutterWid)*RulerAdj);
if (CurrText()->Style==CurrText()->Style >> fsItalic)
ToolButton17->Down=false;
else ToolButton17->Down=true;
if (CurrText()->Style==CurrText()->Style >> fsBold)
ToolButton15->Down=false;
else ToolButton15->Down=true;
if (CurrText()->Style==CurrText()->Style >> fsUnderline)
ToolButton3->Down=false;
else ToolButton3->Down=true;
Edit2->Text = itoa (RichEdit1->SelAttributes->Size, sizebuf, 10);
if (RichEdit1->Paragraph->Alignment == taLeftJustify)
LeftAlign->Down=true;
else LeftAlign->Down=false;
if (RichEdit1->Paragraph->Alignment == taCenter)
CenterAlign->Down=true;
else CenterAlign->Down=false;
if (RichEdit1->Paragraph->Alignment == taRightJustify)
RightAlign->Down=true;
else RightAlign->Down=false;
if (RichEdit1->Paragraph->Numbering == TNumberingStyle(nsBullet))
ToolButton14->Down=true;
else ToolButton14->Down=false;
}
catch (…) {
FUpdating = False;
}
FUpdating = False;
}
TTextAttributes *__fastcall TForm1: CurrText(void)
{
return RichEdit1->SelAttributes;
}
void __fastcall TForm1: FileNew1Execute (TObject *Sender)
{
FFileName = LoadStr(sUntitled);
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
void __fastcall TForm1: FileOpen1Execute (TObject *Sender)
{
if (OpenDialog->Execute())
{
RichEdit1->Lines->LoadFromFile (OpenDialog->FileName);
FFileName = OpenDialog->FileName;
RichEdit1->SetFocus();
RichEdit1->Modified = false;
RichEdit1->ReadOnly = OpenDialog->Options. Contains(ofReadOnly);
Form1->Caption = OpenDialog->FileName;
}
}
void __fastcall TForm1: FileSave1Execute (TObject *Sender)
{
if (FFileName == LoadStr(sUntitled))
{
FileSaveAs1Execute(Sender);
Form1->Caption = SaveDialog->FileName;}
else
{
RichEdit1->Lines->SaveToFile(FFileName);
RichEdit1->Modified = false;}
}
void __fastcall TForm1: FileSaveAs1Execute (TObject *Sender)
{
String str;
TVarRec vrs[1];
if (SaveDialog->Execute())
{
if (FileExists (SaveDialog->FileName))
{
str = FmtLoadStr (sOverwrite, OPENARRAY (TVarRec, (SaveDialog->FileName)));
if (MessageDlg (str, mtConfirmation, TMsgDlgButtons() << mbYes << mbNo <<
mbCancel, 0)!= IDYES)
return;
}
RichEdit1->Lines->SaveToFile (SaveDialog->FileName);
FFileName = SaveDialog->FileName;
RichEdit1->Modified = false;
}
}
void __fastcall TForm1: CheckFileSave(void)
{
if (RichEdit1->Modified) {
switch (MessageBox(Handle, «Save Changes?»,
«Confirmation», MB_YESNOCANCEL | MB_ICONQUESTION))
{case ID_YES: FileSave1Execute(this);
case ID_CANCEL: Abort();
}
}
}
void __fastcall TForm1: FileExit1Execute (TObject *Sender)
{
Close();
}
void __fastcall TForm1: HelpAbout1Execute (TObject *Sender)
{
AboutBox->ShowModal();
}
void __fastcall TForm1: UndoClick (TObject *Sender)
{
if (RichEdit1->HandleAllocated())
SendMessage (RichEdit1->Handle, EM_UNDO, 0, 0);
}
void __fastcall TForm1: PrintClick (TObject *Sender)
{
if (PrintDialog1->Execute()) RichEdit1->Print (OpenDialog->FileName);
}
void __fastcall TForm1: Print_SetupClick (TObject *Sender)
{
PrinterSetupDialog1->Execute();
}
void __fastcall TForm1: FindClick (TObject *Sender)
{
FindDialog1->FindText = RichEdit1->SelText;
FindDialog1->Execute();
}
void __fastcall TForm1: FindDialog1Find (TObject *Sender)
{
int FoundAt, StartPos, ToEnd;
if (RichEdit1->SelLength)
StartPos = RichEdit1->SelStart + RichEdit1->SelLength;
else
StartPos = 0;
ToEnd = RichEdit1->Text. Length() - StartPos;
FoundAt = RichEdit1->FindText (FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);
if (FoundAt!= -1)
{
RichEdit1->SetFocus();
RichEdit1->SelStart = FoundAt;
RichEdit1->SelLength = FindDialog1->FindText. Length();
}
}
void __fastcall TForm1: ReplaceDialog1Replace (TObject *Sender)
{
if (RichEdit1->SelLength == 0)
FindDialog1Find(Sender);
else
{
RichEdit1->SelText = ReplaceDialog1->ReplaceText;
FindDialog1Find(Sender);
}
if (ReplaceDialog1->Options. Contains(frReplaceAll))
while (RichEdit1->SelLength!=0)
ReplaceDialog1Replace(Sender);
}
void __fastcall TForm1: ReplaceClick (TObject *Sender)
{
ReplaceDialog1->Execute();
}
void __fastcall TForm1:N5Click (TObject *Sender)
{
FontDialog1->Options << fdApplyButton;
FontDialog1->Execute();
}
void __fastcall TForm1: FontDialog1Apply (TObject *Sender, HWND Wnd)
{
if (ActiveControl->ClassNameIs («TEdit»))
((TEdit *) ActiveControl)->Font->Assign (FontDialog1->Font);
else if (ActiveControl->ClassNameIs («TRichEdit»))
((TRichEdit *) ActiveControl)->SelAttributes->Assign (FontDialog1->Font);
else
MessageBeep(0);
}
void __fastcall TForm1:prClick (TObject *Sender)
{
ToolButton8->Visible=false;
}
void __fastcall TForm1:rp1Click (TObject *Sender)
{
ToolButton8->Visible=true;
}
void __fastcall TForm1: CenterAlignClick (TObject *Sender)
{
RichEdit1->Paragraph->Alignment = taCenter;
}
void __fastcall TForm1: LeftAlignClick (TObject *Sender)
{
RichEdit1->Paragraph->Alignment = taLeftJustify;
}
void __fastcall TForm1: RightAlignClick (TObject *Sender)
{
RichEdit1->Paragraph->Alignment = taRightJustify;
}
void __fastcall TForm1: SetupRuler(void)
{int iCtr = 1;
char sTmp[201];
while (iCtr < 200) {
sTmp[iCtr] = 9;
iCtr++;
sTmp[iCtr] = '|';
iCtr++;
}
Ruler->Caption = (AnsiString) sTmp;
}
void __fastcall TForm1: FormCreate (TObject *Sender)
{
OpenDialog->InitialDir = ExtractFilePath (ParamStr(0));
SaveDialog->InitialDir = OpenDialog->InitialDir;
SetupRuler();
for (int i = 0; i < Screen->Fonts->Count; i++)
ComboBox1->Items->Add (Screen->Fonts->Strings[i]);
RichEdit1->SelStart = 0;
}
void __fastcall TForm1: ToolButton14Click (TObject *Sender)
{
if (RichEdit1->Paragraph->Numbering == TNumberingStyle(nsBullet))
RichEdit1->Paragraph->Numbering = TNumberingStyle(nsNone);
else
RichEdit1->Paragraph->Numbering = TNumberingStyle(nsBullet);
}
void __fastcall TForm1: ComboBox1Change (TObject *Sender)
{
TCharsetObject* ChasrsetObject;
if (! FUpdating) {
ChasrsetObject = (TCharsetObject*) ComboBox1->Items->Objects [ComboBox1->ItemIndex];
CurrText()->Name = ComboBox1->Items->Strings [ComboBox1->ItemIndex];
}
}
void __fastcall TForm1: ToolButton15Click (TObject *Sender)
{
if (CurrText()->Style == CurrText()->Style >> fsBold)
CurrText()->Style = CurrText()->Style << fsBold;
else
CurrText()->Style = CurrText()->Style >> fsBold;
}
void __fastcall TForm1: ToolButton17Click (TObject *Sender)
{
if (CurrText()->Style ==CurrText()->Style >> fsItalic)
CurrText()->Style = CurrText()->Style << fsItalic;
else
CurrText()->Style = CurrText()->Style >> fsItalic;
}
void __fastcall TForm1: Edit2Change (TObject *Sender)
{
int fontsize = atoi (Edit2->Text.c_str());
if ((! FUpdating) && (fontsize))
{
CurrText()->Size = atoi (Edit2->Text.c_str());
}
}
void __fastcall TForm1: ToolButton3Click (TObject *Sender)
{
if (CurrText()->Style ==CurrText()->Style >> fsUnderline)
CurrText()->Style = CurrText()->Style << fsUnderline;
else
CurrText()->Style = CurrText()->Style >> fsUnderline;
}
void __fastcall TForm1: FirstIndMouseDown (TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TLabel * oTmpLabel = (TLabel *) Sender;
FDragOfs = oTmpLabel->Width / 2;
oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
FDragging = True;
}
void __fastcall TForm1: FirstIndMouseUp (TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
FDragging = False;
RichEdit1->Paragraph->FirstIndent = int((FirstInd->Left+FDragOfs-GutterWid) / RulerAdj);
LeftIndMouseUp (Sender, Button, Shift, X, Y);
}
void __fastcall TForm1: LeftIndMouseUp (TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
FDragging = False;
RichEdit1->Paragraph->LeftIndent = int((LeftInd->Left+FDragOfs-GutterWid)/
RulerAdj) - RichEdit1->Paragraph->FirstIndent;
RichEdit1SelectionChange(Sender);
}
void __fastcall TForm1: FirstIndMouseMove (TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (FDragging) {
TLabel * oTmpLabel = (TLabel *) Sender;
oTmpLabel->Left = oTmpLabel->Left+X-FDragOfs;
}
}
void __fastcall TForm1: RightIndMouseUp (TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
FDragging = False;
RichEdit1->Paragraph->RightIndent =
int((Ruler->ClientWidth-RightInd->Left+FDragOfs-2) /
RulerAdj) - 2*GutterWid;
RichEdit1SelectionChange(Sender);
}
void __fastcall TForm1: RulerResize (TObject *Sender)
{
RulerLine->Width = (int) Ruler->ClientWidth - (RulerLine->Left*2);
}
void __fastcall TForm1: FormPaint (TObject *Sender)
{
TRect Rct = Rect (GutterWid, 0, RichEdit1->ClientWidth-GutterWid,
ClientHeight);
SendMessage (RichEdit1->Handle, EM_SETRECT, 0, long(&Rct));
}
void __fastcall TForm1: FormResize (TObject *Sender)
{
RichEdit1SelectionChange(Sender);
}
void __fastcall TForm1: FormActivate (TObject *Sender)
{
FileNew1Execute(Sender);
RichEdit1->SetFocus();
}
void __fastcall TForm1: FormCloseQuery (TObject *Sender, bool &CanClose)
{
try {
CheckFileSave();
}
catch (…) {
CanClose = False;
}
}
void __fastcall TForm1:NRulerClick (TObject *Sender)
{
if (Ruler->Visible==false)
{
Ruler->Visible=true;
NRuler->Checked=true;}
else {Ruler->Visible=false; NRuler->Checked=false;
}
}
void __fastcall TForm1:NPanelClick (TObject *Sender)
{
if (Panel1->Visible==false)
{
Panel1->Visible=true;
NPanel->Checked=true;
}
else {Panel1->Visible=false;
NPanel->Checked=false;
}
}
void __fastcall TForm1:NBarClick (TObject *Sender)
{
if (StatusBar->Visible==false)
{StatusBar->Visible=true;
NBar->Checked=true;}
else {StatusBar->Visible=false;
NBar->Checked=false;
}
}
Размещено на Allbest.ru
...Подобные документы
Разработка текстового редактора для работы с текстовыми приложениями. Описание работы программы, использование языка С++ для ее создания. Описание работы программы, ее простота и надежность, как для начинающих программистов, так и для профессионалов.
курсовая работа [872,8 K], добавлен 25.11.2010Разработка текстового редактора с подсветкой синтаксиса языков программирования. Загрузка из XML-файла настроек для подсветки синтаксиса и конструкций языка. Формат файлов конфигурации и проверки. Разбор текста и применение к нему стилей, тестовый пример.
курсовая работа [141,6 K], добавлен 13.03.2013Разработка алгоритма и программы, которая позволяет создавать программное обеспечение для языка программирования Паскаль. Функциональная спецификация программы. Выбор и обоснование комплекса технических средств. Пользовательское меню и интерфейс.
курсовая работа [1,3 M], добавлен 02.02.2014Необходимые компоненты и порядок составления текстового редактора. Текст программы решения задачи на языке программирования C++. Контрольный пример работы текстового редактора. Создание и произведение операции форматирования простого документа.
курсовая работа [1,6 M], добавлен 03.09.2011Текстовый редактор как средство создания, обработки и хранения документов равной степени сложности. Интерфейс текстового редактора MS Word, редактирование и форматирование текста. Работа с таблицами, рисунками и диаграммами. Распечатывание документа.
дипломная работа [283,4 K], добавлен 03.05.2009Описание текстового редактора MS WORD, его возможности. Основные элементы интерфейса редактора: кнопка Office, главные команды панели быстрого доступа, лента, контекстное меню и полоса прокрутки. Рабочая область приложения, настройка строки состояния.
реферат [24,0 K], добавлен 23.10.2014Аналоги текстовых редакторов с русскоязычным интерфейсом. Разработка и тестирование программного продукта, позволяющего работать с текстом и файлами в редакторе на языке программирования, основанным на русском языке. Алгоритм функционала программы.
дипломная работа [2,8 M], добавлен 21.07.2013Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.
курсовая работа [1,3 M], добавлен 28.07.2013Типы, основные функции, элементы и принцип работы текстового редактора (компьютерной программы). Методы вставки внешних объектов в текст. Особенности текстового процессора Microsoft Word, его специальные возможности. Типовая структура интерфейса.
реферат [15,8 K], добавлен 07.12.2010Освоение правил и приемов создания wеb-узлов, средствами редактора MS FrontPage 2000. Методы организации перемещения по страницам, при использовании гиперссылки. Разработка документов текстового редактора Word, предназначенных для публикации в Internet.
лабораторная работа [37,8 K], добавлен 12.06.2010Текстовый редактор, графический редактор, электронные таблицы, компьютерные математические системы. Реализация текстового редактора Micfrosoft Word в процессе обучения математики. Графический редактор CorelDRAW в создании рисунков и графических объектов.
курсовая работа [450,5 K], добавлен 27.03.2013Основные форматы данных и их представление. Запись чисел в формат с плавающей точкой. Вычитание чисел в формате с плавающей точкой. Регистры операндов и результата, размером формата числа с плавающей точкой, двойной точности. Поля смещённого порядка.
курсовая работа [78,9 K], добавлен 09.09.2014Описание входных и выходных данных. Общая характеристика и требования к проектируемой программе, ее структуре и функциональным компонентам. Выбор и обоснование средств разработки, разработка интерфейса пользователя. Требования к программному обеспечению.
курсовая работа [1,4 M], добавлен 12.05.2016Дизайн интерфейса приложения как связь человека и персонального компьютера. Adobe Photoshop и его возможности, анализ функциональности и содержание главных операций. Используемые инструменты для разработки дизайна интерфейса текстового редактора.
контрольная работа [407,5 K], добавлен 12.10.2015Особенности создания ряда игровых приложений, логической игры. Программное обеспечение простейшего калькулятора, генератора функций. Разработка элементов интерфейса простейшего графического редактора, электронной записной книжки, текстового редактора.
методичка [788,7 K], добавлен 24.10.2012Редактирование текста как очень важная часть оформления документов. Разработка программы по работе с текстом "Текстовый редактор" в среде разработки C++Builder 6 как приложения, использующегося в качестве замены встроенного редактора "WordPad".
курсовая работа [256,7 K], добавлен 08.12.2010Текстовый редактор - приложение для обработки текстовой информации. Описание текстовых процессоров как более совершенных текстовых редакторов. Типы текстовых файлов: форматированные, неформатированные. Основные правила редактирования и набора текста.
презентация [747,3 K], добавлен 26.11.2010Составление Win32 App проекта - простейшего текстового редактора, который позволяет выполнять такие операции: редактирование текста, копирование и вставку из одного окна проекта в другое окно проекта. Методы вызова диалогов сохранения и открытия файла.
курсовая работа [716,3 K], добавлен 09.11.2010Анализ двоичной, восьмеричной и шестнадцатеричной систем счисления и перевода десятичных чисел. Форматы хранения чисел с плавающей точкой. Программа для преобразования массива констант в формат числа с плавающей точкой на эмуляторе микро-ЭВМ СМ-1800.
курсовая работа [266,9 K], добавлен 24.12.2013Архитектура программного продукта и требования к платформе, обоснование выбора разработки. Закономерности и основные этапы алгоритмизации и программирования, а также отладка и тестирование продукта. Разработка и содержание руководства пользователя.
дипломная работа [2,3 M], добавлен 19.01.2017