На этом шаге мы рассмотрим выноски.
По сути, выноска (объект Callout) является объектом, во многом сходным с надписью, поэтому многие их свойства идентичны. Выноска отличается от надписи дополнительной ломаной линией-указателем. У некоторых вариантов выносок нет линий, ограничивающих текстовую область. Во всех случаях выносок характеристики заливки, расположения текста и линий описываются такими же объектами и свойствами, как и для надписи (у выноски свойства линии применяются и к ломаной линии-указателю). У выноски есть дополнительный объект Adjustments для описания линии-указателя, содержащий описание параметров линии Adjustments.Item(i), где i изменяется от 1 до Adjustments.Count (общее количество точек перелома линии). Создается объект-выноска с помощью метода AddCallout(Type, Left, Top, Width, Height, Anchor), где
В следующем приложении мы создаем выноску с линией-указателем, описываемой тремя точками (msoCalloutThree=3), а затем изменяем горизонтальную и вертикальную координаты конца линии-указателя.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Label1: TLabel; ListBox1: TListBox; Label3: TLabel; Button4: TButton; SpinButton1: TSpinButton; SpinButton2: TSpinButton; Label2: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Memo1Change(Sender: TObject); procedure SpinButton1DownClick(Sender: TObject); procedure SpinButton1UpClick(Sender: TObject); procedure SpinButton2DownClick(Sender: TObject); procedure SpinButton2UpClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:variant; Callout: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 msoCalloutThree=3; 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.AddCallout(msoCalloutThree, left, top, 150, 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 и записываем ссылку на этот объект //в переменную Callout. begin Callout:=E.ActiveWorkBook.ActiveSheet.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); end; procedure TForm1.Memo1Change(Sender: TObject); //Помещение текста в выноску begin Callout.TextFrame.Characters.Text:=Memo1.Text; end; //Изменение горизонтальной координаты procedure TForm1.SpinButton1DownClick(Sender: TObject); begin Callout.Adjustments.item(1):=Callout.Adjustments.item[1]-0.01; end; procedure TForm1.SpinButton1UpClick(Sender: TObject); begin Callout.Adjustments.item(1):=Callout.Adjustments.item[1]+0.01; end; //Изменение вертикальной координаты procedure TForm1.SpinButton2DownClick(Sender: TObject); begin Callout.Adjustments.item(2):=Callout.Adjustments.item[2]-0.01; end; procedure TForm1.SpinButton2UpClick(Sender: TObject); begin Callout.Adjustments.item(2):=Callout.Adjustments.item[2]+0.01; end; end.
На рисунке 1 показано, как стала выглядеть выноска, после того как она была создана, а затем были изменены ее координаты конца линии-указателя, при этом использовались общие для объектов Shapes методы и свойства, описанные ранее.
Рис.1. Создание выноски
В заключение приведем значения параметра Type, определяющего тип выноски.
Константа | Значение |
---|---|
msoCalloutOne | 1 |
msoCalloutOne | 2 |
msoCalloutThree | 3 |
msoCalloutFour | 4 |
На следующем шаге мы рассмотрим линии.