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

    На этом шаге мы рассмотрим изменение стиля линии границы и задание шаблона линии.

    Следующее свойство линии границы, которое мы изменим, это ее тип (или стиль). Тип линии определяется значением, которое содержит свойство Style объекта Line. Свойство Style линии границы надписи может принимать целые числовые значения из списка определенных констант, значения которых находятся в диапазоне от 1 до 5. Их применение определяет, будет линия сплошной или сочетанием из двух-трех толстых и тонких линий.

    Рассмотрим следующую процедуру, позволяющую изменять тип линии.

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

    Результат выполнения этой процедуры и применения типа линии, заданного константой msoLineThinThin=2, представлен на рисунке 1.


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

    Если задать тип линий константами msoLineThickBetweenThin и msoLineThickThin, то получим другой результат (рисунок 2).


Рис.2. Изменение типа линии объекта TextBox

    Независимо от типа, линия границы может быть представлена в виде точек, пунктирной линии или сочетания того и другого. Шаблон (вид разрыва линии) определяется значением свойства DashStyle объекта Line. Рассмотрим пример. procedure TForm1.ComboBox2Change(Sender: TObject);

//Задание шаблона линии границы
begin
  Line.DashStyle:=ComboBox2.ItemIndex+1;
end;

    В этом примере мы изменяем свойство DashStyle, присваивая ему значения констант из заданного списка. Все эти константы являются целыми числами в диапазоне от 1 до 8. Этим объясняется простота исходного текста для процедуры выбора шаблона линии границы.

    Установим шаблон линии с помощью этой процедуры, задав для свойства DashStyle значение константы msoLineSquareDot. Результат выполнения процедуры представлен на рисунке 3.


Рис.3. Задаем шаблон линии границы для надписи

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

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

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

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




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