Шаг 80.
Автоматизация Microsoft Word. Работа с объектами в документе Word. Линии

    На этом шаге мы рассмотрим создание и настройку линии.

    Линия (объект Line) в документе Word создается с помощью метода AddLine коллекции Shapes. Аргументами метода AddLine(BeginX, BeginY, EndX, EndY, Anchor) являются начальные и конечные координаты линии, имеющие тип Extended. Последний аргумент метода (типа Range) определяет область, где и создается линия. Толщина, цвет и другие характеристики линии задаются так же, как для линии границы надписи (объекта TextBox). Так выглядит оператор в среде Delphi, создающий прямую линию:

    W.ActiveDocument.Shapes.AddLine(100,100,200,150);

    Приведем текст приложения, позволяющего создавать и настраивать линии.

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;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Button4: TButton;
    Label2: TLabel;
    Label3: TLabel;
    ColorDialog1: TColorDialog;
    SpinButton1: TSpinButton;
    SpinButton2: TSpinButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ComboBox1: TComboBox;
    Label4: TLabel;
    Button5: TButton;
    Button7: 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);
    procedure SpinButton1DownClick(Sender: TObject);
    procedure SpinButton1UpClick(Sender: TObject);
    procedure SpinButton2DownClick(Sender: TObject);
    procedure SpinButton2UpClick(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  W:Variant;
  LN: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.AddLine(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 и записываем ссылку на этот объект
//в переменную LN.
begin
  W.ActiveDocument.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]).Select;
  LN:=W.ActiveDocument.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

procedure TForm1.Button4Click(Sender: TObject);
//Задание цвета линии
begin
  if ColorDialog1.Execute  then
     LN.Line.ForeColor.RGB:=ColorDialog1.Color;
end;

procedure TForm1.SpinButton1DownClick(Sender: TObject);
//Уменньшение толщины линии
begin
  LN.Line.Weight:=LN.Line.Weight-0.25;
  Edit1.Text:=FloatToStr(LN.Line.Weight);
end;

procedure TForm1.SpinButton1UpClick(Sender: TObject);
//Увеличение толщины линии
begin
  LN.Line.Weight:=LN.Line.Weight+0.25;
  Edit1.Text:=FloatToStr(LN.Line.Weight);
end;

procedure TForm1.SpinButton2DownClick(Sender: TObject);
//Уменьшение плотности цвета
begin
  if LN.Line.Transparency<1  then
  begin
     LN.Line.Transparency:=LN.Line.Transparency+0.01;
     Edit2.Text:=FloatToStr(LN.Line.Transparency);
  end;
end;

procedure TForm1.SpinButton2UpClick(Sender: TObject);
//Увеличение плотности цвета
begin
  if LN.Line.Transparency>0  then
  begin
     LN.Line.Transparency:=LN.Line.Transparency-0.01;
     Edit2.Text:=FloatToStr(LN.Line.Transparency);
  end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Выбор узора для линии границы надписи
begin
  LN.Line.Pattern:=ComboBox1.ItemIndex+1;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Задание цвета узора
begin
   if ColorDialog1.Execute then
      LN.Line.ForeColor.RGB:=ColorDialog1.Color;
end;

procedure TForm1.Button7Click(Sender: TObject);
//Задание цвета фона узора
begin
   if ColorDialog1.Execute then
      LN.Line.BackColor.RGB:=ColorDialog1.Color;
end;

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

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


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

    На следующем шаге мы рассмотрим геометрические фигуры.




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