Шаг 152.
Автоматизация Microsoft Excel. Работа с объектами в книге Excel.
Надпись (окончание)

    На этом шаге мы рассмотрим объектную модель объекта 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.
Текст этого приложения можно взять здесь (8,2 Кб).

    На следующем шаге мы рассмотрим задание и изменение линий границы.




Предыдущий шаг Содержание Следующий шаг