На этом шаге мы рассмотрим создание произвольных фигур.
Метод AddShape коллекции Shapes предназначен для создания произвольных объектов Shape, в том числе геометрических фигур. Прямые, ломаные и кривые линии создаются посредством специально предназначенных для этого методов, часть которых мы рассмотрели ранее. Синтаксис вызова метода AddShape:
AddShape:=AddShape(Type, Left, Top, Width, Height);
Первый аргумент представляет собой целое число и определяет тип создаваемого объекта, например Type:=msoShapeOvalCallout; соответствует овальной выноске. Число всех возможных типов геометрических фигур составляет несколько десятков. Величины этих констант можно найти в редакторе Visual Basic. Значения аргументов Left, Top, Width, Height определяют положение и размеры создаваемого объекта и имеют тип Extended.
Приведем пример приложения, позволяющего создать произвольную фигуру и настроить в ней положение текста.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; ListBox1: TListBox; Label3: TLabel; Button4: TButton; Label2: TLabel; Edit1: TEdit; UpDown1: TUpDown; Label1: TLabel; Memo1: TMemo; Button5: TButton; Label4: TLabel; ComboBox1: TComboBox; Label5: TLabel; ComboBox2: TComboBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ListBox1Click(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; Shape: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); //Создание фигуры 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.AddShape( StrToInt(Edit1.Text),left, top, 300, 200); 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 и записываем ссылку на этот объект //в переменную Shape. begin Shape:=E.ActiveWorkBook.ActiveSheet.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); end; procedure TForm1.Button5Click(Sender: TObject); //Добавление текста begin Shape.TextFrame.Characters.Text:=Memo1.Text; end; procedure TForm1.ComboBox1Change(Sender: TObject); //Задание горизонтального выравнивания begin case ComboBox1.ItemIndex of 0: Shape.TextFrame.HorizontalAlignment:=-4108; //xlHAlignCenter 1: Shape.TextFrame.HorizontalAlignment:=7; //xlHAlignCenterAcrossSelection 2: Shape.TextFrame.HorizontalAlignment:=-4117; //xlHAlignDistributed 3: Shape.TextFrame.HorizontalAlignment:=5; //xlHAlignFill 4: Shape.TextFrame.HorizontalAlignment:=1; //xlHAlignGeneral 5: Shape.TextFrame.HorizontalAlignment:=-4130; //xlHAlignJustify 6: Shape.TextFrame.HorizontalAlignment:=-4131; //xlHAlignLeft 7: Shape.TextFrame.HorizontalAlignment:=-4152; //xlHAlignRight end; end; procedure TForm1.ComboBox2Change(Sender: TObject); //Задание вертикального выравнивания begin case ComboBox2.ItemIndex of 0: Shape.TextFrame.VerticalAlignment:=-4107; //xlHAlignRight 1: Shape.TextFrame.VerticalAlignment:=-4108; //xlVAlignCenter 2: Shape.TextFrame.VerticalAlignment:=-4117; //xlVAlignDistributed 3: Shape.TextFrame.VerticalAlignment:=-4130; //xlVAlignJustify 4: Shape.TextFrame.VerticalAlignment:=-4160; //xlVAlignTop end; end; end.
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
Текст в созданный объект добавляем с помощью тех же методов, что и при работе с объектом Callout, т.к. методы и свойства области текста (TextFrame) для двух этих объектов полностью идентичны.
На следующем шаге мы рассмотрим объекты WordArt.