6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
text_UTF8:=UTF8Copy(UTF8Decode(Memo1.Text),
Memo1.SelStart + 1 + Memo1.SelLength,
Length(UTF8Decode(Memo1.Text)) -
Memo1.SelStart - Memo1.SelLength);
Функцию UTF8Copy мы рассматривали в 3.3.1.4. Чтобы выделить в
Memo1 следующую найденную подстроку оператор
Memo1.SelStart:= k - 1;
надо заменить на
Memo1.SelStart:=Memo1.SelStart +
Memo1.SelLength + k - 1;
Теперь программа находит все вхождения заданной подстроки в Memo1.
Для нахождения следующего вхождения нужно нажимать на кнопку "Найти".
Нажимать на клавишу Enter нельзя, так как фокус находится в Memo1. Чтобы продолжить поиск нажатием Enter надо клавишей Tab или мышью устано-
вить фокус на Edit1. Появляется некоторое неудобство в работе. Если же мы в программе сразу после нахождения подстроки и его выделения передадим фо-
кус Edit1, то с найденного фрагмента выделение будет снято. Что тоже нехо-
рошо.
Можно добавить обработчик Memo1KeyPress, чтобы только при нажа-
тии Enter передать фокус Edit1. Итак, код улучшенной программы (предва-
рительно установите в Memo1 свойство WantReturns= false):
unit Unit1;
{$mode objfpc}{$H+}
interface