Крок за кроком: Створення текстового редактора в Lazarus
04.03.2026Вступ
У цій статті ми поетапно створимо простий текстовий редактор у середовищі Lazarus. Проєкт підходить як навчальний приклад для вивчення основ роботи з компонентами VCL/LCL, обробки подій, діалогів відкриття та збереження файлів, а також покажемо кілька корисних технік для покращення користувацького досвіду.
Що потрібно
- Lazarus IDE (останню стабільну версію).
- Базові знання Object Pascal (Pascal/Delphi-подібний синтаксис).
- Розуміння структури форм та подій у LCL.
Проєкт: основні компоненти
Створимо новий проект типу “Application” і на головну форму додамо такі компоненти:
- TMemo — основна область редагування тексту.
- TMainMenu — меню з пунктами Файл, Правка, Допомога.
- TOpenDialog та TSaveDialog — стандартні діалоги для роботи з файлами.
- TFontDialog — для зміни шрифту текстового вмісту.
- TStatusBar — відображення стану (наприклад, шлях файлу або кількість рядків).
Розміщення елементів
TMemo встановіть з Align = alClient, щоб він займав весь простір форми. Меню та статус-бар розміщуються стандартно. Зробіть Menu->File із пунктами New, Open, Save, Save As, Exit; Menu->Edit із Cut, Copy, Paste, Select All; Menu->Format із пунктом Font.
Реалізація логіки (основні обробники)
Нижче — приклади обробників подій у Pascal (Object Pascal) для часто вживаних функцій.
procedure TForm1\FileNewClick(Sender: TObject);
begin
if Memo1.Modified then
if MessageDlg('Зберегти зміни?', mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrYes then
FileSaveClick(Sender);
Memo1.Clear;
CurrentFile := '';
UpdateStatus;
end;
procedure TForm1\FileOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
CurrentFile := OpenDialog1.FileName;
Memo1.Modified := False;
UpdateStatus;
end;
end;
procedure TForm1\FileSaveClick(Sender: TObject);
begin
if CurrentFile = '' then
FileSaveAsClick(Sender)
else
begin
Memo1.Lines.SaveToFile(CurrentFile);
Memo1.Modified := False;
UpdateStatus;
end;
end;
procedure TForm1:FileSaveAsClick(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
CurrentFile := SaveDialog1.FileName;
Memo1.Lines.SaveToFile(CurrentFile);
Memo1.Modified := False;
UpdateStatus;
end;
end;
Не забудьте оголосити змінну CurrentFile в секції public або private форми:
private
CurrentFile: string;
procedure UpdateStatus;
Функція UpdateStatus
Ця допоміжна процедура оновлює статус-бар, наприклад шлях поточного файлу і стан модифікації.
procedure TForm1:UpdateStatus;
begin
if CurrentFile = '' then
StatusBar1.Panels[0].Text := 'Незбережений документ'
else
StatusBar1.Panels[0].Text := CurrentFile;
if Memo1.Modified then
StatusBar1.Panels[1].Text := 'Зміни: так'
else
StatusBar1.Panels[1].Text := 'Зміни: ні';
end;
Додаткові можливості
- Пошук і заміна: використайте TFindDialog або реалізуйте власний пошук у Memo1.Lines.
- Підрахунок рядків і символів: Memo1.Lines.Count і довжина рядків.
- Підтримка кодувань: для простої програми достатньо стандартних методів, але для UTF-8 можна використовувати відповідні параметри при збереженні.
- Підтримка вкладок: створіть TPageControl і кілька TMemo на вкладках для мульти-документної роботи.
Тестування і поширені помилки
Тестуйте відкриття великих файлів, перевірте коректну роботу з потоками (UI-блокування при довгих операціях). Типові помилки:
- Забуте встановлення Memo1.Modified := False після збереження.
- Невраховані винятки при читанні/записі файлів — обгорніть виклики LoadFromFile/SaveToFile у блоки try..except.
- Проблеми з кодуванням (особливо при кросплатформенності) — перевіряйте кодування і, за потреби, використовуйте потоки з явним кодуванням.
Збірка та розповсюдження
Lazarus дозволяє зібрати програму під різні платформи (Windows, Linux, macOS). Для простого застосунку з TMemo потрібно лише перекомпілювати проект під потрібну ціль. При розповсюдженні включіть усі необхідні бібліотеки і перевірте ліцензійні нюанси компонентів.
Висновок
Цей проект — відмінна вправа для тих, хто починає працювати з Lazarus: ви опануєте роботу з формами, меню, діалогами та файлами. Далі можна розширювати редактор: підсвітка синтаксису, автозбереження, робота з вкладками і налаштуваннями користувача. Експериментуйте та адаптуйте функціонал під власні потреби.