Шаг 164.
Автоматизация Microsoft Excel. Работа с объектами в книге Excel.
Линии

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

    Линия в рабочей книге Excel создается с использованием метода AddLine коллекции Shapes. Аргументами метода AddLine являются начальные и конечные координаты (BeginX, BeginY, EndX и EndY типа Extended). Толщина, цвет и другие характеристики линии задаются, в основном, так же, как для линии границы надписи (таблица 1).

Таблица 1. Свойства линии
Свойство Тип Назначение
Visible Boolean Отобразить/скрыть линию
Weight Integer Толщина линии
ForeColor.RGB TColor Цвет линии
BackColor.RGB TColor Цвет фона (для узора)
Style Integer Тип линии
DashStyle Integer Шаблон линии
Pattern Integer Узор
BeginArrowheadStyle Integer Вид стрелки в начале линии
BeginArrowheadLength Integer Длина стрелки в начале линии
BeginArrowheadWidth Integer Ширина стрелки в начале линии
EndArrowheadStyle Integer Вид стрелки в конце линии
EndArrowheadLength Integer Длина стрелки в конце линии
EndArrowheadWidth Integer Ширина стрелки в конце линии

    Следующее приложение позволяет создать и настроить параметры линии.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    Label3: TLabel;
    Button4: TButton;
    Panel1: TPanel;
    Button5: TButton;
    ColorDialog1: TColorDialog;
    Label2: TLabel;
    SpinButton1: TSpinButton;
    Edit1: TEdit;
    Edit2: TEdit;
    SpinButton2: TSpinButton;
    Label1: TLabel;
    Label4: TLabel;
    ComboBox1: TComboBox;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure SpinButton1DownClick(Sender: TObject);
    procedure SpinButton1UpClick(Sender: TObject);
    procedure SpinButton2DownClick(Sender: TObject);
    procedure SpinButton2UpClick(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  LN: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);
//Создание линии
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.AddLine(
     left, top, left+150, top+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 и записываем ссылку на этот объект
//в переменную LN.
begin
  LN:=E.ActiveWorkBook.ActiveSheet.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;


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

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

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

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

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

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


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

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

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

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


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

    На следующем шаге мы рассмотрим создание произвольных фигур.




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