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