На этом шаге мы рассмотрим варианты поиска текста в документе.
Ко всему описанному ранее в предыдущих шагах для создания документа нам не хватает функций поиска и подстановки текста в документ. Объект 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. Результат поиска
В данном примере мы задали текст в режиме поиска "от начала к концу документа", в поля объекта 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;
Оба варианта дают один и тот же результат. Их отличия заключаются в том, что в первом варианте производится поиск фрагмента с использованием метода Execute объекта Find, после чего, в случае удачной попытки, выделенный фрагмент заменяется текстом. Во втором варианте метод Execute одновременно выполняет поиск и замену текста. Если данную процедуру (первый или второй вариант) повторять неоднократно, применяя к документу, созданному по шаблону, то можно заполнить его реальными данными, заменив ими текстовые константы. Этого достаточно для формирования простого документа.
На следующем шаге мы рассмотрим пример использования рассмотренных конструкций.