На этом шаге мы рассмотрим способы выделения фрагмента текста.
На 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.
Текст этого приложения можно взять здесь (5,8 Кб).
Таким образом, мы получили объект Selection. Пусть он содержит только текст, но мы уже можем
исследовать методы и свойства этого объекта.
На следующем шаге мы рассмотрим объект Selection.