Примеры программ Delphi (Lazarus).

Объект Memo - поиск в тексте




Для поиска слова или строки в тексте, написанном в объекте Memo, следует создать поисковую процедуру.
Как создавать блокнот мы проходили на предыдущих уроках. Можно использовать готовый блокнот из урока или создать небольшой проект, как показано на рисунке:



Далее, следует удалить все заголовки компонентов и кнопке присвоить заголовок "Найти". Используя свойство Lines объекта Memo можно вставить какой нибудь тестовый текст в блокнот:



Изготовив, таким образом, интерфейс программы следует, двойным щелчком на кнопке "Найти", создать обработчик события:
// Процедура поиска в тексте
procedure TForm1.Button1Click(Sender: TObject);
begin

end;
Прежде чем заполнять процедуру следует добавить в раздел Uses модуль StrUtils, который предназначен для работы с текстом и строками. Затем, объявить глобальную переменную, например, с именем poz и типом integer. Эта переменная будет хранить в себе позицию курсора в тексте. И, наконец, следует заполнить процедуру поиска:

var //Глобальные переменные
Form1: TForm1;
poz: integer;

implementation

{$R *.dfm}
// Процедура поиска в тексте
procedure TForm1.Button1Click(Sender: TObject);
var
find: string; // строка которую нужно найти в тексте
s: string; // в эту строку будет копироваться текст из Memo
begin
{для того чтобы регистр символов не влиял на поиск слова, преобразуем текст и поисковое слово к нижнему регистру.
Если предполагается поиск с учётом регистра, то функцию AnsiLowerCase можно не использовать}
find:= AnsiLowerCase(edit1.text);
s:= AnsiLowerCase(memo1.Text);
{Производим поиск совпадения слова в тексте с позиции poz.
Позиция определяется положением курсора в тексте}
poz:= posex(find,s,poz);
// Если совпадение есть, то poz <> 0
if poz<>0 then
begin
memo1.SetFocus;
memo1.SelStart:= poz-1; // Ставим курсор в найденную позицию
memo1.SelLength:= length(find); // Определяем длину поискового слова
poz:= memo1.SelStart + length(find); // Выделяем найденное слово в тексте
end else // Если поиск завершён, то выдаём сообщение и устанавливаем курсор в начало текста
begin
showmessage('Поиск завершён!');
poz:= 1;
end;
end;

Если программа написана без ошибок, то поиск осуществляется по всему тексту без учёта регистра символов.













  
©Гуков Константин Михайлович 2006 - 2015     Почта: [email protected]