Исследуем объект Selection. Как уже сказано, этот объект может обладать
свойствами любого выделяемого объекта. В нашем случае выделен текст,
поэтому было бы интересно для начала прочитать этот текст. Весь выделен-
ный текст содержится в свойстве Text объекта Selection.
Прочитаем этот текст, используя средства Delphi и ссылку W на объект
Application. Разместим в нашей форме новую кнопку и напишем следующий
фрагмент программы в процедуре обработки ее нажатия.
Чтение (импорт) выделенного текста из документа Word
procedure TForml.Button5Click(Sender: TObject);
var eee_:string;
begin
eee_:=W.Selection.Text;
messagebox(handle,pchar(eee_) ,'Чтение текста из выделенного фрагмента!',0);
end;
Оператор eee_:=W.Selection.Text; помещает выделенный текст в строковую
переменную.
Результат выполнения этой процедуры представлен на рис. 6.2.
Для чтения текста из документа можно воспользоваться не только объектом
Selection, но и свойствами и полями объекта Range. Например, оператор
eee_:=W.ActiveDocument.Range(l, 23).Text; поместит в переменную еее_
текст с первого по двадцать третий символ документа. Это справедливо, по-
тому что объект Selection обладает свойствами и методами любых видимых
элементов документа, в том числе и свойствами фрагмента текста. Конечно,
можно напрямую работать с объектами документа, не выделяя их, но в не-
которых случаях просто не обойтись без выделения, а также без свойств и
методов объекта Selection.
Рис. 6.2. Чтение выделенного фрагмента текста
Рассмотрим некоторые свойства и методы этого объекта, в том числе при-
надлежащие ему объекты. В табл. 6.1 перечислены наиболее часто исполь-
зуемые свойства и методы объекта Selection, их типы и краткое описание.
Таблица 6.1. Свойства и методы объекта Selection
Рассмотрим подробней некоторые свойства объекта Selection.
При работе с текстом требуется уверенность в том, что это именно текст,
чтобы не применять методы, свойственные тексту, к другим объектам, и
наоборот. Если применить к выделенному тексту методы, свойственные,
например, ячейкам таблицы, будет получена ошибка выполнения. Оп-
ределить тип выделенного объекта позволяет свойство Туре. Если
Туре = wdSelectionNormal, это значит, что выделенный объект является тек-
стом, при этом свойство Text объекта Selection содержит выделенный текст.
Свойства Start и End определяют начальную и конечную позицию (в симво-
лах) выделенного фрагмента текста. Если Selection.Start = Selection.End, то
размер выделенного объекта равен нулю, т. е. ничего не выделено. Но при
этом объект Selection все равно существует. Если Selection.Start =
Selection.End = 0, это означает, что курсор находится в начале документа
(при условии что наш документ содержит только текст). Используя свойства
Start и End, можно установить курсор в любую позицию документа. Если
Selection.Start <> Selection.End, то это означает, что выделен фрагмент тек-
ста между двумя позициями, значения которых записаны в эти поля. При-
сваивая им различные значения, можно манипулировать размерами выде-
ленной области текста. Для примера откроем текст с помощью метода Open
коллекции Documents и установим значения полей Start и End. Вот фраг-
мент исходного текста программы.
Задание диапазона выделенного объекта
procedure TForml.Button6Click(Sender: TObject);
begin
W.Selection.Start:=13;
W.Selection.End:=25;
end;
Результат выполнения данной процедуры показан на рис. 6.3.
Рис. 6.3. Процедура устанавливает границы выделения
Также нетрудно убедиться, что положение курсора будет изменяться при
изменении свойств Start и End объекта Selection. Если их значения устано-
вить в ноль, то курсор переместится в начало документа, и переместится в
конец документа, когда их значения будут равны количеству символов до-
кумента. Следующий фрагмент программного кода показывает, как пере-
местить курсор в начало и конец документа.
Перемещение курсора в начало и конец документа
W.Selection.Start:=0;
W.Selection.End:=0;
W.Selection.Start:=W.ActiveDocument.Characters.Count;
W.Selection.End:=W.ActiveDocument.Characters.Count;
Манипуляции с полями Start и End — не единственный способ перемеще-
ния курсора или выделения объекта.
Рассмотрим метод Move(Unit, Count) объекта Selection. Он позволяет пере-
мещать курсор на определенное количество символов, слов, предложений
или абзацев, в конец или начало документа, а также по ячейкам таблицы.
Этот метод позволяет достичь начала или конца документа, если вызывать
его неоднократно (до тех пор, пока возвращаемое им значение не равно 0).
У метода есть два аргумента (табл. 6.2): первый определяет выполняемое
действие, а второй — величину и направление перемещения курсора (при
отрицательном значении курсор перемещается по направлению к началу
текста).
Таблица 6.2. Действия метода Move при разных значениях аргументов
Если вызвать метод Move без аргументов, то по умолчанию его выполнение
переместит курсор вперед по тексту на один символ.
Рассмотрим использование метода Move в синтаксисе языка Delphi. Созда-
дим в форме кнопку и поместим в процедуру обработки ее нажатия сле-
дующий программный код.
Перемещение курсора по тексту
procedure TForml.Buttonl5Click(Sender: TObject);
const wdCharacter=l;
begin
W.Selection.Move(wdCharacter, 3) ;
end;
Задавая разные значения первого аргумента (см. табл. 6.2), можно прове-
рить работу этого метода и на более сложных документах, содержащих таб-
лицы, рисунки и т. п.
Рассмотрим другие методы объекта Selection.
Когда курсор установлен в необходимое положение и выделен текст (как
объект Range), можно поместить этот текст в буфер обмена или наоборот,
вставить текст из буфера обмена на место выделенного текста. Для этого
используются два метода объекта Selection — Сору и Paste. Метод Сору ко-
пирует выделенный текст в буфер обмена, метод Paste извлекает текст из
буфера и вставляет его в текст, начиная от положения курсора. Если до вы-
полнения метода Paste был выделен объект, то текст вставляется на место
этого объекта. Эти методы можно применять к объекту любого типа (в дан-
ном случае в качестве объекта мы рассматриваем текст).
Синтаксис вызова этих методов в Delphi показан в следующем программ-
ном коде.
Использование методов Paste и Сору
procedure TForml.Button8Click(Sender: TObject);
begin
W.Selection.Copy;
end;
procedure TForml.Button9Click(Sender: TObject);
begin
W.Selection.Paste;
end;
Наряду с этими двумя методами можно упомянуть метод CopyAsPicture, ко-
торый может быть очень полезен в некоторых задачах. Он помещает в бу-
фер обмена графическое изображение (битовый рисунок) выделенного объ-
екта. Его также можно вызывать из приложений Delphi. Рассмотрим сле-
дующий пример.
Использование метода CopyAsPicture
procedure TForml.Buttonl6Click(Sender: TObject);
begin
W.Selection.CopyAsPicture;
end;
Выделим часть текста (рис. 6.4) и вызовем вышеописанную процедуру на-
жатием кнопки.
Рис. 6.4. Выделим текст перед тем, как вызвать метод CopyAsPicture
Запустив графический редактор Paint и выполнив операцию вставки из бу-
фера обмена, получим результат, показанный на рис. 6.5.
Рис. 6.5. Анализ скопированного в буфер как рисунок (методом CopyAsPicture)
выделенного фрагмента документа
Выделенный текстовый фрагмент можно не только скопировать и преобра-
зовать в графический объект, но и преобразовать в таблицу, как мы это час-
то делаем, редактируя текст. Используя автоматизацию в Word, в отличие от
обычного редактирования, мы достигнем большей скорости и гибкости для
преобразования таблиц, набранных в обычном текстовом режиме с раздели-
телями, в таблицы Word.
Для этого предназначен метод ConvertToTable объекта Selection. У этого ме-
тода имеется несколько аргументов, которые задают форматы и режимы
преобразования. Пожалуй, один из основных аргументов — Separator (сим-
вол-разделитель). В таблицах, набранных в DOS, таким символом был эле-
мент псевдографики. Используя этот аргумент, можно без труда преобразо-
вать таблицы, оформленные до этого в обычном текстовом редакторе. Дру-
гой не менее важный параметр — Format (формат представления таблицы).
Этот аргумент представлен переменной типа integer и может принимать не-
сколько значений. При преобразовании текста в таблицу можно также за-
дать количество столбцов (NumColumns), строк (NumRows) и начальную
ширину столбцов (InitialColumnWidth). Если не задавать все эти параметры,
то преобразование произойдет в режиме "по умолчанию".
Рассмотрим спецификацию вызова метода ConvertToTable в Visual Basic.
Вызов метода ConvertToTable в Visual Basic
Selection.ConvertToTable(Separator, NumRows, NumColumns,
InitialColumnWidth, Format, ApplyBorders, ApplyShading,
ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow,
ApplyFirstColumn, ApplyLastColumn, AutoFit)
Вызов этого метода в приложении Delphi будет выглядеть иначе в соответ-
ствии с принятой спецификацией языка программирования Pascal.
Например, требуется преобразовать выделенный текст в таблицу из пяти
столбцов. В качестве разделителя текста используем символ пробела, фор-
мат таблицы зададим константой wdTableFormatGrid2=17 и используем
значения выбранных характеристик в качестве аргументов метода
ConvertToTable. Смотрите исходный текст.
Преобразование выделенного текста в таблицу (Delphi)
procedure TForml.Buttonl7Click(Sender: TObject);
const wdTableFormatGrid2=17;
begin
W.Selection.ConvertToTable(Separator:=' ',NumRows:=5,NumColumns:=5,
Format:=wdTableFormatGrid2);
end;
Откроем произвольный документ и выделим фрагмент текста, как на
рис. 6.6.
После применения к выделенному тексту метода ConvertToTable получим
результат, представленный на рис. 6.7.
Рис. 6.6. Выделяем фрагмент текста
Рис. 6.7. Текст преобразован в таблицу
Возможно, нам придется удалять некоторые фрагменты текста. Это можно
сделать несколькими способами. Поскольку мы рассматриваем работу
с объектом Selection, то используем для этой цели его метод Delete или Cut.
Вызов методов Delete и Cut для удаления выделенного фрагмента текста
W.Selection.Delete;
W.Selection.Cut;
Отличие этих методов заключается в том, что первый метод удаляет выде-
ленный объект целиком, а второй помещает его в буфер обмена, а только
потом удаляет. Второе отличие этих методов определяется их действием на
текст, если последний не выделен. В этом случае первый метод удаляет
один символ после курсора, а второй просто вызовет ошибку выполнения.
Примечание
Для удаления выделенного фрагмента можно также воспользоваться объектом
Range. Так как у объектов Range и Selection много общего, методы удаления
фрагментов текста у них одноименные:
W.ActiveDocument.Range(1,20).Delete;
W.ActiveDocument.Range(1,20).Cut;
При создании документов не обойтись и без методов, позволяющих встав-
лять текст. В предыдущей главе были рассмотрены два метода объекта
Range — InsertAfter и InsertBefore. Эти методы есть и у объекта Selection.
Дополнительно можно рассмотреть метод TypeText, позволяющий вставлять
текст начиная с позиции курсора (если нет выделенного текста) или заме-
щать выделенный текст. У этого метода только один аргумент — текстовая
строка.
Вызов этого метода в среде Delphi выглядит так:
Использование метода TypeText и приложений MSWord в Delphi
procedure TForml.Buttonl8Click(Sender: TObject);
begin
W.Selection.TypeText('<— Заменяем выделенный фрагмент данным текстом — > ' ) ;
end;
Вставить текст в положение курсора или вместо выделенной области можно
и более простым способом. Достаточно записать нужный текст в свойство
Text объекта Selection, при этом результат будет таким же, как при выпол-
нении метода TypeText.
Использование свойства Text
procedure TForml.Button7Click(Sender: TObject);
begin
W.Selection.Text:= <-- Заменяем выделенный фрагмент данным текстом --> ;
end;
Результат применения любой из этих двух процедур к выделенному фраг-
менту текста (см. рис. 6.2) представлен на рис. 6.8.
Иногда требуется получить размер выделенной области (фрагмента) в сим-
волах или словах, скопировать определенные символы или слова, а также
задать или получить параметры шрифта для выделенной области текста.
Выделенная область (определяемая объектом Selection), как и область текста
(определяемая объектом Range), обладает аналогичными одноименными
свойствами. Коллекция Characters, входящая в объект Selection, позволяет
работать с отдельными символами области, в частности получить ее размер.
Коллекция Words объекта Selection содержит отдельные слова области и оп-
ределяет ее размер в словах. Объект Font, принадлежащий выделенной об-
ласти, определяет или задает для нее параметры шрифта.
Еще один полезный параметр объекта Selection — Style типа integer, содер-
жащий информацию о стиле выделенного текста. Если ему присвоить ка-
кое-либо значение из допустимых (существует около сотни стилей), то вы-
деленный текст будет отображен в соответствующем стиле. Можно разрабо-
тать и использовать свой стиль.
Разберем следующий пример: выделим текст и выполним оператор
W.Selection.Style:=WdStyleHyperlinkFollowed; (значение константы
WdStyleHyperlinkFollowed = -87). Выполнение данного оператора установит
стиль текста, который представлен на рис. 6.9.
Рис. 6.8. Результат выполнения метода замены выделенного фрагмента текста в документе
Рис. 6.9. Установка стиля для выделенного фрагмента текста |