Шаг 155.
Автоматизация Microsoft Excel. Работа с объектами в книге Excel.
Линии границы (окончание)

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

    Если по каким-то причинам нас не устраивает вид линии границы, получаемый комбинированием значений свойств Style и DashStyle объекта Line, то дополнительно можно воспользоваться свойством Pattern объекта Line и задать нужный рисунок узора. Сочетая различные значения этих трех свойств, можно получить множество вариантов и выбрать среди них подходящий.

    При задании узора появляется дополнительная возможность манипуляции с цветом. Дополнительно к цвету линии (узора) можно задать цвет фона. Цвет фона определяется свойством BackColor объекта Line. Первая из приведенных далее процедур позволяет выбрать узор линии, а вторая - задать цвет его фона.

procedure TForm1.ComboBox3Change(Sender: TObject);
//Задание узора линии границы
begin
  Line.Pattern:=ComboBox3.ItemIndex+1;
end;

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

    Результат работы этих процедур приведен на рисунке 1.


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

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

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

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    Label3: TLabel;
    Button4: TButton;
    CheckBox1: TCheckBox;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    Button5: TButton;
    ColorDialog1: TColorDialog;
    ComboBox1: TComboBox;
    Label2: TLabel;
    Label4: TLabel;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    Label5: TLabel;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  TextBox:variant;
  Line:Variant;
{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и отображение окна
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание рабочей книги
begin
  E.WorkBooks.Add;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Создание надписи
const msoTextOrientationHorizontal=1;
var
  left,top:Extended;
begin
  left:=10;
  top:=11;
  if E.ActiveWorkBook.ActiveSheet.Shapes.Count>0 then
  begin
   left:=E.ActiveWorkBook.ActiveSheet.Shapes.
       item(E.ActiveWorkBook.ActiveSheet.Shapes.count).Left+20;
   top:=E.ActiveWorkBook.ActiveSheet.Shapes.
       item(E.ActiveWorkBook.ActiveSheet.Shapes.count).Top+20;
  end;
  E.ActiveWorkBook.ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal,
     left, top, 200, 100);
end;

procedure TForm1.Button4Click(Sender: TObject);
//Заполнить список надписей
var
  a: Integer;
begin
  ListBox1.Items.Clear;
  for a:=1 to E.ActiveWorkBook.ActiveSheet.Shapes.Count do
    ListBox1.Items.Add(E.ActiveWorkBook.ActiveSheet.Shapes.Item(a).Name);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
// При активизации строки объекта ListBoxl, используя имя объекта,
// выделяем его из коллекции Shapes и записываем ссылку на этот объект
//в переменную TextBox.
begin
  TextBox:=E.ActiveWorkBook.ActiveSheet.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]);
  Line:=TextBox.Line; //Получить ссылку на объект Line
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Задание видимости линии границы
begin
  Line.Visible:=CheckBox1.Checked;
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
//Задание толщины линии границы
begin
  Line.Weight:=SpinEdit1.Value*0.25;
end;

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

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

procedure TForm1.ComboBox2Change(Sender: TObject);
//Задание шаблона линии границы
begin
  Line.DashStyle:=ComboBox2.ItemIndex+1;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
//Задание узора линии границы
begin
  Line.Pattern:=ComboBox3.ItemIndex+1;
end;

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

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

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




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