Урок 6 - найпростіший текстовий редактор
Викладемо на форму TMemo. і TMainMenu. Встановимо властивість Align в alClient для того, щоб компонент розтягнувся на весь вільний простір форми. Встановимо властивість ScrollBars в ssBoth. а WordWrap в False. І приберемо введений в Memo1 текст за замовчуванням, видаливши цей текст з властивості Lines.
Щелкнем по MainMenu1 два рази - з'явиться вікно. Тепер створимо меню "Файл". У ньому елементи: "Створити", "Відкрити", "Зберегти", "Зберегти як.", Розділову смужку (символ "-") і "Вихід"
Встановимо гарячі клавіші як показано на рис 1. Швидкий доступ встановлюються у властивості ShortCut
Мал. 1 - Меню "Файл"
Аналогічно створюємо меню "Правка":
Мал. 2 - Меню "Правка"
Аналогічно створюємо меню "Формат":
Мал. 3 - Меню "Формат"

Мал. 4 - Створення події onClick
Зверніть увагу, що Close і Form1.Close це одне і теж. Оскільки форма є батьком то ім'я батька можна опускати.
Тепер після вибору меню "Вихід" програма закриється.
Реалізація перенесення за словами
У меню "Формат" виберемо "Перенесення за словами":
Розберемося що ми робимо: якщо вже встановлений режим переносу по словах то ми прибираємо його і встановлюємо галочку на N14. І навпаки.
Реалізація функції "Зберегти як."
Нам знадобиться діалогове вікно збереження документа. Скористаємося компонентом TSaveDialog на вкладці Dialogs. Викладемо його на форму. Встановимо фільтр, тобто ті файли які буде цей діалог відображати. Нам потрібно * .txt, тобто текстові документи. Щоб це зробити потрібно знайти властивість Filter і натиснути на кнопку. З'явиться вікно. Заповніть його як показано на рис. 5.

Тепер змініть властивість DefaultExt на * .txt. Це розширення яке буде додаватися до файлу.
Створимо процедуру збереження файлу. Напишемо цей код відразу після.
Далі вибераем в меню "Файл" -> "Зберегти як.". Там пишемо:
Що ж тут робиться і як все працює? Дуже просто! Коли користувач вибераем пункт меню "Зберегти як." То викликається процедура SaveAs, яку ми вже написали. Тепер розберемо процедуру SaveAs. Коли викликається функція Execute у TSaveDialog то з'являється діалог збереження і якщо користувач натисне кнопку зберегти, то функція Execute поверне True інакше False. Якщо повернеться True то буде виконана процедура SaveToFile. тобто збереження файлу. У SaveDialog1.FileName зберігається шлях до файлу в який користувач вказує в діалозі.
Я ввів глобальну змінну FileWork. У ній буде зберігатися шлях до файлу з яким працює користувач. Це потрібно для реалізації функції "Файл" -> "Зберегти". Не забудьте її оголосити в розділі Var перед implementation. Повинно бути на зразок цього:
Реалізація функції "Зберегти"
Вибираємо "Файл" -> "Зберегти". І пишемо:
Якщо користувач вже зберігав файл то в FileWork буде щось зберігатися, в будь-якому разі не "порожнеча". Якщо зберігається '', тобто нічого не зберігається то викликаємо SaveAs. Вона як раз і покаже діалог збереження. Якщо змінна FileWork не порожня, то зберігаємо файл тим шляхом який вказаний в FileWork.
Реалізація функції "Відкрити"
Крім TSaveDialog існує TOpenDialog. І якщо Ви хоч трохи знаєте англійську, то вже зрозуміли б, що цей компонент призначений для відкриття файлів.
Викладіть цей компонент на форму і властивість Filter змініть так само як у SaveDialog1.
Взагалі компоненти TSaveDialog і TOpenDialog дуже схожі. Діалог відкриття викликається так само - функцією Execute. яка повертає True якщо користувач бажає відкрити файл.
Тиснемо "Файл" -> "Відкрити". пишемо:
Запускаємо програму F9 і пробуємо. Якщо все робили правильно, то все повинно працювати.
Реалізація функції "Створити"
Тиснемо "Файл" -> "Створити". пишемо:
Тут все зрозуміло і без пояснень. Але все ж поясню: перший рядок очищає FileWork, тобто програма не знатиме про те що ми з якимось файлом працювали. Другий рядок очищає Memo1.
Реалізація функцій в меню "Правка"
По кліку на меню "Вирізати":
По кліку на меню "Копіювати":
По кліку на меню "Вставити":
Реалізація функцій в меню "Шрифт."
Нам знадобиться ще один компонент - TFontDialog. Функція для виклику така ж як у TOpenDialog і TSaveDialog - Execute. Створюємо подія при натисканні по меню "Шрифт.".
Якщо користувач застосував зміни, то властивості Font у Memo1 присвоюємо вибрані користувачем налаштування шрифту. Вони зберігаються у властивості Font у FontDialog1.
Завершуємо.
Основна частина програми написана. Залишилось зовсім небагато. Нам потрібно зробити активною форму, щоб в інспекторові об'єктів з'явилися її властивості, але через Memo1 який розтягнутий на всю форму не виходить це зробити. Є кілька варіантів. Можна просто виділити форму в Object TreeView. А можна виділити Memo1, потім затиснути клавішу Shift і клацнути по Memo1 ще раз.
Отже, Ви активували форму. Змінимо заголовок вікна: у властивості Caption напишіть "Блокнот". Властивість Position змініть на poScreenCenter для того, щоб форма з'являлася по центру екрана.
Ну і наостанок додамо модуль XPMan в список модулів (секція uses). Виглядало це повинно приблизно так:
Завантажити исходник програми
Урок 7 - Вивчаємо компоненти TImage, TGroupBox, TRadioGroup