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

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

    Параметры линии границы объекта определяются свойствами объекта Line, который сам является свойством и принадлежит объекту TextBox. При создании надписи она имеет видимые линии границы с определенными параметрами, но у нас есть возможность сделать эти линии вообще невидимыми. Для этого достаточно изменить состояние свойства Visible объекта Line - установить его в значение False.

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

    Задать толщину линии можно с помощью свойства Weight объекта Line. В приложениях Delphi значение толщины линии должно задаваться дробным числом типа Extended. Следующий программный код отражает изменение толщины линии.

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

    Цвет линии границы задается выбором из палитры цветов Excel, при этом значение индекса цвета записывается в свойство ForeColor.SchemeColor. Например, оператор

    Line.ForeColor.SchemeColor:=1;

определяет для линии цвет как значение, соответствующее выбранному в палитре цвету. Такой метод определения цвета зависит от палитры и ее изменений. Если требуется задать цвет как комбинацию трех цветов (красный, зеленый, синий), то используем запись значения цвета в формате RGB непосредственно в свойство ForeColor.RGB объекта Line.

    Изменим для надписи цвет линии границы, используя формат RGB.

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

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


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

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

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

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

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




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