На этом шаге мы рассмотрим некоторые методы элементов коллекции.
Рассмотрим методы элементов коллекции на примере коллекции объектов TextBox, которую мы до создали на предыдущем шаге. Для доступа к элементам коллекции используем свойство Item(i), которое возвращает объект, где i - индекс или имя объекта. Например:
WordTextBox:=W.ActiveDocument.Shapes.Item(1);
Данный оператор запишет в переменную WordTextBox: variant ссылку на первый объект коллекции.
Общими свойствами и методами для объектов коллекции Shapes являются размеры, координаты размещения объектов и некоторые методы, например Delete и Select. Следующие операторы соответственно выполняют выделение объекта, выбранного с помощью предыдущего оператора, изменение его координаты и удаление:
WordTextBox.Select; WordTextBox.Left:=10; WordTextBox.Delete;
Поскольку коллекция Shapes может содержать разнородные объекты, эти объекты могут обладать и особыми свойствами. Объекты TextBox, созданные методом AddTextBox и рассмотренные в примере предыдущего шага, предназначены для отображения текста, поэтому для них специфичны свойства и методы для работы с текстом. Рассмотрим их.
Основным объектом, принадлежащим объекту TextBox и содержащим текст и его характеристики, является объект TextFrame. Он определяет границы области текста внутри рамки надписи, направление текста и некоторые другие характеристики. В свою очередь объект TextFrame включает в себя объект Range, который содержит текст и характеристики шрифта. Рассмотрим следующую форму и исходный текст Delphi для манипуляций с текстом объекта TextBox.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button6: TButton; ListBox1: TListBox; Label1: TLabel; Button3: TButton; Label2: TLabel; SpinButton1: TSpinButton; SpinButton2: TSpinButton; SpinButton3: TSpinButton; SpinButton4: TSpinButton; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Edit1: TEdit; Label7: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure SpinButton1DownClick(Sender: TObject); procedure SpinButton1UpClick(Sender: TObject); procedure SpinButton2DownClick(Sender: TObject); procedure SpinButton2UpClick(Sender: TObject); procedure SpinButton3DownClick(Sender: TObject); procedure SpinButton3UpClick(Sender: TObject); procedure SpinButton4DownClick(Sender: TObject); procedure SpinButton4UpClick(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); // Загружаем в ListBox1 имена объектов коллекции 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); // При активизации строки объекта ListBoxl, используя имя объекта, // выделяем его из коллекции Shapes и записываем ссылку на этот объект //в переменную WordTextBox. Затем в компонент Edit1 записываем текстовое // содержимое этого объекта. begin W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]).Select; WordTextBox:=W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); Edit1.Text:=WordTextBox.TextFrame.TextRange.Text; end; procedure TForm1.Edit1Change(Sender: TObject); // При активизации компонента Edit1 типа TEdit записываем введенный //в него текст непосредственно в объект TextBox документа Word. begin WordTextBox.TextFrame.TextRange.Text:=Edit1.Text; end; // Следующие две процедуры регулируют величину отступа левой границы // текста от левой границы надписи. procedure TForm1.SpinButton1DownClick(Sender: TObject); begin WordTextBox.TextFrame.MarginLeft:=WordTextBox.TextFrame.MarginLeft-0.25; end; procedure TForm1.SpinButton1UpClick(Sender: TObject); begin WordTextBox.TextFrame.MarginLeft:=WordTextBox.TextFrame.MarginLeft+0.25; end; // Следующие две процедуры регулируют величину отступа правой границы // текста от правой границы надписи. procedure TForm1.SpinButton2DownClick(Sender: TObject); begin WordTextBox.TextFrame.MarginRight:=WordTextBox.TextFrame.MarginRight-0.25; end; procedure TForm1.SpinButton2UpClick(Sender: TObject); begin WordTextBox.TextFrame.MarginRight:=WordTextBox.TextFrame.MarginRight+0.25; end; // Следующие две процедуры регулируют величину отступа верхней границы // текста от верхней границы надписи. procedure TForm1.SpinButton3DownClick(Sender: TObject); begin WordTextBox.TextFrame.MarginTop:=WordTextBox.TextFrame.MarginTop-0.25; end; procedure TForm1.SpinButton3UpClick(Sender: TObject); begin WordTextBox.TextFrame.MarginTop:=WordTextBox.TextFrame.MarginTop+0.25; end; // Следующие две процедуры регулируют величину отступа нижней границы // текста от нижней границы надписи. procedure TForm1.SpinButton4DownClick(Sender: TObject); begin WordTextBox.TextFrame.MarginBottom:=WordTextBox.TextFrame.MarginBottom-0.25; end; procedure TForm1.SpinButton4UpClick(Sender: TObject); begin WordTextBox.TextFrame.MarginBottom:=WordTextBox.TextFrame.MarginBottom+0.25; end; end.
Результат работы приложения можно увидеть на рисунке 1:
Рис.1. Результат работы приложения
Надпись, наряду с текстом и его свойствами, имеет параметры, определяющие другие ее визуальные элементы - заливку (фоновый цвет) и линию границы. Заливка определяется цветом, текстурой, рисунком или узором. Линия границы определяется толщиной, цветом, узором и стилем.
На следующем шаге мы рассмотрим формирование заливки надписи.