завдання на проектування
Розробити програму формування тексту з вихідного текстового файлу за заданими параметрами зразка. Перенесення рядків здійснювати за межі слова. Передбачити можливості:
зміни шрифту;
зміна розміру шрифту;
типу вирівнювання;
кольори тексту і фону;
збереження тексту у файл;
відкриття текстового файлу
пошуку і заміни текстового фрагмента.
Введення
Дане завдання можливо реалізувати на будь-якому з відомих мов програмування, і для закріплення та удосконалення своїх практичних навичок розробки алгоритмів, написання і налагодження програм на мові програмування С + + я використав середовище розробки C + + Builder 6
Поставлене переді мною завдання присвячена редагування тексту. Редагування тексту є дуже важливою частиною оформлення документів.
Розробляється програма - «Текстовий редактор» не є якоюсь наднової програмою і на сьогодні має величезну кількість подібних додатків, розроблених як окремими людьми, так і цілими корпораціями.
У цій роботі стоїть завдання, навіть не повторити їх, а всього лише пропрацювати деякі функції роботи з текстом. У результаті роботи повинна вийти програма, якою, в принципі, можна користуватися в повсякденному житті в якості заміни вбудованого редактора «WordPad».
ВИБІР І ОБГРУНТУВАННЯ МОВИ ПРОГРАМУВАННЯ
В якості мови програмування для реалізації автоматизованої робочої програми зав обраний С + + і, заснована на ньому середовище розробки C + + Builder 6. Це потужна система візуального об'єктно-орієнтованого програмування, що дозволяє вирішувати безліч завдань, зокрема:
Створювати закінчені додатки для Windows самої різної спрямованості, від суто обчислювальних і логічних, до графічних і мультимедіа.
Швидко створювати (навіть починаючим програмістам) професійно виглядає віконний інтерфейс для будь-яких додатків, написаних на будь-якій мові. Зокрема, за допомогою C + + Builder можна об'єднати в єдину систему з зручним сучасним інтерфейсом наявні на підприємстві прикладні програми DOS, Windows і ін Інтерфейс задовольняє всім вимогам Windows і автоматично налаштовується на ту систему, яка встановлена на комп'ютері користувача, оскільки використовує багато функції, процедури, бібліотеки Windows.
Створювати потужні системи роботи з локальними і віддаленими базами даних будь-яких типів. При цьому є засоби автономного налагодження додатків з подальшим виходом в мережу.
Створювати багатоланкові розподілені додатки, засновані на різних технологіях.
Створювати додатки, які управляють іншими додатками, зокрема, такими програмами Microsoft Office, як Word, Excel і ін
Створювати крос-платформні додатки, які можна компілювати і експлуатувати як в Windows, так і в системі Linux.
Створювати додатки різних класів для роботи в.
Створювати професійні програми установки для додатків Windows, враховують всю специфіку і всі вимоги Windows.
І багато, багато іншого, включаючи створення звітів, довідкових систем, бібліотек DLL, компонентів ActiveX і т.п.
C + + Builder - надзвичайно швидко розвивається, тому що її творці постійно відстежують всі тенденції інформаційних технологій. Нові версії випускаються щорічно.
Для більшості застосувань можливості еквівалентних версій С + + У uilder і Delphi приблизно однакові. Це не дивно, оскільки мова Object Pascal в даний час дуже близький (звичайно, якщо не враховувати синтаксис) до C + +. Так що для більшості завдань вибір C + + або Object Pascal, і, відповідно, C + + Builder або Delphi - справа смаку і звички програміста. Але все-таки мова C + + поки трохи більш потужний, ніж Object Pascal. До того ж в C + + напрацьовані більш великі бібліотеки функцій. Так що деякі, порівняно складні завдання простіше вирішувати за допомогою C + + Builder.
З прекрасного засоби створення додатків для Windows C + + Builder перетворюється на інструмент створення додатків для багатоланкових розподілених крос-платформних корпоративних інформаційних систем.
ФІЗИЧНА СТРУКТУРА ПРОГРАМИ
Проект C + + Builder складається з форм, модулів з їх заголовками і файлами реалізації, установок параметрів проекту, ресурсів і т.д. Вся ця інформація розміщується у файлах. Багато хто з цих файлів автоматично створюються C + + Builder, коли ми будуємо наш додаток. Ресурси, такі, як бітові матриці, піктограми і т.д., знаходяться у файлах, які ми отримуємо з інших джерел або створюємо за допомогою численних інструментів та редакторів ресурсів, наявних в нашому розпорядженні (див. табл. 1).
Таблиця 1 - Фізична структура програми
Найменування | Призначення |
Головний файл проекту (. cpp) TeRAn.cpp | С + + Builder створює файл. Cpp для головної функції WinMain, що ініціює програми та запускає його на виконання. |
Файл опцій проекту (. bpr) TeRAn.bpr | Цей текстовий файл містить установки опцій проекту і вказівки на те, які файли повинні компілюватися і компонуватися в проект. Файл зберігається у форматі XML. |
Файл реалізації модуля (. Cpp) TeR. Cpp | Кожній створюваній вами формі відповідає текстовий файл реалізації модуля, який використовується для зберігання коду. Іноді ви можете самі створювати модулі, не пов'язані з формами. Текстовий файл реалізації головного вікна програми |
Unit 1. Cpp | Текстовий файл реалізації модуля «Про програму» |
Unit 2. Cpp | Текстовий файл реалізації модуля «Довідка» |
Заголовний файл модуля (. H) | Кожній створюваній вами формі відповідає не тільки файл реалізації модуля, але і його заголовний файл з описом класу форми. Ви можете й самі створювати необхідні заголовні файли. |
Файл форми (. Dfm) | Це двійковий або текстовий файл, який С + + Builder створює для зберігання інформації про ваші формах. Ви можете дивитися цей файл у текстовому вигляді або у вигляді форми. Кожному файлу форми відповідає файл модуля (. Cpp). |
Виконуваний файл (. Exe) TeRAn. Exe | Це виконуваний файл вашого додатку. Він є автономним виконуваним файлом, для якого більше нічого не потрібно, якщо тільки ви не використовуєте бібліотеки, що містяться в пакетах, DLL, OCX і т.д. |
Об'єктний файл модуля (. Obj) | Це відкомпільований файл модуля (. Cpp), який компонується в остаточний виконуваний файл. |
Файл ресурсів проекту (. Res) | Двійковий файл, що містить ресурси проекту: піктограми, курсори і т.п. за замовчуванням містить тільки піктограму проекту. Може доповняться за допомогою Редактора Зображень (Image Editor) |
Двійковий файл, використовуваний відладчиком в процесі відладки програми. | |
Файли резервних копій (. ~ Cpp,. ~ H,. ~ Bp,. ~ Df) | Це відповідно файли резервних копій для файлів реалізації модуля, заголовного, проекту та форми. Якщо ви щось безнадійно зіпсували у своєму проекті, можете відповідно змінити розширення цих файлів і таким чином повернутися до попереднього не зіпсоване варіанту. |
З усіх перерахованих файлів найважливішими є файли. Cpp,. H,. Dfm,. Bpr,. Res. Це ті файли, які ви, наприклад, повинні перенести на інший комп'ютер, якщо захочете продовжити на ньому роботу над своїм проектом. Всі інші файли C + + Builder створить автоматично в процесі компіляції проекту та його налагодження.
Інформація про форми C + + Builder зберігається в трьох файлах:. Cpp,. H,. Dfm. У двійковому або текстовому файлі з розширенням. Dfm зберігається інформація про зовнішній вигляд форми, її розміри, місце розташування на екрані і т.д.
Основний файл, з яким ви працюєте - файл реалізації модуля. Cpp, в якому зберігається код, що відповідає даній формі. У текстовому заголовному файлі з розширенням. H зберігається оголошення класу вашої форми. Весь основний текст цього файлу C + + Builder формує автоматично в міру проектування вами форми.
Якщо ви по черзі працюєте над багатьма проектами, той простір на диску може неефективно забиватися непотрібними файлами. У цьому випадку корисно видаляти допоміжні файли тих проектів, над якими ви тимчасово не працюєте. Перш за все, це відноситься до файлів. Obj,. Res,. Tds,. ~ *. Особливо зверніть увагу на файли. Tds, обсяг яких може бути дуже великим (кілька мегабайт).
Тепер кілька слів про виконуваному файлі. Exe і про файли пакетів. У C + + Builder можна розробляти прикладні програми двох видів - автономні виконувані файли. Exe і програми з підтримкою пакетів (packages) часу виконання. У останньому випадку розмір виконуваного файлу істотно скорочується, але зате ви повинні постачати користувачеві не тільки виконуваний модуль, але і файли підтримують його пакетів. У всякому разі, під час налагодження, має сенс включати підтримку пакетів часу виконання.
Це істотно скоротить розміри виконуваних файлів і збереже вам чимало дискового простору.
МЕТОДИКА РОЗВ'ЯЗУВАННЯ ЗАДАЧІ
Розіб'ємо поставлене перед нами завдання на окремі підзадачі:
Створення меню програми.
Висновок на екран довідки, що містить керівництво з управління та інформацію про автора.
Опис роботи програми
Програма містить у своєму складі всі необхідні пакети для роботи незалежно від C + + Buildera. Запуск проводиться з відкриття файлу T eRAn.exe Відразу після цього без зволікання відкривається головне вікно програми (див. малюнок 1)
Малюнок 1 - Головне вікно програми
У цьому вікні розташовані основні засоби управління програмою.
Безпосередньо в роботі з текстом бере участь форма «Довідка», представлена на малюнку 2. Текст довідки зчитується з файлу hlp, який завжди повинен знаходиться в одній папці разом з виконуваним файлом T eRAn.exe
Рисунок 2 - Допоміжна форма «Довідка»
Рисунок 3 - Допоміжна форма «Про програму»
З малюнка 1 видно, що на нашій головній формі програми можна безпосередньо редагувати текст документа, оформлюючи його за своїм бажанням необхідним чином. У верхній частині програми знаходяться дві панелі: панель інструментів Panel 1 і панель редагування Panel 2, на яких розташовуються кнопки типу SpeedButton, з функціями, відповідними технічному завданню.
Керівництво користувача
Апаратно-системні вимоги
Мінімальні системні вимоги:
IBM PC: MS Windows 98 і вище;
процесор Pentium 2 - 400МГц;
64 Мб ОЗУ;
SVGA - карта (800х600, 65536 кольорів);
Клавіатура;
Миша
Склад пакету
До складу користувальницького пакету входить всього 2 файли:
T eRAn.exe - виконуваний файл.
hlp - файл довідки, який при необхідності, можна зробити вбудованим.
Всі файли повинні лежати в одній папці і запускатися звідти.
Керівництво користувача
Дана програма являє собою текстовий редактор, призначений для набору, редагування та форматування тексту. Спочатку необхідно скопіювати всі файли, що входять у програмний пакет на жорсткий диск (усі файли повинні знаходитися в одній папці). Для початку роботи з програмою слід запустити файл T eRAn.exe, після чого з'явиться відразу головна форма з полем для редагування. Потім вибирайте потрібні для вас дії, слідуючи підказкам спливаючим, і підказкам з'являтимуться у рядку стану.
Текст можна вводити як з клавіатури, так і з файлу.
Для того, щоб прочитати керівництво користувача виберіть пункт меню «? | Довідка ».
Для виходу з програми виберіть пункт меню "Файл | Вихід.
Для збереження і успішної роботи програми не рекомендується вносити будь-які зміни у файли програмного пакету, а також слід зберігати ці файли і запускати програму з однієї папки.
Недоліки та переваги програми
У програми можна знайти наступні переваги: низькі системні й апаратні вимоги, має простий алгоритм, за розміром значно мала, пристойна швидкість роботи. Програма не представляє складності для користувача і має практично всі можливості редагування тексту.
Недоліком програми є відсутність налаштувань параметрів сторінки. Ні попереднього перегляду для відправки на друк.
Також недоліком можна вважати відсутність вибору кодування і відсутність синтаксичної підсвічування.
Таким чином, у розробленої програми є кілька способів подальшого удосконалення, після якого програма б позбулася від вищеописаних недоліків.
Висновок
В результаті виконання курсового проекту була розроблена програма, що демонструє приклад текстового редактора. У програмі були використані основні типи даних, структури даних, а також програма будувалася за модульним принципом.
У результаті виконаної роботи був повторений і використаний при розробці програми пройдений матеріал по програмуванню в середовищі розробки C + + Builder 6.
Також була проведена важлива робота з написання пояснювальної записки, досвід якої, безумовно, стати в нагоді в майбутньому при написанні всілякої документації.
Досить цікаво було працювати над самою поставленим завданням. Під час роботи був прочитаний матеріал, пов'язаний безпосередньо з мовою програмування С + +.
Бібліографічний список
Фаронов В.В., Програмування в Builder C + +: Навчальний курс. - СГБ.: Пітер, 2004.
Архангельський А.Я., Тагін М.А. Прийоми програмування в C + + Builder 6 і 2006: Обчислювальні завдання, робота з документами. - М: ЗАТ «Видавництво БІНОМ», 2007
Архангельський А.Я. Довідковий посібник по C + + Builder 6 і 2006. Компоненти. - М: ЗАТ «Видавництво БІНОМ», 2006
Додаток
TeRAn.cpp
# Include <vcl.h>
# Pragma hdrstop
//------------------------------------------------ ---------------------------
USEFORM ("TeR.cpp", Form1);
USEFORM ("Unit1.cpp", AboutBox);
USEFORM ("Unit2.cpp", Form2);
//------------------------------------------------ ---------------------------
WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application-> Initialize ();
Application-> CreateForm (__classid (TForm1), & Form1);
Application-> CreateForm (__classid (TForm2), & Form2);
Application-> Run ();
}
catch (Exception & exception)
{
Application-> ShowException (& exception);
}
catch (...)
{
try
{
throw Exception ("");
}
catch (Exception & exception)
{
Application-> ShowException (& exception);
}
}
return 0;
}
//------------------------------------------------ ---------------------------
TeR.cpp
# Include <vcl.h>
# Pragma hdrstop
# Include "TeR.h"
# Include "Unit1.h"
# Include "Unit2.h"
//------------------------------------------------ ---------------------------
# Pragma package (smart_init)
# Pragma link "CSPIN"
# Pragma resource "*. dfm"
TForm1 * Form1;
//------------------------------------------------ ---------------------------
__fastcall TForm1:: TForm1 (TComponent * Owner)
: TForm (Owner)
{
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton4Click (TObject * Sender)
{
if (OpenDialog1-> Execute ())
RichEdit1-> Lines-> LoadFromFile (OpenDialog1-> FileName);
StatusBar1-> Panels-> Items [0] -> Text = (OpenDialog1-> FileName);
SpeedButton4-> Down = false;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton14Click (TObject * Sender)
{
if (ColorDialog1-> Execute ())
RichEdit1-> SelAttributes-> Color = ColorDialog1-> Color;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: CSpinEdit1Change (TObject * Sender)
{
if (CSpinEdit1-> Text! = "")
{
RichEdit1-> SelAttributes-> Size = CSpinEdit1-> Value;
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: ComboBox1Change (TObject * Sender)
{
/ / Вибір шрифту
RichEdit1-> SelAttributes-> Name = ComboBox1-> Items-> Strings [ComboBox1 -> ItemIndex];
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton13Click (TObject * Sender)
{
/ / Жирний
if (SpeedButton13-> Down == true)
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold;
}
if (SpeedButton13-> Down == false)
{
RichEdit1-> SelAttributes-> Style = TFontStyles ();
}
if ((SpeedButton13-> Down == true) & & (SpeedButton12-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsItalic;
}
if ((SpeedButton13-> Down == false) & & (SpeedButton12-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsItalic;
}
if ((SpeedButton13-> Down) & & (SpeedButton11-> Down))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsUnderline;
}
if ((SpeedButton13-> Down == false) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsUnderline;
}
if ((SpeedButton13-> Down == true) & & (SpeedButton12-> Down == true) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsItalic <<fsUnderline;
}
if ((SpeedButton13-> Down == false) & & (SpeedButton12-> Down == true) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsItalic <<fsUnderline;
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton12Click (TObject * Sender)
{
/ / Курсив
if (SpeedButton12-> Down == true)
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsItalic;
}
if (SpeedButton12-> Down == false)
{
RichEdit1-> SelAttributes-> Style = TFontStyles ();
}
if ((SpeedButton12-> Down == true) & & (SpeedButton13-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsItalic;
}
if ((SpeedButton12-> Down == false) & & (SpeedButton13-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold;
}
if ((SpeedButton12-> Down) & & (SpeedButton11-> Down))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsItalic <<fsUnderline;
}
if ((SpeedButton12-> Down == false) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsUnderline;
}
if ((SpeedButton13-> Down == true) & & (SpeedButton12-> Down == true) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsItalic <<fsUnderline;
}
if ((SpeedButton13-> Down == true) & & (SpeedButton12-> Down == false) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsUnderline;
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton11Click (TObject * Sender)
{
if (SpeedButton11-> Down == true)
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsUnderline;
}
if (SpeedButton11-> Down == false)
{
RichEdit1-> SelAttributes-> Style = TFontStyles ();
}
if ((SpeedButton11-> Down == true) & & (SpeedButton13-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsUnderline;
}
if ((SpeedButton11-> Down == false) & & (SpeedButton13-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold;
}
if ((SpeedButton11-> Down == true) & & (SpeedButton12-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsItalic <<fsUnderline;
}
if ((SpeedButton11-> Down == false) & & (SpeedButton12-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsItalic;
}
if ((SpeedButton13-> Down == true) & & (SpeedButton12-> Down == true) & & (SpeedButton11-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsItalic <<fsUnderline;
}
if ((SpeedButton11-> Down == false) & & (SpeedButton12-> Down == true) & & (SpeedButton13-> Down == true))
{
RichEdit1-> SelAttributes-> Style = TFontStyles () <<fsBold <<fsItalic;
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton3Click (TObject * Sender)
{
if (SaveDialog1-> Execute ()) RichEdit1-> Lines-> SaveToFile (SaveDialog1-> FileName);
StatusBar1-> Panels-> Items [0] -> Text = SaveDialog1-> FileName;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N5Click (TObject * Sender)
{
if (SaveDialog1-> Execute ()) RichEdit1-> Lines-> SaveToFile (SaveDialog1-> FileName);
StatusBar1-> Panels-> Items [0] -> Text = SaveDialog1-> FileName;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton1Click (TObject * Sender)
{
RichEdit1-> CopyToClipboard ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton6Click (TObject * Sender)
{
if (PrintDialog1-> Execute ()) RichEdit1-> Print ("");
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N3Click (TObject * Sender)
{
if (OpenDialog1-> Execute ())
RichEdit1-> Lines-> LoadFromFile (OpenDialog1-> FileName);
StatusBar1-> Panels-> Items [0] -> Text = (OpenDialog1-> FileName);
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton7Click (TObject * Sender)
{
FindDialog1-> Position = Point (RichEdit1-> Left + RichEdit1-> Width, RichEdit1-> Top);
/ / 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:: N9Click (TObject * Sender)
{
if (MessageBox (0, "Зберегти вміст вікна редагування?", "Підтвердіть збереження", MB_YESNO) == IDYES)
if (SaveDialog1-> Execute ()) RichEdit1-> Lines-> SaveToFile (SaveDialog1-> FileName);
Application-> Terminate ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N16Click (TObject * Sender)
{
if (RichEdit1-> Lines-> Count> 0)
{
if (MessageBox (0, "Зберегти вміст вікна редагування? "," Підтвердіть збереження ", MB_YESNO) == IDYES)
{
/ / N9Click (Sender);
}
}
RichEdit1-> Clear ();
StatusBar1-> Panels-> Items [0] -> Text = "Документ";
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton2Click (TObject * Sender)
{
RichEdit1-> CutToClipboard ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton5Click (TObject * Sender)
{
RichEdit1-> CopyToClipboard ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton9Click (TObject * Sender)
{
RichEdit1-> PasteFromClipboard ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N20Click (TObject * Sender)
{
ReplaceDialog1-> Execute ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: ReplaceDialog1Replace (TObject * Sender)
{
TReplaceDialog * dlg = (TReplaceDialog *) Sender;
int SelPos = RichEdit1-> Lines-> Text.Pos (dlg-> FindText);
if (SelPos> 0)
{
RichEdit1-> SelStart = SelPos - 1;
RichEdit1-> SelLength = dlg-> FindText.Length ();
RichEdit1-> SelText = dlg-> ReplaceText;
}
else
MessageBeep (0);
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N19Click (TObject * Sender)
{
FindDialog1-> Position = Point (RichEdit1-> Left + RichEdit1-> Width, RichEdit1-> Top);
FindDialog1-> Execute ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N30Click (TObject * Sender)
{
if (FontDialog1-> Execute ())
{
RichEdit1-> SelAttributes-> Assign (FontDialog1-> Font);
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N28Click (TObject * Sender)
{
Application-> CreateForm (__classid (TAboutBox), & AboutBox);
AboutBox-> ShowModal ();
AboutBox-> Free ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N7Click (TObject * Sender)
{
if (PrintDialog1-> Execute ()) RichEdit1-> Print ("");
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N24Click (TObject * Sender)
{
StatusBar1-> Visible =! StatusBar1-> Visible;
N24-> Checked =! N24-> Checked;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N22Click (TObject * Sender)
{
Panel1-> Visible =! Panel1-> Visible;
N22-> Checked =! N22-> Checked;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N23Click (TObject * Sender)
{
Panel2-> Visible =! Panel2-> Visible;
N23-> Checked =! N23-> Checked;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton16Click (TObject * Sender)
{
if (ColorDialog1-> Execute ())
{RichEdit1-> Color = ColorDialog1-> Color;}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton17Click (TObject * Sender)
{
RichEdit1-> Paragraph-> Alignment = taLeftJustify;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton18Click (TObject * Sender)
{
RichEdit1-> Paragraph-> Alignment = taCenter;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton19Click (TObject * Sender)
{
if (SpeedButton11-> Down == true)
{
RichEdit1-> Paragraph-> Numbering = nsBullet;
}
else
{
RichEdit1-> Paragraph-> Numbering = nsNone;
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: SpeedButton15Click (TObject * Sender)
{
RichEdit1-> Paragraph-> Alignment = taRightJustify;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: CSpinEdit1KeyPress (TObject * Sender, char & Key)
{
if ((Key! = VK_BACK) & & (Key! = '9')&&( Key! = '8')&&( Key! = '7')&&( Key! = '6 '))
{
Set <char, '0','9'> Dig;
Dig <<0 "<<'1 '<<'2' <<'3 '<<'4' <<'5 '<<' 6 '<<' 7 '<<' 8 '<<' 9 ';
if (! Dig.Contains (Key)) {Key = 0; Beep ();}
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: FormShow (TObject * Sender)
{
int i;
for (i = 0; i <Screen-> Fonts-> Count; i + +)
{
ComboBox1-> Items-> Add (Screen-> Fonts-> Strings [i]);
}
CSpinEdit1-> Value = RichEdit1-> SelAttributes-> Size;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: RichEdit1MouseUp (TObject * Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (RichEdit1-> Paragraph-> Numbering == nsNone)
{SpeedButton19-> Down = false;}
if (RichEdit1-> Paragraph-> Numbering == nsBullet)
{SpeedButton19-> Down = true;}
switch (RichEdit1-> Paragraph-> Alignment)
{Case taLeftJustify: SpeedButton17-> Down = true; break;
case taCenter: SpeedButton18-> Down = true; break;
case taRightJustify: SpeedButton15-> Down = true; break;}
if (RichEdit1-> SelAttributes-> Style == RichEdit1-> SelAttributes-> Style <<fsBold)
{SpeedButton13-> Down = true;}
else {SpeedButton13-> Down = false;}
if (RichEdit1-> SelAttributes-> Style == RichEdit1-> SelAttributes-> Style <<fsUnderline)
{SpeedButton11-> Down = true;}
else {SpeedButton11-> Down = false;}
if (RichEdit1-> SelAttributes-> Style == RichEdit1-> SelAttributes-> Style <<fsItalic)
{SpeedButton12-> Down = true;}
else {SpeedButton12-> Down = false;}
CSpinEdit1-> Value = RichEdit1-> SelAttributes-> Size;
ComboBox1-> ItemIndex = ComboBox1-> Items-> IndexOf (RichEdit1-> SelAttributes-> Name);
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: RichEdit1KeyUp (TObject * Sender, WORD & Key,
TShiftState Shift)
{
if (RichEdit1-> Paragraph-> Numbering == nsNone)
{SpeedButton19-> Down = false;}
if (RichEdit1-> Paragraph-> Numbering == nsBullet)
{SpeedButton19-> Down = true;}
switch (RichEdit1-> Paragraph-> Alignment)
{Case taLeftJustify: SpeedButton17-> Down = true; break;
case taCenter: SpeedButton18-> Down = true; break;
case taRightJustify: SpeedButton15-> Down = true; break;}
if (RichEdit1-> SelAttributes-> Style == RichEdit1-> SelAttributes-> Style <<fsBold)
{SpeedButton13-> Down = true;}
else {SpeedButton13-> Down = false;}
if (RichEdit1-> SelAttributes-> Style == RichEdit1-> SelAttributes-> Style <<fsUnderline)
{SpeedButton11-> Down = true;}
else {SpeedButton11-> Down = false;}
if (RichEdit1-> SelAttributes-> Style == RichEdit1-> SelAttributes-> Style <<fsItalic)
{SpeedButton12-> Down = true;}
else {SpeedButton12-> Down = false;}
CSpinEdit1-> Value = RichEdit1-> SelAttributes-> Size;
ComboBox1-> ItemIndex = ComboBox1-> Items-> IndexOf (RichEdit1-> SelAttributes-> Name);
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: FormCreate (TObject * Sender)
{
RichEdit1-> Clear ();
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: FormClose (TObject * Sender, TCloseAction & Action)
{
Action = caFree;
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: FormCloseQuery (TObject * Sender, bool & CanClose)
{
if (RichEdit1-> Modified)
{
int res = Application-> MessageBox ("Текст документа НЕ збережений. \ n \ n "" Зберегти документ у файлі \ n \ n "" (Відміна - продовження роботи) "," Підтвердіть завершення роботи ", MB_YESNOCANCEL + MB_ICONQUESTION);
switch (res)
{
case IDYES: N5Click (Sender); break;
case IDCANCEL: CanClose = false;
}
}
}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: N26Click (TObject * Sender)
{
Application-> CreateForm (__classid (TForm2), & Form2);
Form2-> Memo1-> Lines-> LoadFromFile ("hlp");
Form2-> ShowModal ();
Form2-> Free ();
}