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

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

    Для задания вида линии можно использовать узор из набора возможных вариантов. Узор определяется целочисленной константой, которая записывается в поле Line.Pattern. Используя это свойство, запишем значение константы, выбрав его как индекс элемента управления TComboBox (комбинированный список).

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

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;
    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);
  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;

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

    Процедура ComboBox1Change() используется для задания узора. Возможные зачения для задания узоров перечислены в таблице 1 75 шага. Результат работы приложения изображен на рисунке 1.


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

    Обратите внимание на две последних процедуры. Они используются для задания цветов рисунка и фона узора. Например, на рисунке 1 цвет узора красный, а цвет фона узора - зеленый.

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




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