20. Використати форму з панеллю інструментів, створену під час виконання попередньої лабораторної роботи.
21. Для створення панелі керування файлом використати контейнерний компонент GroupBox, прикріпивши його до нижньої частини форми (властивості Align надати значення alButton). Властивості Caption надати значення “Збереження та друк …”. Розмір контейнеру слід встановити заздалегідь більшим, ніж необхідно для зручності розташування в ньому компонентів.
22. Додати на панель GroupBoxкомпоненти, наведені в табл.6.
Таблиця 6. Перелік компонентів на панелі GroupBox
Тип компоненту
Назва (Name)
Розташування(Left, Top)
Розміри(Width, Height)
Надпис(Caption)
Label
Label3
8,17
53,13
Формат:
Label
Label4
8,38
38,13
Файл:
RadioButton
rbRTF
72,16
137,17
Rich Text Format (*.rtf)
RadioButton
rbTextOnly
208,16
121,17
Тільки текст (*.txt)
Edit
eFileName
56,39
473,19
SpeedButton
sbLoad
16,64
105,21
Завантажити
SpeedButton
sbSave
128,64
105,21
Зберегти
SpeedButton
sbPrint
240,64
105,21
Надрукувати
23. Встановити вертикальний розмір панелі (властивість Height): 90.
24. У вільну область форми додати компонент RichEdit. Змінити його назву (властивість Name) на reEditor. Цей компонент повинен займати всю вільну область, яка залишилася від панелі інструментів та панелі керування файлом. Тому слід присвоїти властивості Align компонента reEditor значення alClient.
Дружній інтерфейс
25. На формі розташовано досить багато елементів керування. Призначення деяких з них може бути незрозумілим для користувача. Тому доцільно використовувати швидкі підказки, які з’являються під час наведення покажчика миші на компонент.
26. Щоб показати, яким самим чином слід працювати з компонентом, доцільно встановити для кожного з них спеціальний курсор миші. Рядки введення автоматично підтримують зміну покажчика миші. Тому зміна курсору для них не потрібна.
27. Всім елементам керування, які мають на увазі натискання кнопки миші (кнопкам SpeedButton,спискам вибору ComboBoxта ColorBox, допоміжним компонентам UpDown, залежним перемикачам RadioButton) слід встановити курсор (властивість Cursor) crHandPoint.
28. Надати властивостям Hint для компонентів значення, наведені в табл.7. На цьому візуальне проектування практично завершене. В подальшому візуальний добудовник буде застосовуватися лише для призначення обробників подіям інтерфейсних елементів, розташованих на формі.
Таблиця 7. Перелік компонентів, для яких слід встановити підказки
Компонент
Hint
cbFontSize
Розмір шрифту, який слід встановити для виділення, в пунктах (1/72 дюйми)
sbBold
Застосувати до шрифту виділення атрибут "Напівтовстий"
sbItalic
Застосувати до шрифту виділення атрибут "Похилий "
sbUnderLined
Застосувати до шрифту виділення атрибут "Підкреслений "
sbStrikeOut
Застосувати до шрифту виділення атрибут "Перекреслений "
clbColor
Вибір кольору для шрифту виділення
sbLeftAlign
Встановити для поточного абзацу вирівнювання по лівому краю
sbCenterAlign
Встановити для поточного абзацу вирівнювання по центру
sbRightAlign
Встановити для поточного абзацу вирівнювання по правому краю
sbNumbering
Зробити поточний абзац елементом списку
sbUndo
Скасувати останні зміни
sbRedo
Скасувати операцію Undo
eLeftIdent
Відступ поточного абзацу відносно його першого рядку
eRightIdent
Відступ поточного абзацу від правої границі
eFirstIdent
Відступ першого рядку абзацу від лівої границі
rbRTF
Документ зберігається та читається в форматі RTF
rbTextOnly
Документ зберігається та читається в звичайному текстовому форматі
eFileName
Назва файлу для читання та запису з зазначенням повного шляху
sbLoad
Читати документ з диску
sbSave
Зберегти документ на диску
sbPrint
Надрукувати документ на принтер, встановлений за замовчуванням
Наповнення функціональністю: Текстовий редактор повинен виконувати наступні дії:
a. Відкриття файлу виконується натисканням кнопки з надписом "Завантажити" панелі керування файлом. При цьому використовується ім’я файлу, зазначене в рядку введення з надписом "Файл:".
b. Переміщення текстового курсору в середині редактора RichEdit за допомогою миші або клавіш зі стрілками клавіатури. Оскільки при переміщенні курсор потрапляє в фрагменти тексту, які використовують різні настройки форматування, то програма повинна реагувати на зміни форматування поточного абзацу та виділення зміню стану інтерфейсних компонентів. Наприклад, при потраплянні курсору в текст, який має напівтовсте накреслення, кнопка "В" повинна прийняти натиснутий стан.
c. Зміна стану елементів керування з метою зміни форматування поточного абзацу або виділення.
d. Збереження файлу натисканням кнопки з надписом "Зберегти". При цьому, так само як і під час читання документу з файлу, використовується ім’я файлу, зазначене в рядку введення з надписом "Файл:".
29. Для забезпечення коректності читання документу з файлу слід використовувати стан залежних перемикачів на панелі керування файлом, щоби правильно визначити тип документу, з яким збирається працювати користувач. Тип документу заноситься у властивість PlainText логічного типу компоненту RichEdit. Після цього викликається метод LoadFromFile з зазначенням імені файлу, яке ввів користувач в рядку редагування. Обробник події OnClick має наступний текст:
31. Форматування поточного абзацу або виділення в документі, що редагується, можна визначити з використанням властивостей компоненту RichEdit. Відреагувати на зміну самого абзацу або виділення можна, реалізувавши обробник події OnSelectionChange. Він викликається кожний раз, коли текстовий курсор переміщується в середині документу і має наступний текст:
{Контроль форматування в поточному абзаці або виділенні}
Слід звернути увагу на те, що характеристики форматування, які аналізуються в даному обробнику, представлені двома групами. В першій групі – характеристикам форматування абзацу – належать такі параметри, як вирівнювання та відступи. До другої – характеристикам форматування виділення – належать параметри шрифту та кольору тексту. Відповідно, для аналізу параметрів різних груп використовуються різні структури компоненту RichEdit: Paragraph та SelAttributes.
32. Для зміни форматування виділення або абзацу слід реалізувати обробники елементів керування, в яких встановлюються відповідні атрибути тексту за допомогою властивостей SelAttributesта Paragraph компоненту reEditor. Наприклад, для установки атрибуту накреслення "Напівтовстий" поточного виділення слід реалізувати обробник події OnClickкомпоненту sbBold.Він має наступний текст:
{Установка атрибуту "Напівтовстий"}
procedure TForm1.sbBoldClick(Sender: TObject);
begin
if sbBold.Down then reEditor.SelAttributes.Style:=reEditor.SelAttributes.Style+[fsBold]
Аналогічним чином слід реалізувати обробники подій OnClickдля компонентів sbItalic, sbUnderlined, sbStrikeOut.
33. Вирівнювання тексту здійснюється обробниками подій компонентів sbLeftAlign, sbCenterAlign, sbRightAlig. Наприклад, для компонентів sbLeftAlign текст обробника такої події наступний:
procedure TForm1.sbLeftAlignClick(Sender: TObject); {Вирівнювання по лівому краю}
begin
if sbLeftAlign.Down then reEditor.Paragraph.Alignment:=taLeftJustify;
end;
34. Призначення кольору тексту для виділення або абзацу можна здійснити з використанням обробника події OnChangeкомпоненту clbColor, який має текст:
{Вибір кольору користувачем - установка відповідного атрибуту поточному виділенню}
procedure TForm1.clbColorChange(Sender: TObject);
begin
reEditor.SelAttributes.Color:=clbColor.Selected;
end;
35. Нумерація рядків виділення здійснюється обробником події OnClick компоненту sbNumbering,який має наступний текст:
37. Встановлення відступів реалізується обробниками події OnChangeкомпонентів eLeftIdent, eRightIdentта eFirstIdent. Наприклад, для компоненту eLeftIdentобробник події має текст: