Шаг 52.
Автоматизация Microsoft Word. Создание простого документа. Выделение текста

    На этом шаге мы рассмотрим способы выделения фрагмента текста.

    На 47 шаге мы говорили, что для работы с текстом используется объект Range, принадлежащий объекту-документу. Там мы рассмотрели методы объекта Range, предназначенные для вставки фрагментов текста в начало или конец или в определенную позицию документа. Так можно создавать простой текст. Но чтобы создавать сложные документы с определенной структурой, заполняемой при формировании документа, требуются методы, позволяющие выделять фрагменты и работать с ними. Также необходимы функции поиска фрагментов и подстановки текста, методы для перемещения курсора в начало, конец или определенную позицию документа. Все эти методы реализованы в объектах Range и Selection. Selection - объект, ассоциированный с выделенным в данный момент времени объектом. Выделенным объектом может быть не только фрагмент текста, но и ячейки таблиц, таблицы целиком, надписи, рисунки и т. д. Исходя из этого, объект Selection может обладать свойствами любого визуального объекта, входящего в документ, и даже свойствами самого документа (если он выделен полностью). Но сейчас нас интересует только текст, и мы будем рассматривать Selection только применительно к нему.

    Для того чтобы получить доступ к выделенному объекту, необходимо выделить весь текст документа или его фрагмент. Выделим фрагмент текста. Для этого можно использовать метод Select объекта Range. Рассмотрим два способа использования этого метода.

  1. Первый способ выделения фрагмента текста в документе.
    var 
       MyRange: variant;
       st, ed: integer;
    .    .     .     .
        MyRange:=W.ActiveDocument.Range(st, ed); 
        MyRange.Select;
    
  2. Второй способ выделения фрагмента текста в документе.
      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.




Предыдущий шаг Содержание Следующий шаг