МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Створення текстового редактора у середовищі візуального програмування Delphi, з використанням компонентів головного меню, та діалогових вікон.
ІНСТРУКЦІЯ
до лабораторної роботи № 4
з курсу
“Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах” спеціальності 07.030505 “Прикладна лінгвістика”.
ЗАТВЕРДЖЕНО
На засіданні кафедри “Системи
Автоматизованого проектування”
Протокол №___ від _________
Львів - 2006
Створення текстового редактора у середовищі візуального програмування Delphi, з використанням компонентів головного меню, та діалогових вікон.
Інструкція до лабораторної роботи №4 з курсу “Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах” для студентів спеціальності 07.030505 “Прикладна лінгвістика”. Укл. Д.В. Корпильов, Т.В. Свірідова Львів НУЛП, 2006.
Укладач: Д.В. Корпильов, асистент.
Т.В. Свірідова, к.т.н., асистент.
Відповідальний за випуск С.П. Ткаченко, к.т.н., доцент
Рецензенти І.І. Мотика, к.т.н., доцент
Ю.В. Стех, к.т.н., доцент
Мета роботи: Вивчити класи і компоненти Delphi, призначені для створення компонентів головного меню, та діалогових вікон. Навчитися створювати простий текстовий редактор.
Теоретичні відомості.
Частина 1.
У цій лабораторній роботі ми розробимо текстовий редактор. Створимо редактор на зразок Microsoft Word (редактор для форматованого тексту).
Вибираємо основний компонент для створення редактора. Вибір між компонентом Memo і RichEdit. Для нашого редактора ми виберемо RichEdit (знаходиться на вкладці Win32), тому що він підтримує абзаци, нумерацію, колірне виділення тексту і т.д.

Помістивши його на форму ви побачите приблизно те, що  зображено на малюнку. Поки це не дуже схоже на текстовий редактор, але незабаром він перетвориться. Тепер нам необхідно розтягти компонент, щоб він займав усю робочу площу вікна. Але при цьому треба пам'ятати, що при зміні розмірів вікна користувачем, компонент теж повинний змінювати свої розміри! 
Для цього ми скористаємося властивістю Align нашого компонента. Необхідно встановити його в alClient. Це дозволить нам досягти бажаного ефекту.
У компоненті RichEdit при установці вже міститься один рядок тексту (за замовчуванням це ім'я знову створеного компонента). За відображення тексту в компоненті відповідає властивість Lines типу TStrings. Це щось начебто масиву рядків, тому що кожен рядок має свій порядковий номер (відлік починається з нуля). Щоб змінити, наприклад, перший рядок, необхідно написати так:
RichEdit1.Lines[0]:='Новий рядок'; 
Якщо цей рядок помістити в подію форми OnCreate, а в лапках замість Новий рядок нічого не ставити (тобто просто RichEdit1.Lines[0]:='';), то при запуску програми перший рядок буде порожнім. Але можна зробити набагато простіше! Натисніть на формі на Ваш компонент RichEdit, а тепер в Інспекторі Об'єктів знайдіть властивість Lines. Натисніть на нього, а потім на кнопку з трьома крапками. Перед Вами з'явиться редактор тексту. Просто зітріть весь зміст. 
Треба придумати яку-небудь назву вашій новій програмі і розмістити його в заголовок форми. За відображення форми відповідає властивість Caption, тому прямо в Інспекторі Об'єктів зміните це значення. (не забудьте перед цим вибрати форму). 
Тепер нам треба створити панель інструментів (ToolBar), на якій будуть розташовуватися кнопки швидкого виклику команд (наприклад, Відкрити, Зберегти і т.д.). Для цього розташуєте на формі компонентів Panel (вкладка Standart палітри компонентів). Зітріть у неї властивість Caption. Тепер треба зробити, щоб панель розташовувалася завжди у верхній частині вікна. Встановити властивість панелі - Align рівним alTop.
Ми тільки що створили платформу, на якій будуть знаходитися кнопки. Розмістимо і їх на нашій панелі. Поки обійдемося двома кнопками (Button). Властивість Caption першої панелі зробіть рівним Відкрити, другий - Зберегти.
Щоб нам відкривати і зберігати текстові файли нам знадобляться ще два компоненти, це OpenDialog і SaveDialog. Обоє знаходяться на вкладці Dialogs. Це невізуальні компоненти і їх не буде видно під час роботи додатка, тому розташовуйте їх у будь-яке зручне місце вашої форми.

Підготовчі роботи закінчені у Вас повинно вийти приблизно наступний малюнок.
На початку напишемо процедуру відкриття файлу. Щоб зробити це треба обробити натискання на першу кнопку - тобто обробити подію OnClick. Клацніть два рази на кнопці і перед вами відкриється редактор коду. Причому саме в тім місці, де і треба поміщати потрібні команди. Текст буде таким:
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Весь код потрібно помістити між Begin і End. Цей код дуже простий і виглядає приблизно так:
if OpenDialog1.Execute then
RichEdit1.Lines.LoadFromFile(OpenDialog1.Filename);
Але якщо запустити програму і при  запуску діалогу відкриття файлу вибрати не текстовий файл, то відбудеться помилка. Щоб її уникнути треба дозволити користувачу вибирати тільки текстові файли. Для цього скористаємося властивістю Filter компонента OpenDialog.
Для цього виберіть на формі компонентів OpenDialog, і в Інспекторі Об'єктів знайдіть властивість Filter. Тепер натисніть на кнопку з трьома крапками і перед вами відкриється діалогове вікно "Filter Editor" (Редактор фільтра) (Малюнок 3). У поле Filter Name (ім'я фільтра) можна писати що вам здумається, але те що характеризує тип файлів, для якого створюється фільтр. У нашому прикладі можна написати щось на зразок Текстові чи файли Тільки текст. А в поле Filter треба написати сам фільтр. Фільтр має формат:
Ім'я_файлу . Розширення
Якщо припустиме будь-яке ім'я, то ставиться зірочка, тоді для нашого редактора можна написати:
*.txt
Додамо ще фільтр для форматованих файлів (тобто Rich Text Format). Для цього в другому рядку в поле Filter Name напишіть Форматований текст, а в поле FIlter - *.rtf. Якщо вам захочеться додати у фільтр для будь-яких типів файлів, то в поле фільтр треба написати *.*

