logo search
Программирование в среде Delphy / Программирование в среде Delphi

27.2. Примеры использования серверов автоматизации

Позднее связывание

В данном примере создается Ole объект Word приложения из MS Office, в нем создается новый документ, в который записывается текущая дата, и он сохраняется на диске.

Users ….ComObj;

procedure TForm1.Button1Click(Sender: TObject);

var v:olevariant;

begin

v:=CreateOleObject('Word.Application'); // Создание Word сервера

V.Application.documents.add(); // Создание нового документа

// Записываем текущую дату

v.Application.ActiveDocument.Range.InsertAfter(Now);

// Сохраняем документ на диске

v.Application.ActiveDocument.SaveAs('d:\my\d1.doc');

v.Application.Quit(True,0); // Закрываем сервер

end;

На этапе проектирования данной программы Delphi не дает никаких подсказок по написанию методов и свойств объектов и не проверяет правильность их использования. Ошибки могут возникнуть только на этапе выполнения программы.

Использование Dispatch–интерфейса

Здесь создается Word–сервер с помощью методов Dispatch–интерфейса и открывается существующий на диске файл. При этом не используются никакие компоненты доступа к серверам автоматизации:

Users …comobj, OleServer, WordXP;

procedure TForm1.Button2Click(Sender: TObject);

var v:OLEVariant;

Word1:_ApplicationDisp; // Определяем указатель на DispInterface

begin

v:='d:\my\d1.doc'; // Задаем имя файла

// Создаем Word–сервер с помощью метода диспетчерского интерфейса

Word1:=CoWordApplication.Create as _ApplicationDisp;

// Открываем документ

(Word1.Documents as DocumentsDisp).Open(v,

// Далее идут пустые параметры типа OleVariant

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Emptyparam);

// Показываем имя файла документа и путь к нему

ShowMessage((Word1.Application as _application).

ActiveDocument.Path+' '+

(Word1.Application as _application).ActiveDocument.Name);

// Закрываем сервер

Word1.Quit(Emptyparam,Emptyparam,Emptyparam);

end;

В этом примере на этапе проектирования Delphi подсказывает, какие есть методы и свойства у объекта, и контролирует их использование.

Использование VTable интерфейса

В этом примере из странички компонентов Servers на форму помещается компонент WordApplication1. После нажатия кнопки Button3 открывается документ d1.doc и в нем производится замена набора символов «@1» на текущую дату и время. Измененный таким образом документ записывается в файл d2.doc:

procedure TForm1.Button3Click(Sender: TObject);

var v1,v2,oldstr,newstr,replaceend:OleVariant;

begin

v1:='d:\my\d1.doc'; // Исходный документ

v2:='d:\my\d2.doc'; // Выходной документ

WordApplication1.Documents.Open(v1, // Открываем документ

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Emptyparam);

Replace:=1; // Определяем параметр замены

Oldstr:='@1'; // Заменяемый шаблон

Newstr:=Datetostr(now); // Строка замены

While // Цикл замен

WordApplication1.ActiveDocument.Range(Emptyparam,Emptyparam).

Find.Execute(oldstr,

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Newstr,replace,

Emptyparam,Emptyparam,Emptyparam,Emptyparam)

do;

WordApplication1.ActiveDocument.SaveAs(v2, // Сохраняем документ

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam,

Emptyparam,Emptyparam,Emptyparam,Emptyparam,Emptyparam);

// Закрываем сервер

WordApplication1.ActiveDocument.Close(Emptyparam,Emptyparam,

Emptyparam);

end;

В данном примере методы сервера вызываются напрямую с использованием таблицы VTable, что значительно ускоряет работу программы по сравнению с применением позднего связывания.