На этом шаге мы рассмотрим изменение стиля линии границы и задание шаблона линии.
Следующее свойство линии границы, которое мы изменим, это ее тип (или стиль). Тип линии определяется значением, которое содержит свойство 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.
На следующем шаге мы закончим изучение этого вопроса.