Шаг 78.
Автоматизация Microsoft Word. Работа с объектами в документе Word. Линия границы надписи (окончание)

    На этом шаге мы рассмотрим задание стиля линии и стиля разрыва линии.

    Если линия границы представлена не в виде узора, а в виде сплошной линии, то можно дополнительно задать тип линии и ее шаблон. Тип линии определяется присваиванием целочисленной константы свойству Line.Style. Если это свойство установить в значение msoLineSingle=0, то получится сплошная линия. Если этот стиль нас не устраивает, то используем следующую процедуру:

procedure TForm1.ComboBox2Change(Sender: TObject);
//Задание стиля линии границы надписи
begin
  WordTextBox.Line.Style:=ComboBox2.ItemIndex+1;
end;

    Шаблон линии определяется присваиванием целочисленной константы свойству Line.DashStyle надписи. Если это свойство установить в значение msoLineSolid=0, то линия будет сплошной, без разрывов. Если нужно выбрать другой шаблон линии, то данному свойству можно присвоить значение другой константы из списка возможных.

    Приведем полный текст приложения.

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;
    CheckBox1: TCheckBox;
    Button4: TButton;
    Label2: TLabel;
    Label3: TLabel;
    ColorDialog1: TColorDialog;
    SpinButton1: TSpinButton;
    SpinButton2: TSpinButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ComboBox1: TComboBox;
    Label4: TLabel;
    Button5: TButton;
    Button7: TButton;
    TabSheet2: TTabSheet;
    Label5: TLabel;
    ComboBox2: TComboBox;
    Label6: TLabel;
    ComboBox3: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure CheckBox1Click(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);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

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

procedure TForm1.Button1Click(Sender: TObject);
//Создание надписи
const msoTextOrientationHorizontal=1;
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.AddTextbox(msoTextOrientationHorizontal,
     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 и записываем ссылку на этот объект
//в переменную WordTextBox.
begin
  W.ActiveDocument.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]).Select;
  WordTextBox:=W.ActiveDocument.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Включение/выключение линии
begin
  if CheckBox1.Checked then WordTextBox.Line.Visible:=-1
  else WordTextBox.Line.Visible:=0;
end;

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

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

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

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

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

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

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

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

procedure TForm1.ComboBox2Change(Sender: TObject);
//Задание стиля линии границы надписи
begin
  WordTextBox.Line.Style:=ComboBox2.ItemIndex+1;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
//Выбор вида разрыва для линии границы надписи
begin
  WordTextBox.Line.DashStyle:=ComboBox3.ItemIndex+1;
end;

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

    Последние две процедуры используются для задания стиля линии границы надписи и вида разрыва этой границы.

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


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

    В следующих таблицых приведены стили линии и стили разрыва линии.

Таблица 1. Стили линии
Константа Значение
msoLineSingle 1
msoLineThinThin 2
msoLineThinThick 3
msoLineThickThin 4
msoLineThickBetweenThin 5

Таблица 2. Стили разрыва линии
Константа Значение
msoLineSolid 1
msoLineSquareDot 2
msoLineRoundDot 3
msoLineDash 4
msoLineDashDot 5
msoLineDashDotDot 6
msoLineLongDash 7
msoLineLongDashDot 8

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




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