На этом шаге мы рассмотрим объектную модель объекта TextBox.
Уже понятно, что объект TextBox представляет собой систему взаимосвязанных объектов, имеющую древовидную структуру. Для упрощения разберем только ее основные составляющие (рисунок 1).
Рис.1. Объектная модель объекта TextBox
Из рисунка 1 ясно, что доступ к основным визуальным свойствам надписи осуществляется через промежуточные звенья. Например, все свойства текста и сам текст содержатся в свойствах и объектах, принадлежащих объекту TextFrame. Попробуем изменить некоторые его характеристики. Очевидно, чтобы отследить изменения текста, необходимо записать сам текст. Для этого используем свойство Text, в которое можно записать или из которого можно прочитать текст надписи. Обращаем внимание на то, что свойство Text принадлежит объекту Characters, а не объекту TextFrame.
procedure TForm1.Memo1Change(Sender: TObject); //Помещение текста в надпись begin TextBox.TextFrame.Characters.Text:=Memo1.Text; end;
После того как текст записан, изменяем его направление (ориентацию), используя свойство Orientation объекта TextFrame.
procedure TForm1.ComboBox1Change(Sender: TObject); //Направление (ориентация) текста begin case ComboBox1.ItemIndex of 0:TextBox.TextFrame.Orientation:=3; //msoTextOrientationDownward 1:TextBox.TextFrame.Orientation:=1; //msoTextOrientationHorizontal 2:TextBox.TextFrame.Orientation:=6; //msoTextOrientationHorizontalRotatedFarEast 3:TextBox.TextFrame.Orientation:=-2;//msoTextOrientationMixed 4:TextBox.TextFrame.Orientation:=2; //msoTextOrientationUpward 5:TextBox.TextFrame.Orientation:=5; //msoTextOrientationVertical 6:TextBox.TextFrame.Orientation:=4; //msoTextOrientationVerticalFarEast end; end;
Результат работы этих процедур изображен на рисунке 1.
Рис.2. Варианты ориентации текста в TextBox
Установка необходимого шрифта осуществляется настройкой определенных свойств объекта Font. На 145 шаге мы рассматривали, как он выбирается применительно к тексту ячейки. Для других объектов процедура аналогична.
В заключение приведем полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Label1: TLabel; Label2: TLabel; ComboBox1: TComboBox; ListBox1: TListBox; Label3: TLabel; Button4: TButton; 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 ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:variant; TextBox: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 msoTextOrientationHorizontal=1; 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.AddTextbox(msoTextOrientationHorizontal, left, top, 200, 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 и записываем ссылку на этот объект //в переменную TextBox. begin TextBox:=E.ActiveWorkBook.ActiveSheet.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); end; procedure TForm1.Memo1Change(Sender: TObject); //Помещение текста в надпись begin TextBox.TextFrame.Characters.Text:=Memo1.Text; end; procedure TForm1.ComboBox1Change(Sender: TObject); //Направление (ориентация) текста begin case ComboBox1.ItemIndex of 0:TextBox.TextFrame.Orientation:=3; //msoTextOrientationDownward 1:TextBox.TextFrame.Orientation:=1; //msoTextOrientationHorizontal 2:TextBox.TextFrame.Orientation:=6; //msoTextOrientationHorizontalRotatedFarEast 3:TextBox.TextFrame.Orientation:=-2;//msoTextOrientationMixed 4:TextBox.TextFrame.Orientation:=2; //msoTextOrientationUpward 5:TextBox.TextFrame.Orientation:=5; //msoTextOrientationVertical 6:TextBox.TextFrame.Orientation:=4; //msoTextOrientationVerticalFarEast end; end; end.
На следующем шаге мы рассмотрим задание и изменение линий границы.