На этом шаге мы рассмотрим варианты поиска текста в документе.
Ко всему описанному ранее в предыдущих шагах для создания документа нам не хватает функций поиска и
подстановки текста в документ. Объект Selection обладает механизмами поиска текста - ими мы и
воспользуемся. Рассмотрим объект Find, принадлежащий объекту Selection. Вот фрагмент
исходного текста Delphi.
procedure TForm1.Button16Click(Sender: TObject); //Поиск текста var S: String; begin S:=''; S:=InputBox('Введите текст для поиска',S,S); W.Selection.Find.Forward:=True; W.Selection.Find.Text:=S; if W.Selection.Find.Execute then messagebox(handle,'Поиск текста завершен успешно!','Внимание!',0); end;
Запустим программу нажатием кнопки и введем в специальном окне фрагмент текста, который нужно найти в документею.
В результате выполнения процедуры искомый фрагмент текста будет выделен (рисунок 1).
Рис.1. Результат поиска
Текст этого приложения можно взять здесь (8,9 Кб).
В данном примере мы задали текст в режиме поиска "от начала к концу документа", в поля объекта Find
поместили нужные данные, которые установили необходимый режим, а затем вызвали метод Execute, который
и выполнил поиск текста. Этот метод возвращает значение True/False (при успешном/неуспешном поиске).
Очевидно, что набора методов, позволяющих осуществлять поиск и подстановку текста на место выделенного
фрагмента, будет достаточно для создания документов на основании шаблона. В качестве примера рассмотрим
следующие процедуры.
procedure TForm1.Button17Click(Sender: TObject); //Поиск и замена var S: String; begin S:=''; S:=InputBox('Введите текст для поиска',S,S); W.Selection.Find.Forward:=True; W.Selection.Find.Text:=S; if W.Selection.Find.Execute then W.Selection.Text:= 'Фрагмент для замены'; end;
procedure TForm1.Button17Click(Sender: TObject); //Поиск и замена const wdReplaceAll=2; var S: String; begin S:=''; S:=InputBox('Введите текст для поиска',S,S); W.Selection.Find.Forward:=True; W.Selection.Find.Text:=S; W.Selection.Find.Replacement.Text:='Текст для замены'; if W.Selection.Find.Execute(Replace:=wdReplaceAll) then messagebox(handle,pchar('Поиск и замена текста "'+S+'" завершена!'), 'Внимание!', 0); end;
Текст приложения со вторым вариантом можно взять здесь (9,3 Кб).
Оба варианта дают один и тот же результат. Их отличия заключаются в том, что в первом варианте производится поиск
фрагмента с использованием метода Execute объекта Find, после чего, в случае удачной попытки,
выделенный фрагмент заменяется текстом. Во втором варианте метод Execute одновременно выполняет поиск
и замену текста. Если данную процедуру (первый или второй вариант) повторять неоднократно, применяя к документу,
созданному по шаблону, то можно заполнить его реальными данными, заменив ими текстовые константы. Этого
достаточно для формирования простого документа.
На следующем шаге мы рассмотрим пример использования рассмотренных конструкций.