Шаг 63.
Автоматизация Microsoft Word. Создание таблиц и работа с ними. Границы и заливка ячеек таблиц

    На этом шаге мы рассмотрим способы заливки ячеек и изменение их границ.

    Таблица состоит из ячеек, которые объединены в строки и столбцы. Поэтому, как у строк и столбцов, так и у отдельных ячеек есть аналогичные между собой свойства, отличающиеся только областью применения этих свойств. Если мы, например, изменяем толщину границ для ячейки, то это изменение приведет к изменению отображения данной ячейки. Если изменить параметры строки (столбца), то это может привести к изменению всех границ всех ячеек строки (столбца) или только границы строки (столбца). Заливка определяется для всех ячеек выбранной строки (столбца). Рассмотрим это на следующем примере, в котором будем изменять толщину линий столбца, их цвет и заливку.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    Button4: TButton;
    Button5: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Edit3: TEdit;
    Label5: TLabel;
    Edit4: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    ComboBox3: TComboBox;
    ComboBox4: TComboBox;
    ComboBox5: TComboBox;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
    procedure ComboBox4Change(Sender: TObject);
    procedure ComboBox5Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  W:Variant;
  table: Variant;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Создание таблицы
begin
  W.ActiveDocument.Tables.Add(Range:=W.ActiveDocument.Range, NumRows:=2, 
         NumColumns:=3);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  W:=CreateOleObject('Word.Application');
  W.Visible:=True;
  W.Documents.Add;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Таблица в конце документа
var
   MyRange:Variant;
begin
   W.ActiveDocument.Range.InsertAfter(' ');
   MyRange:=W.ActiveDocument.Range(W.ActiveDocument.Range.End-1,
                  W.ActiveDocument.Range.End-1);
   W.ActiveDocument.Tables.Add(Range:=MyRange, NumRows:=2, NumColumns:=3);
end;

procedure TForm1.Button4Click(Sender: TObject);
//Количество таблиц
var a: integer;
begin
  ListBox1.Items.Clear;
  for a:=1 to W.ActiveDocument.Tables.Count do
    begin
      ListBox1.Items.Add('Таблица - '+IntToStr(a));
    end;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Удаление выбранной таблицы
begin
  W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1).Select;
  W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1).Delete;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
//Запомнить параметры выбранной таблицы
begin
  table:=W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1);
  Edit1.Text:=IntToStr(table.Columns.Count);
  Edit2.Text:=IntToStr(table.Columns.Width);

end;

procedure TForm1.Edit3Change(Sender: TObject);
//Выбор столбца
begin
  Edit4.Text:=IntToStr(table.Columns.Item(StrToInt(Edit3.Text)).Width);
end;

procedure TForm1.Edit4Change(Sender: TObject);
//Установка ширины выбранного столбца
begin
  table.Columns.Item(StrToInt(Edit3.Text)).Width:=StrToInt(Edit4.Text);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
   Close;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Выбор толщины рамки
const
  wdLineWidth025pt=2;
  wdLineWidth450pt=36;
begin
  case ComboBox1.ItemIndex of
  0:table.Columns.Item(StrToInt(Edit3.Text)).Borders.OutsideLineWidth:=
                  wdLineWidth025pt;
  1:table.Columns.Item(StrToInt(Edit3.Text)).Borders.OutsideLineWidth:=
                  wdLineWidth450pt;
  end;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
//Цвет рамки
begin
  table.Columns.Item(StrToInt(Edit3.Text)).Borders.OutsideColorIndex:=
           ComboBox2.ItemIndex;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
//Текстура
const
  wdTextureNone=0;
  wdTextureSolid=1000;
  wdTexture30Percent=300;
begin
  case ComboBox3.ItemIndex of
    0: table.Columns.Item(StrToInt(Edit3.Text)).Shading.Texture:=
                  wdTextureNone;
    1: table.Columns.Item(StrToInt(Edit3.Text)).Shading.Texture:=
                  wdTextureSolid;
    2: table.Columns.Item(StrToInt(Edit3.Text)).Shading.Texture:=
                  wdTexture30Percent;
  end;
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
//Цвет фона
begin
  table.Columns.Item(StrToInt(Edit3.Text)).Shading.
               BackgroundPatternColorIndex:=ComboBox4.ItemIndex;
end;

procedure TForm1.ComboBox5Change(Sender: TObject);
//Цвет рисунка
begin
  table.Columns.Item(StrToInt(Edit3.Text)).Shading.
               ForegroundPatternColorIndex:=ComboBox5.ItemIndex;
end;

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

    Результаты применения описанных процедур к выбранной таблице и внешний вид формы представлены на рисунке 1.


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


    Замечание. Чтобы можно было изменять толщину границ ячеек нужно, чтобы у ячейки таблицы были отображаемые границы.

    При создании этого приложения мы использовали некоторые константы, которые определены в библиотеке Microsoft Word. Чтобы узнать значения этих констант, а также свойства и методы объектов Microsoft Word можно поступить следующим образом:

    В заключение приведем перечень цветов, которые мы использовали при создании приложения.

Таблица 1. Перечень цветов
Мнемоническое обозначение Константа
wdAuto 0
wdBlack 1
wdBlue 2
wdTurquoise 3
wdBringhtGreen 4
wdPink 5
wdRed 6
wdYellow 7
wdWhite 8
wdDarkBlue 9
wdTeal 10
wdGreen 11
wdViolet 12
wdDarkRed 13
wdDarkYellow 14
wdGray50 15
wdGray25 16

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




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