Работа с объектами в документе 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. Стили линии

КонстантаЗначение
msoLineSingle1
msoLineThinThin2
msoLineThinThick3
msoLineThickThin4
msoLineThickBetweenThin5

Таблица 2. Стили разрыва линии

КонстантаЗначение
msoLineSolid1
msoLineSquareDot2
msoLineRoundDot3
msoLineDash4
msoLineDashDot5
msoLineDashDotDot6
msoLineLongDash7
msoLineLongDashDot8

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий