Крок за кроком: Створення текстового редактора в Lazarus

04.03.2026 0 By AdminA

Вступ

У цій статті ми поетапно створимо простий текстовий редактор у середовищі 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: ви опануєте роботу з формами, меню, діалогами та файлами. Далі можна розширювати редактор: підсвітка синтаксису, автозбереження, робота з вкладками і налаштуваннями користувача. Експериментуйте та адаптуйте функціонал під власні потреби.

Comments

comments