На этом шаге мы рассмотрим задание узора и его параметров.
Для задания вида линии можно использовать узор из набора возможных вариантов. Узор определяется целочисленной константой, которая записывается в поле Line.Pattern. Используя это свойство, запишем значение константы, выбрав его как индекс элемента управления TComboBox (комбинированный список).
Приведем текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ComCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button6: TButton; ListBox1: TListBox; Label1: TLabel; Button3: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; CheckBox1: TCheckBox; Button4: TButton; Label2: TLabel; Label3: TLabel; ColorDialog1: TColorDialog; SpinButton1: TSpinButton; SpinButton2: TSpinButton; Edit1: TEdit; Edit2: TEdit; ComboBox1: TComboBox; Label4: TLabel; Button5: TButton; Button7: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure SpinButton1DownClick(Sender: TObject); procedure SpinButton1UpClick(Sender: TObject); procedure SpinButton2DownClick(Sender: TObject); procedure SpinButton2UpClick(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button7Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; WordTextBox:Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание надписи const msoTextOrientationHorizontal=1; var left,top:Extended; begin left:=10; top:=11; if W.ActiveDocument.Shapes.Count>0 then begin if W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Left+ 2*(W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Width+10)< W.ActiveDocument.PageSetup.PageWidth then begin left:=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Left+ W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Width+10; top :=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Top; end else begin left:=10; top:=W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Top+ W.ActiveDocument.Shapes.Item(W.ActiveDocument.Shapes.Count).Height+10.15; end; end; W.ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, left, top, 200, 100, W.ActiveDocument.Range); end; procedure TForm1.Button2Click(Sender: TObject); //Создание нового документа begin W:=CreateOleObject('Word.Application'); W.Visible:=True; W.Documents.Add; end; procedure TForm1.Button6Click(Sender: TObject); //Выход begin W.Quit; Close; end; procedure TForm1.Button3Click(Sender: TObject); // Загружаем в ListBoxl имена объектов коллекции Shapes //из документа Word. var a: Integer; begin ListBox1.Items.Clear; for a:=1 to W.ActiveDocument.Shapes.Count do ListBox1.Items.Add(W.ActiveDocument.Shapes.Item(a).Name); end; procedure TForm1.ListBox1Click(Sender: TObject); // При активизации строки объекта ListBox1, используя имя объекта, // выделяем его из коллекции Shapes и записываем ссылку на этот объект //в переменную WordTextBox. begin W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]).Select; WordTextBox:=W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); end; procedure TForm1.CheckBox1Click(Sender: TObject); //Включение/выключение линии begin if CheckBox1.Checked then WordTextBox.Line.Visible:=-1 else WordTextBox.Line.Visible:=0; end; procedure TForm1.Button4Click(Sender: TObject); //Задание цвета линии begin if ColorDialog1.Execute then WordTextBox.Line.ForeColor.RGB:=ColorDialog1.Color; end; procedure TForm1.SpinButton1DownClick(Sender: TObject); //Уменньшение толщины линии begin WordTextBox.Line.Weight:=WordTextBox.Line.Weight-0.25; Edit1.Text:=FloatToStr(WordTextBox.Line.Weight); end; procedure TForm1.SpinButton1UpClick(Sender: TObject); //Увеличение толщины линии begin WordTextBox.Line.Weight:=WordTextBox.Line.Weight+0.25; Edit1.Text:=FloatToStr(WordTextBox.Line.Weight); end; procedure TForm1.SpinButton2DownClick(Sender: TObject); //Уменьшение плотности цвета begin if WordTextBox.Line.Transparency<1 then begin WordTextBox.Line.Transparency:=WordTextBox.Line.Transparency+0.01; Edit2.Text:=FloatToStr(WordTextBox.Line.Transparency); end; end; procedure TForm1.SpinButton2UpClick(Sender: TObject); //Увеличение плотности цвета begin if WordTextBox.Line.Transparency>0 then begin WordTextBox.Line.Transparency:=WordTextBox.Line.Transparency-0.01; Edit2.Text:=FloatToStr(WordTextBox.Line.Transparency); end; end; procedure TForm1.ComboBox1Change(Sender: TObject); //Выбор узора для линии границы надписи begin WordTextBox.Line.Pattern:=ComboBox1.ItemIndex+1; end; procedure TForm1.Button5Click(Sender: TObject); //Задание цвета узора begin if ColorDialog1.Execute then WordTextBox.Line.ForeColor.RGB:=ColorDialog1.Color; end; procedure TForm1.Button7Click(Sender: TObject); //Задание цвета фона узора begin if ColorDialog1.Execute then WordTextBox.Line.BackColor.RGB:=ColorDialog1.Color; end; end.
Процедура ComboBox1Change() используется для задания узора. Возможные зачения для задания узоров перечислены в таблице 1 75 шага. Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
Обратите внимание на две последних процедуры. Они используются для задания цветов рисунка и фона узора. Например, на рисунке 1 цвет узора красный, а цвет фона узора - зеленый.
На следующем шаге мы закончим изучение этого вопроса.