Рис.3. Вікно Filter Editor.
Тепер необхідно виконати такі ж дії з компонентом SaveDialog, щоб наш текстовий редактор зберігав файли в текстовому форматі.
В компонентів SaveDialog і OpenDialog є одна корисна властивість DefaultExt. Це розширення за замовчуванням. Бажано зробити його рівним *.txt в обох компонентів.
Тепер напишемо процедуру збереження файлу (обробки натискання на другу кнопку). Клацніть два рази на другій кнопці щоб одержати доступ до процедури обробки кліка на цю кнопку. І впишіть туди такий код:
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile(SaveDialog1.Filename);
У такий спосіб код процедури обробки натиснення по другій кнопці буде таким:
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
RichEdit1.Lines.SaveToFile(SaveDialog1.Filename);
end;
Частина 2.
Примітивний текстовий редактор готовий. Якщо ви помітили, що при відкритті великих файлів не з'являється смуга прокручування. Звичайно ж це недолік, тому ми зараз його виправимо. За відображення смуг прокручування компонента RichEdit відповідає властивість ScrollBars. Воно складне і ви можете вибрати з:
ssNone - смуги прокручування не відображаються
ssBoth - є як горизонтальна, так і вертикальна смуга
ssVertical - тільки вертикальна смуга
ssHorizontal - тільки горизонтальна смуга
Виберіть ssVertical - це забезпечить нам поява вертикальної смуги прокручування при редагуванні великих текстів.

Продовжимо вдосконалювати наш редактор і додамо можливість форматування тексту. Тобто зміна його розміру, стилю, кольору і т.д. Можна звичайно усі прописувати самостійно, але навіщо витрачати час і сили на це якщо є компонент FontDialog (знаходиться на вкладці Dialogs). Він реалізує стандартний діалог Windows настроювання шрифту. Нам потрібно буде його тільки викликати!
Значок компонента FontDialog.
Для цього установимо його на форму. До того ж нам знадобиться ще і кнопка, щоб викликати це діалогове вікно. Поставимо на форму і неї. Задайте її властивість Caption рівним Шрифт. А в оброблювачі події OnCLick написати:
if FontDialog1.Execute then
RichEdit1.SelAttributes.Assign(FontDialog1.Font);
Цей код дозволить за допомогою діалогового вікна настроювання шрифту змінять шрифт для кожного окремого абзацу, слова, чи символу всього тексту.
На рис. 4 приведений вид додатка після додавання третьої кнопки і компонента FontDialog.

Рис.4.
У наш проект потрібно додати ще дуже багато функцій, а тому і кнопок. Але ми вирішимо цю проблему за допомогою використання в нашій програмі системного і спливаючого меню.
Частина 3.
У наступній частині займемося розробкою системного меню нашої програми.
Для цього ми скористаємося компонентом MainMenu, що розташований на вкладці Standart палітри компонентів.
Значок компонента MainMenu.
Для того, щоб можна було редагувати пункти м