нати приведення до типу з тієї причини, що це дозволить повторно використовувати цей метод у події OnFind компонента TReplaceDialog.
У наступних двох рядках створюється тимчасова копія всього документа і віддаляється та частина документа, в якій користувач вже виконав пошук. Якщо ми не видалимо цю частину, функція Pos, використовувана для виконання пошуку, завжди буде повертати перший примірник рядка пошуку.
Якщо функція Pos знайде екземпляр рядка пошуку, ми повинні будемо зберегти позицію знайденого екземпляра у змінній FLastSearch, а потім виділити рядок в редакторі. Для виділення рядка в редакторі буде потрібно змінити властивості SelStart і SelLength. Властивість SelStartпоказивает позицію курсора, а властивість SelLength визначає кількість виділених символів.
Нарешті, щоб показати виділення, ми повинні викликати метод SetFocus для передачі редактору фокуса.
Призначте дію FindAction неіменованого пункту в меню Правка.
Заміна тексту
У плані завершення роботи над меню Правка необхідно створити действіеЗаменіть, яке дозволить проводити пошук і заміну рядка. Щоб реалізувати дію Замінити, буде потрібно виконати наступні кроки:
Додати у вікно Designer Surface компонент TReplaceDialog. Створити дія, яка буде відображати діалогове окноЗаменіть.
Реалізувати обробники для подій OnFind і OnReplace компонентаTReplaceDialog.
Для створення дії Замінити потрібно виконати перераховані нижче кроки:
У поле властивості Caption нового дії введіть Замінити .... У полі властивості Hint введіть Замінити знайдений текст іншим текстом. Привласніть дії ім'я ReplaceAction. Призначте властивості Shortcut комбінацію Ctrl + H.
Привласніть властивості Tag значення 1 або будь-яке інше значення, відмінне від 0. Призначте обробник події OnExecute дії Знайти собитіюOnExecute.
Ми повинні змінити властивість Tag з метою повторного використання обробника події OnExecute дії Знайти. Після того як ви зміните властивість Tag дії Замінити, ви можете змінити обробник собитіяOnExecute дії Знайти, щоб відобразити обидва діалогових вікна:
Малюнок 26. Код програми
Нарешті, ми повинні реалізувати обробники для події OnFind. яке відбувається при клацанні користувачем на кнопці Знайти, і собитіяOnReplace, яке відбувається при клацанні користувачем на кнопкахЗаменіть або Замінити все.
Насправді, писати обробник для події OnFind не буде потрібно, оскільки можна скористатися існуючим обробником собитіяOnFind компонента TFindDialog. Цей обробник можна використовувати з тієї причини, що спочатку було виконано приведення параметра Sender до компоненту TFindDialog, а також тому, що TReplaceDialog походить від класу TFindDialog.
У обробнику події OnReplace необхідно перевірити, чи існує виділений текст в редакторі (SelText lt; gt; ), і якщо він існує, то замінити його рядком з властивості ReplасеТехt.
Малюнок 27. Код програми
Меню Формат у нашому прикладі додатка є найбільш простим меню. Воно складається тільки з двох команд - Перенесення за словами і Шрифт.
Малюнок 28.Вспливающее вікно
Команда Перенесення за словами дозволяє переносити текст по правому краю. Якщо встановити галочку навпроти цієї команди, то ви зможете прокручувати вміст редактора по вертикалі. Якщо галочка не буде встановлена ??в, ви повинні будете відображати обидві лінійки прокрутки, оскільки довгі рядки не будуть переноситися по правому краю.
Щоб створити дію Перенесення за словами, виконайте наступні кроки:
Створіть нове дію і надайте його властивості AutoCheck значеніеTrue, щоб команда автоматично приймала стан Checked.
У поле властивості Caption введіть Перенесення за словами.
Привласніть властивості Checked значення True, оскільки свойствоПеренос за словами редактора має значення True за замовчуванням.
Привласніть дії ім'я WordWrapAction.
Малюнок 29. Код програми
Призначте дію WordWrapAction неіменованого пункту в менюФормат.
Щоб створити команду Формат - Шрифт, спочатку додайте у вікно Designer Surface компонент TFontDialog, а потім створіть нову дію. У полеCaption нового дії введіть Шрифт, надайте дії імяFontAction, a потім напишіть наступний код в обробнику собитіяOnExecute:
Малюнок 30. Код програми
Призначте дію FontActi...