На этом шаге мы рассмотрим способы выделения фрагмента текста.
На 47 шаге мы говорили, что для работы с текстом используется объект Range, принадлежащий объекту-документу. Там мы рассмотрели методы объекта Range, предназначенные для вставки фрагментов текста в начало или конец или в определенную позицию документа. Так можно создавать простой текст. Но чтобы создавать сложные документы с определенной структурой, заполняемой при формировании документа, требуются методы, позволяющие выделять фрагменты и работать с ними. Также необходимы функции поиска фрагментов и подстановки текста, методы для перемещения курсора в начало, конец или определенную позицию документа. Все эти методы реализованы в объектах Range и Selection. Selection - объект, ассоциированный с выделенным в данный момент времени объектом. Выделенным объектом может быть не только фрагмент текста, но и ячейки таблиц, таблицы целиком, надписи, рисунки и т. д. Исходя из этого, объект Selection может обладать свойствами любого визуального объекта, входящего в документ, и даже свойствами самого документа (если он выделен полностью). Но сейчас нас интересует только текст, и мы будем рассматривать Selection только применительно к нему.
Для того чтобы получить доступ к выделенному объекту, необходимо выделить весь текст документа или его фрагмент. Выделим фрагмент текста. Для этого можно использовать метод Select объекта Range. Рассмотрим два способа использования этого метода.
var
MyRange: variant;
st, ed: integer;
. . . .
MyRange:=W.ActiveDocument.Range(st, ed);
MyRange.Select;
var
st, ed: integer;
. . . .
W.ActiveDocument.Range(st, ed).Select;
Результаты применения этих способов абсолютно идентичны и основаны н функции Range(a, b), возвращающей усеченный объект Range. Иногда удобно использовать первый способ, особенно если в дальнейшем предполагается работа с усеченным объектом.
procedure TForm1.Button2Click(Sender: TObject); //Выделение текста begin W.ActiveDocument.Range(1,15).Select; end;
Откроем любой документ и вызовем эту процедуру, нажав кнопку. Результат ее выполнения отображен на рисунке 1.
Рис.1. Результат работы приложения
Полный тест приложения приведен ниже:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComObj, StdCtrls; type TForm1 = class(TForm) Button1: TButton; CheckBox1: TCheckBox; OpenDialog1: TOpenDialog; Button4: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin W:=CreateOleObject('Word.Application'); end; procedure TForm1.CheckBox1Click(Sender: TObject); begin W.Visible:=CheckBox1.Checked; end; procedure TForm1.Button4Click(Sender: TObject); //Открытие документа begin if OpenDialog1.Execute then W.Documents.Open(OpenDialog1.FileName); end; procedure TForm1.Button2Click(Sender: TObject); //Выделение текста begin W.ActiveDocument.Range(1,15).Select; end; end.
Таким образом, мы получили объект Selection. Пусть он содержит только текст, но мы уже можем исследовать методы и свойства этого объекта.
На следующем шаге мы рассмотрим объект Selection.