На этом шаге мы рассмотрим простые примеры работы с объектом "Надпись".
Рассмотрим некоторые свойства коллекции Shapes и ее элементов на примере надписи (объекта TextBox).
Для этого создадим в документе такой объект. Рассмотрим следующую программу:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button6: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание надписи const msoTextOrientationHorizontal=1; var left,top:Extended; begin left:=10; top:=11; 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 Close; end; end.
Текст этого приложения можно взять здесь (5,7 Кб).
Результат работы приложения можно увидеть на рисунке 1:
Рис.1. Результат работы приложения
Примечание.
Для задания координат надписи можно использовать переменные типа real, но для Office ХР необходимо
использовать только тип Extended (var left, top: Extended).
Для создания нового объекта мы используем метод AddTextbox коллекции Shapes. Первый аргумент
этого метода имеет тип integer и задает ориентацию расположения текста этого объекта, последний аргумент
имеет тип Range и определяет область, где будет создан объект, - в нашем случае это активный документ.
Остальные аргументы типа Extended определяют координаты и размеры объекта. Для создания надписи с
вертикальным размещением текста необходимо в качестве первого аргумента использовать константу
msoTextOrientationVertical=5. С помощью константы msoTextOrientationDownward=3 или
msoTextOrientationUpward=2 можно задать направление текста при вертикальной ориентации (сверху вниз
или снизу вверх).
Если приведенный текст приложения, а в частности процедуру Button1Click видоизменить так, чтобы
при создании нового объекта учитывались координаты и размеры последнего, а также размеры страницы, то
ее выполнение может привести к результату, представленному на рисунке 2.
Рис.1. Результат работы измененного приложения
Вот текст приложения:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button6: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W: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; end.
Текст этого приложения можно взять здесь (6,6 Кб).
На следующем шаге мы рассмотрим методы элементов коллекции.