На этом шаге мы рассмотрим использование OLE-объектов.
Коллекция Shapes позволяет добавлять в документ объекты, созданные и отображаемые с помощью программ-серверов OLE (OLE-серверов). OLE-объекты в документах Word могут отображаться так же, как они отображаются в приложениях, предназначенных для их создания и редактирования. Если приложение, сопоставленное объекту, не является OLE-сервером, то объект отображается в виде ярлыка. Возможности Word в управлении такими объектами скудны и ограничиваются заданием координат и размеров. Кроме того, можно активизировать данные объекты.
Чтобы управлять внутренними свойствами OLE-объекта, внедренного в документ, необходимо получить доступ к объектам и методам этого объекта. OLE-объект создается с помощью метода AddOLEObject. Спецификация вызова объекта включает ряд аргументов, передаваемых при вызове метода. Аргументами метода являются имя класса, имя файла, признак связи с файлом на диске и т. д. Есть два синтаксиса вызова метода AddOLEObject. При этом создаются объекты, имеющие некоторые отличия (вы можете разобраться с этими отличиями самостоятельно). Здесь мы рассмотрим создание OLE-объекта и его активизацию в документе Word на примере следующего приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ComCtrls; type TForm1 = class(TForm) Button2: TButton; Button6: TButton; ListBox1: TListBox; Label1: TLabel; Button3: TButton; Button4: TButton; Button5: TButton; OpenPictureDialog1: TOpenPictureDialog; Button7: TButton; procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button7Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; SP:Variant; {$R *.dfm} 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; procedure TForm1.Button3Click(Sender: TObject); // Загружаем в ListBoxl имена объектов коллекции Shapes //из документа Word. var a: Integer; begin ListBox1.Items.Clear; for a:=1 to W.ActiveDocument.Shapes.Count do ListBox1.Items.Add(W.ActiveDocument.Shapes.Item(a).Name); end; procedure TForm1.ListBox1Click(Sender: TObject); // При активизации строки объекта ListBox1, используя имя объекта, // выделяем его из коллекции Shapes и записываем ссылку на этот объект //в переменную SP. begin W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]).Select; SP:=W.ActiveDocument.Shapes.Item( ListBox1.Items.Strings[ListBox1.ItemIndex]); end; procedure TForm1.Button4Click(Sender: TObject); //Добавление листа Excel begin W.ActiveDocument.Shapes.AddOLEObject(ClassType:='Excel.Sheet', Left:=10, Top:=10, Width:=100, Height:=100); end; procedure TForm1.Button5Click(Sender: TObject); //Добавление рисунка Paint begin if OpenPictureDialog1.Execute then W.ActiveDocument.Shapes.AddOLEObject(ClassType:='Paint.Picture', FileName:=OpenPictureDialog1.FileName, Left:=10, Top:=10, Width:=100, Height:=100); end; procedure TForm1.Button7Click(Sender: TObject); //Активация выбранного объекта begin SP.Activate; end; end.
Третья с конца процедура создает новый лист Excel, предпоследняя создает OLE-объект - Paint.Picture и загружает реальный рисунок из файла. Последняя процедура активизирует OLE-объект, что приводит к запуску программы - OLE-сервера. Создадим несколько OLE-объектов различных типов как с помощью приведенного исходного текста, так и обычным путем - как это делают пользователи. Запустим приложение и получим список OLE-объектов. После чего мы можем выбрать и активизировать любой из них.
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим настройку страницы.