Реферат: Разработка текстового редактора - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Разработка текстового редактора

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 152 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

16 Разработка текстового редактора Введение Несколько лет назад исследователи заметили , что программисты в течение определенного времени пишут и отлаживают приблизительно одинаковый по объему код , независимо от используемого языка программирования . Объем работы примерно тот же , но результаты разны е . Написание 100 строк на С требует столько же затрат , сколько и 100 строк кода на ассемблере , но возможности кода на С гораздо шире . Поняв это , исследователи начали разрабатывать языки высокого уровня , которые увеличивали бы потенциал отдельного программ и ста , сокращая тем самым строки и стоимость разработки проектов. В 70-х годах среди создателей языков программирования приобрела популярность концепция объекта . Объект является совокупностью кода и данных , созданной для воспроизведения свойств физических об ъектов или абстрактных понятий. Объектно-ориентированное программирование – это методология , которая концентрируется больше на связях между объектами , чем на деталях реализации . Данные связи обычно развиваются по принципу деревьев , при этом новые типы объе ктов образуются уже из существующих . Сокрытие реализации объекта ведет к тому , что пользователя больше волнует связь с остальными объектами , чем поведение объекта . Данное отличие очень важно , поскольку оно означает принципиальный отказ от “императивных” я з ыков (таких как С ), в которых функции и вызовы функций составляют основу деятельности. В С ++ некоторые объекты являются частью самого языка . Но в целом задача создания новых объектов ложится на пользователя . В C ++ Builder имеется множество типов объектов , н о реальное использование языка требует создания новых типов . Эффективность ООП проявляется только при создании и применении групп связанных между собой объектов . Такие группы называют иерархиями классов . Развитие этих иерархий классов является основой дея т ельности в ООП. C ++ Builder является объектно-ориентированным языком программирования и на примере создания текстового редактора я хочу продемонстрировать всю мощь и быстроту визуального , объектно-ориентированного программирования. 1 Описание программы Основные характеристики Рассматриваемая программа имеет возможность редактирования текстовых файлов типа TXT и RTF , а также им подобные. Программа представляет собой EXE файл ; программа умеет открывать и сохранять текстовые файлы , редактировать их , изме нять шрифт и размер текста , имеет поиск и замену текста . Описание функций и клавиш будет приведено ниже. Руководство для пользователя Выполняемый файл называется WORD . EXE . После его запуска на экране появляется окно , показанное на Рисунок 1. 1 Рисунок 1. 1 – Окно программы , возникающее после запуска После т ого как программа запустится ее можно использовать. Кнопки панели управления -создание нового документа. - открытие документа - сохранение документа - вырезание выделенного текста - копирование выделенного текста - вставка текста из буфера обмена - отмена последнего действия - п оиск в тексте - замена в тексте - печать документа - выбор шрифта для выделенного текста - изменение размера выбранного текста - полужирный шрифт - курсивный шрифт - подчеркнутый шрифт - равнение текста по левому краю - равнение текста по центру - равнение текста по правому краю - маркировка выделенного абзаца Работа с документами Создание нового документа В меню Файл выберите команду Новый . Начните ввод текста . Чтобы сохранить новый файл , выберите в меню Файл команду Сохранить как и введи те имя в поле Имя файла . Сохранение измененного документа В меню Файл выберите команду Сохранить. Примечание Чтобы сохранить существующий документ под другим именем , выберите команду Сохранить как и введите новое имя в поле Имя файла . Открытие документа В меню Файл выберите команду Открыть . Рисунок 1.2 – Окно открытия файла. В открывшемся окне (рис 1.2), в поле со списком Папка выберите диск , содержащий документ , который следует откры ть . Дважды щелкните папку , содержащую нужный документ . Выберите документ и нажмите кнопку Открыть . Примечания Если вы не видите нужный документ , попробуйте выбрать другой тип документов в поле со списком Тип файлов . Чтобы открыть один из недавно откры вавшихся документов , выберите его имя в меню Файл . Настройка окна MAGWord Вывод на экран или скрытие линейки В меню Вид выберите команду Линейка. Если слева от этой команды в меню стоит метка , линейка находится на экране. Вывод на экран или скрытие па нели инструментов В меню Вид выберите команду Панель инструментов. Если слева от этой команды в меню стоит метка , панель инструментов находится на экране. Примечания Панель форматирования содержит кнопки , ускоряющие форматирование текста , например , изменя ющие начертание текста или стиль абзаца . Чтобы отформатировать текст , выделите его , а затем нажмите соответствующую кнопку на панели форматирования . Работа с текстом Отмена последнего действия В меню Правка выберите команду Отменить. Удаление текста Вы делите текст , который следует удалить . Чтобы переместить текст в другую часть документа , выберите в меню Правка команду Вырезать . Чтобы просто удалить текст из документа , нажмите клавишу DELETE. Примечания Чтобы снять выделение , щелкните любое место в документе . Чтобы отменить удаление , выберите в меню Правка команду Отменить . Чтобы выделить для удаления весь текст в документе нажмите Ctrl + A . Поиск текста В документе щелкните место , с которого следует начать поиск текста . В меню Правка выберите ком анду Поиск . В появившемся окне (Рисунок 1.3) установить параметры поиска . В поле Образец введите образец текста для поиска и нажмите кнопку Найти далее. Рисунок 1.3 – Окно поиска текста Ч тобы найти следующие вхождения искомого текста , нажимайте кнопку Найти далее. Примечания Для поиска и замены текста выберите в меню Правка команду Заменить . Поиск и замена текста В меню Правка выберите команду Заменить . В поле Образец введите образ ец текста для поиска и замены . В поле Заменить на введите новый текст . Примечания Чтобы заменить все вхождения искомого текста , нажмите кнопку Заменить все . Чтобы заменять каждое вхождение образца по отдельности , нажимайте кнопку Найти далее , а затем к нопку Заменить . Форматирование текста Создание маркированного списка Щелкните место в документе , с которого следует начать маркированный список . В меню Формат выберите команду Маркер , а затем начинайте ввод текста . При каждом нажатии клавиши ENTER на следующей строке будет появляться новый маркер . Чтобы завершить маркированный список , выберите команду Маркер еще раз . Изменение шрифта , начертания и размера символов Выделите текст , формат которого следует изменить . В меню Правка выберите команду Шриф т . Откроется диалоговое окно показанное на рисунке 1.4. Рисунок 1.4 – Окно выбора шрифта . Выберите нужные параметры и нажмите кнопку применить . Примечания Чтобы задать шрифт для оформлен ия нового текста , измените его до начала ввода текста . Чтобы изменить шрифт всего документа , нажмите Ctrl + A , а затем в меню Правка выберите Шрифт . Форматирование абзаца Щелкните любое место внутри абзаца , который требуется отформатировать . На панели инструментов щелкните по одной из кнопок выравнивания текста и задайте параметры отступа с помощью линейки. Печать Смена принтера и изменение параметров печати Чтобы сменить принтер , нажмите кнопку Печать . Откроется диалоговое окно показанное на рисунк е 1.5. Выберите имя принтера в поле со списком Имя . Рисунок 1.5 - Диалоговое окно печати документа . Чтобы начать печать щелкните по кнопке OK . Кон станты 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' '\ x 6' 6 ASCII ack '\60' '\ x 30' 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 v 1[] = " a \ x 0 fah \ 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; sw itch (key) case ASM: // что - то делает break; case BREAK: // что-то делает break; побуждает компилятор выдать предупреждение , поскольку только два значения keyword из трех используются . Можно также задавать значения перечислителей явно . Например : enum int16 sign=0100000, // знак most_significant=040000, // самый значимый least_significant=1 // наименее значимый ; Такие значения не обязательно должны быть различными , возрастающими или положительными. Приложение А # 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; e lse 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; v oid __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::Che ckFileSave(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::FileExit1Exe cute(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->Se lLength) 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 Rich Edit1->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 *Se nder) 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::SetupRul er(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->InitialD ir = 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::Tool Button14Click(TObject *Sender) if(RichEdit1->Paragraph->Numbering == TNumberingStyle(nsBullet)) RichEdit1->Paragraph->Numbering = TNumberingStyle(nsNone); else RichEdit1->Paragraph->Numbering = TNumberingStyle(nsBullet); void __fastcall TForm1::C omboBox1Change(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::ToolBut ton17Click(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) i nt 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 Shif t, 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;
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Роза! Ты почему такая маленькая?
- Так я же Люксембург...
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Разработка текстового редактора", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru