Шаг 81.
Автоматизация Microsoft Word. Работа с объектами в документе Word. Геометрические фигуры

    На этом шаге мы рассмотрим создание геометрических фигур.

    Метод AddShape коллекции Shapes используется для создания геометрических фигур. Прямые, ломаные и кривые линии создаются другими методами. Вызов этого метода выглядит так:

    AddShape(Type, Left, Top, Width, Height, Anchor);

    Первый аргумент представляет собой целое число и определяет тип создаваемого объекта, например Туре=1 соответствует прямоугольнику, набор всех возможных типов геометрических фигур составляет более 130. Аргументы Left, Top, Width, Height - числа, имеющие тип Extended и определяющие положение и размеры создаваемого объекта. Аргумент Anchor, объект типа Range, определяющий область, где будет создан объект. Для записи текста в область объекта применяются те же методы и свойства, что и к объекту TextBox (надписи). В следующем приложении создается прямоугольник, в который помещается текст:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button6: TButton;
    ListBox1: TListBox;
    Label1: TLabel;
    Button3: TButton;
    Label2: TLabel;
    Edit1: TEdit;
    UpDown1: TUpDown;
    Memo1: TMemo;
    Label3: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  W:Variant;
  SP:Variant;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Создание фигуры
var
  left,top:Extended;
begin
  left:=10;
  top:=11;
  if W.ActiveDocument.Shapes.Count>0 then begin
   if W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Left+
     2*(W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Width+10)<
       W.ActiveDocument.PageSetup.PageWidth
      then begin
      left:=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Left+
       W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Width+10;
      top :=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Top;
           end
      else begin
      left:=10;
      top:=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Top+
        W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Height+10.15;
           end;
   end;
   W.ActiveDocument.Shapes.AddShape(StrToInt(Edit1.Text),left, top, 
       200, 100, W.ActiveDocument.Range);
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание нового документа
begin
  W:=CreateOleObject('Word.Application');
  W.Visible:=True;
  W.Documents.Add;
end;

procedure TForm1.Button6Click(Sender: TObject);
//Выход
begin
   W.Quit;
   Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
// Загружаем в ListBoxl имена объектов коллекции Shapes
//из документа Word.
  var
    a: Integer;
begin
  ListBox1.Items.Clear;
  for a:=1 to W.ActiveDocument.Shapes.Count do
    ListBox1.Items.Add(W.ActiveDocument.Shapes.Item(a).Name);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
// При активизации строки объекта ListBox1, используя имя объекта,
// выделяем его из коллекции Shapes и записываем ссылку на этот объект
//в переменную SP.
begin
  W.ActiveDocument.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]).Select;
  SP:=W.ActiveDocument.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;


procedure TForm1.Button4Click(Sender: TObject);
//Добавление текста в выбранную фигуру
begin
  SP.TextFrame.TextRange.Text:=Memo1.Text;
end;

end.
Текст этого приложения можно взять здесь (8,4 Кб).

    Результат работы приложения изображен на рисунке 1.


Рис.1. Результат работы приложения

    На следующем шаге мы закончим изучение этого вопроса.




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