МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Національний Університет “Львівська політехніка”
EMBED PBrush
Створення текстового редактора у середовищі візуального програмування Delphi, з використанням компонентів головного меню, та діалогових вікон.
ІНСТРУКЦІЯ
до лабораторної роботи № 4
з курсу
“Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах” спеціальності 07.030505 “Прикладна лінгвістика”.
ЗАТВЕРДЖЕНО
На засіданні кафедри “Системи
Автоматизованого проектування”
Протокол №___ від _________
Львів - 2002
Створення текстового редактора у середовищі візуального програмування Delphi, з використанням компонентів головного меню, та діалогових вікон.
Інструкція до лабораторної роботи №4 з курсу “Застосування засобів об’єктно-орієнтованого програмування в лінгвістичних задачах” для студентів спеціальності 07.030505 “Прикладна лінгвістика”. Укл. Д.В. Корпильов. Львів НУЛП, 2002.
Укладач: Д.В. Корпильов, асистент.
Відповідальний за випуск С.П. Ткаченко, к.т.н., доцент
Рецензенти І.І. Мотика, к.т.н., доцент
Мета роботи: Вивчити класи і компоненти 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.
INCLUDEPICTURE "../../../../Documents%20and%20Settings/Korpy_DV/Application%20Data/Microsoft/Word/txt3_files/error(1).phtml" \* MERGEFORMATINET Малюнок 4.
У наш проект потрібно додати ще дуже багато функцій, а тому і кнопок. Але ми вирішимо цю проблему за допомогою використання в нашій програмі системного і спливаючого меню.
Частина 3.
У наступній частині займемося розробкою системного меню нашої програми.
Для цього ми скористаємося компонентом MainMenu, що розташований на вкладці Standart палітри компонентів.
Значок компонента MainMenu.
Для того, щоб можна було редагувати пункти меню варто скористатися вбудованим редактором меню. Виділите компонент MainMenu, а потім в Інспекторі Об'єктів знайдіть властивість Items і натисніть на кнопку з трьома крапками. Перед вами відкриється діалогове вікно, вид якого зображений на малюнку.
Відповідно поля Інспектора Об'єктів теж зміняться. Написавши у властивості Caption виділеного елемента ви тим самим змінюєте напис на ньому. Нам знадобиться така структура меню:
Натискаючи на елемент меню в редакторі меню, ви одержуєте доступ до його властивостей, а також доступ до наступного елементу, що створюється автоматично. Утім якщо ви його не задіяли, те в меню він не буде видний!
На малюнку приведений вид нашого меню. Його зовсім не складно буде створити!
Тепер треба створити оброблювачі подій для пунктів нашого меню. Перейдіть на форму, натисніть на меню файл і в меню, що розкрилося, виберіть перший пункт - "Відкрити". Перед вами відкриється редактор коду зі створеним шаблоном обробки події . Буде це виглядати приблизно так:
procedure TForm1.N2Click(Sender: TObject);
begin
end;
Тепер між begin і end треба написати код. Але отут є одна маленька хитрість: звичайно, можна було б скопіювати код з оброблювача події OnClick для першої кнопки, але це не зовсім зручно і не раціонально!!! Представте якщо у вас безліч кнопок і стільки ж пунктів меню. По-перше розмір програми збільшується вдвічі, а по-друге раптом вам знадобитися що-небудь змінити!!! Тоді прийдеться усе перебирати виправляючи код.
Тому ми зробимо усього лише посилання на обробку події для першої кнопки. Напишіть button1 і поставте крапку, коли з'явитися список можливих процедур, функцій і властивостей починайте набирати On. Тепер ви бачите події першої кнопки на який можна послатися. Нам звичайно ж потрібно OnClick. У цієї функції є один параметр: Source: TObject. Тобто треба вказати джерело події. Ми напишемо Self. Таким чином, посилання на оброблювач події натискання на першу кнопку буде виглядати так:
button1.OnClick(self);
Проробіть теж з пунктами меню "Шрифт" і "Зберегти".
Тепер напишемо обработчик натискання на пункт меню "Вихід". Для завершення роботи програми досить викликати метод Close головної форми. Оскільки форма в нас одна, вона і є головної. І ще, якщо властивість відноситься до форми, то в коді можна не писати ім'я форми. Тобто закрити нашу програму можна так:
Form1.Close;
чи так:
Close;
Якщо ви звернули увагу в меню виправлення знаходяться пункти Копіювати, Вставити і Вирізати. Реалізувати ці функції дуже просто:
RichEdit1.CopyToClipboard;
RichEdit1.PasteFromClipboard;
RichEdit1.CutToClipboard;
Ну і на остаток. У меню "?" є пункт "Про програму...". Зробимо, щоб при натисканні відкривалася нова форма з інформацією про програму й автора. Для цього в меню File основного меню Дельфі виберіть New->Other, а в діалоговому вікні, що відкрилося, на закладці Forms виберіть AboutBox і натисніть Ok. Перед вами з'явитися заготівля форми "Про програму...".
В оброблювач події кнопки з написом Ok (OKButton) напишіть тільки одне слово: Close;
Тепер перейдіть до нашої основної форми, створіть обробника події OnClick для пункту меню Про програму. Туди треба написати:
AboutBox.ShowModal;
Тепер запустіть програму. Перед вами з'явиться повідомлення про те, що форма AboutBox не оголошена в секції uses. Відповісти на запит позитивно.
Питання для самоперевірки
Компонент MainMenu?
Основні інструменти Delphi.
Як створити діалове вікно AboutBox?
Як створити маску зчитування файлів (наприклад *.txt) Open?
Як створити маску запису файлів (наприклад *.txt, *.doc) Save?
Зміст звіту
Титульна сторінка.
Мета роботи.
Теоретичні відомості.
Приклад створеної програми.
Вихідні результати.
Висновок.