Текстовий редактор Мета Вивчення компонентів Panel, Memo, OpenDialog, SaveDialog, MainMenu,

Короткі теоретичні відомості.

У компоненті Memo формат (шрифт, його атрибути, вирівнювання) однаковий для тексту і визначається властивістю Font. Якщо ви збережете у файлі текст, введений або відредагований користувачем, то буде створено текстовий файл, який містить лише символи та не містить елементів форматування. При наступному читанні цього файлу Memo формат буде визначатися поточним станом властивості Font компонента Memo, а не тим, в якому форматі раніше вводився текст.

Властивості Alignment та WordWrap визначають вирівнювання тексту та допустимість перенесення довгих рядків. Встановлення властивості ReadOnly у true задає текст лише для читання.

Основна властивість Memo - Lines, що містить текст вікна у вигляді списку рядків і тип TStrings. Початкове значення тексту можна встановити в процесі проектування, натиснувши кнопку з трьома крапками біля властивості Lines у вікні Інспектора Об'єктів.

Під час виконання програми можна заносити текст у вікно редагування за допомогою методів властивості Lines типу TStrings. Доступ до окремого рядка тексту можна отримати за допомогою властивості Strings[Index: Integer]. Індекси, як і всюди Delphi, починаються з 0. Отже Memo1.Lines.Strings[0] — це текст першого рядка. Властивість лише для читання Count вказує кількість рядків у тексті. Для очищення тексту у вікні потрібно виконати процедуру Clear. Цей метод відноситься до вікна, а не до його властивості Lines.

Для занесення нового рядка до кінця тексту вікна редагування можна скористатися методами Add або Append властивості Lines. Для завантаження тексту з файлу використовується метод LoadFromFile. Збереження тексту у фалі здійснюється методом SaveToFile.

У Delphi є два компоненти, що представляють меню: MainMenu - головне меню, таPopupMenu – спливаюче меню. Обидва компоненти розташовані на сторінці Standard. Ці компоненти мають багато спільного. Це невізуальні компоненти, тобто. місце його розміщення на формі в процесі проектування не має жодного значення для користувача - він все одно побачить не сам компонент, а лише згенероване ним меню.

Основна властивість компонента – Items. Його заповнення здійснюється за допомогою Конструктора Меню, що викликається подвійним клацанням на компоненті або натисканням кнопки з трьома крапками поруч із властивістю Items у вікні Інспектора Об'єктів.

Контекстне меню (PopUpMenu) прив'язане до конкретних компонентів. Воно спливає, якщо під час, коли цей компонент у фокусі, користувач клацне правою кнопкою миші. Віконні компоненти: панелі, вікна редагування, а також мітки та ін. мають властивість PopupMenu, яка за умовчанням порожня, але куди можна помістити ім'я того компонента PopupMenu, з яким буде пов'язаний цей компонент.

У додатках часто доводиться виконувати стандартні дії: відкривати та зберігати файли, задавати атрибути шрифтів, вибирати кольори палітри, проводити контекстний пошук та заміну тощо. Розробники Delphi подбали про те, щоб увімкнути в бібліотеку прості для використання компоненти, що реалізують відповідні діалогові вікна. Вони розміщені на сторінці Dialogs.

Властивість InitialDir визначає початковий каталог, який буде відкрито у момент початку роботи користувача з діалогом. Якщо значення цієї властивості не задано, відкривається поточний каталог або той, який був відкритий при останньому зверненні користувача до відповідного діалогу в процесі виконання цієї програми.

Властивість DefaultExt визначає значення розширення файлу за промовчанням. Якщо значення цієї властивості не встановлено, користувачмає вказати у діалозі повне ім'я файлу з розширенням. Якщо ж встановити значення DefaultExt, то користувач може писати в діалозі ім'я без розширення. І тут буде прийнято задане розширення. Властивість Title дозволяє задати заголовок діалогового вікна. Властивість Options визначає умови вибору файлу.

Кнопки SpeedButton мають можливість відображення піктограм і можуть використовуватися як звичайні кнопки, що управляють, або як кнопки з фіксацією натиснутого стану. Зображення на кнопці задається властивістю Glyph.

Особливістю кнопок SpeedButton є властивості GroupIndex (індекс групи), AllowAllUp (дозвіл відтисненого стану всіх кнопок групи) та Down (початковий стан - натиснутий). Якщо GroupIndex = 0, то кнопка поводиться так само, як Button та BitBtn. При натисканні користувачем кнопки вона занурюється, а при відпусканні повертається до нормального стану. У цьому випадку властивості AllowAllUp та Down не впливають на поведінку кнопки.

Якщо Grouplndex > 0 і AllowAllUp = true, то кнопка при натисканні користувача на ній занурюється і залишається в натиснутому стані. При повторному натисканні користувача на кнопці вона звільняється і переходить у нормальний стан (саме для того, щоб звільнення кнопки відбулося, необхідно задати AllowAllUp = true). Якщо властивість Down під час проектування встановлено рівним true, то вихідний стан кнопки натиснутий.

Якщо є кілька кнопок, що мають однакове ненульове значення GroupIndex, то вони утворюють групу взаємопов'язаних кнопок, з яких натиснутою може бути лише одна. Якщо одна кнопка знаходиться в натиснутому стані та користувач клацає на інший, то перша кнопка звільняється, а друга фіксується в натиснутому стані.

Стан кнопки під час виконання можна визначити зазначення властивості Down: якщо значення дорівнює true, то кнопка натиснута. Під час події OnClick значення Down вже дорівнює тому стану, який прийме кнопка в результаті натискання на ній.

1. Помістити на форму компонент Panel, надати властивості Align значення alTop. Видалити рядок із властивості Caption.

2. Помістити на Panel чотири компоненти Button (кнопка) і привласнити їх властивості Caption відповідно значення &Open, &Save, Save &As..., E&xit. Визначити властивість Font для панелі з кнопок як жирний

3. Змінити заголовок форми (властивість Caption) – наприклад, My Editor

4. Помістити на форму компонент Memo та встановити його властивості наступним чином:

Align – alClient, Scroll bar – ssBoth, Lines (прибрати текст із властивості, виконавши клацання на властивості Lines, а потім на кнопці з трьома точками).

5. Помістити на форму компонент OpenDialog, який знаходиться на сторінці Dialog і надати його властивостям значення: