ий у редакторі. Якщо користувач клацає на кнопці Yes (Так), функція спочатку ініціює дію Зберегти для збереження документа і повертає True, щоб повідомити про те, що тепер документ можна закрити. Якщо користувач клацає на кнопці No (Ні), функція повертає True, оскільки користувач бажає скасувати зміни. Нарешті, якщо користувач клацає на кнопці Cancel (Скасувати), функція повертає False, щоб повідомити про те, що не можна ні закривати додаток, ні замінювати активний документ іншим.
Тепер необхідно викликати функцію CloseCurrentDocument в действіяхНовий і Відкрити, щоб запитати користувача про подальші дії, якщо в текст були внесені зміни.
Малюнок 16. Код програми
Останнє, що потрібно робити - це написати обробник для собитіяOnCloseQuery форми.
Ця подія виникає тоді, коли користувач намагається закрити форму. Параметр CanClose події OnCloseQuery дозволяє визначити, чи може форма бути закрита чи ні.
Обробник події OnCloseQuery насправді дуже простий. Ми повинні всього лише привласнити результат виконання функції CloseCurrentDocumentпараметру CanClose. Таким чином, якщо функція CloseCurrentDocumentвернет значення True, користувач зможе закрити програму. Закриття форми буде зупинено тільки лише в тому випадку, якщо текст в редакторі буде змінений, а користувач клацне на кнопці Cancel (Скасувати) у діалоговому вікні MessageDlg.
Малюнок 17. Код програми
Меню Edit
Всі команди меню Edit будемо створювати вручну.
Скасування
Для почали створимо дію Скасувати:
Створіть нову дію.
У поле властивості Caption введіть Скасувати.
У поле властивості Hint введіть Скасувати останню дію.
Привласніть дії ім'я UndoAction.
Призначте властивості Shortcut комбінацію Сtrl + Z.
Щоб скасувати дії в редакторі, ви повинні викликати метод Undo. Щоб дізнатися, чи можете ви скасувати будь-яку дію, необхідно викликати метод CanUndo. Але найкраще викликати метод CanUndo в собитііOnUpdate дії, щоб заборонити дію у разі неможливості виконання скасування.
Малюнок 18. Код програми
Призначте дію UndoAction неіменованого пункту в меню Правка.
Вирізання і копіювання в буфер обміну
Дії Вирізати і Копіювати подібні один одному. ДействіеКопіровать копіює виділений текст в буфер обміну, а дія Вирізати спочатку копіює виділений текст в буфер обміну, а потім видаляє текст з редактора.
Оскільки дії Вирізати і Копіювати мають один обробник події OnUpdate, давайте спочатку створимо обидві дії, а потім напишемо необхідні обробники подій.
Щоб створити дію Вирізати, виконайте наступні кроки:
Створіть нову дію в редакторі Action List.
У поле властивості Caption нового дії введіть Вирізати.
У поле властивості Hint введіть Вирізати виділений фрагмент в буфер обміну. ??
Привласніть дії ім'я CutAction.
Призначте властивості Shortcut комбінацію Ctrl + X.
Щоб створити дію Копіювати, виконайте перераховані нижче кроки:
Створіть нову дію в редакторі Action List.
У поле властивості Caption нового дії введіть Копіювати.
У поле властивості Hint введіть Копіювати виділений фрагмент в буфер обміну. ??
Привласніть дії ім'я CopyAction.
Призначте властивості Shortcut комбінацію Ctrl + C.
Реалізувати обидва обробника події OnExecute не складає особливих труднощів. Щоб скопіювати текст з редактора в буфер обміну, ви повинні викликати метод CopyToClipboard. Щоб вирізати текст в буфер обміну, викличте метод CutToClipboard редактора.
Малюнок 19. Код програми
Код в обробнику події OnUpdate повинен забороняти дію, якщо в редакторі НЕ буде виділений текст. Для визначення, скільки символів було виділено користувачем, можна використовувати властивість SelLength редактора. Якщо значення цієї властивості буде дорівнює 0, це означає, що в редакторі немає виділених символів, і дія має бути заборонено.
Тепер запишемо наступний обробник події OnUpdate для дії вирізати і призначимо його події OnUpdate дії Копіювати:
Малюнок 20. Код програми
Призначте дії CutAction і CopyAction неіменованого пунктам у менюПравка.