Пятница, 17.05.2024, 13:55
Главная Регистрация RSS
Приветствую Вас, Гость
Главная » Delphi и Microsoft Office » Подключение в приложение и активизация серверов СОМ. Часть 3
08:23

Подключение в приложение и активизация серверов СОМ. Часть 3

Теперь рассмотрим общие приемы работы с объектами серверов на примере сервера Word и Excel. Работа именно с этими серверами наиболее перспективна для приложений Delphi. Возможны 2 варианта использования серверов: перенос на форму со страницы Servers соответствующих компонентов WordApplication и ExcelApplication, или программное создание объектов классов TWordApplication и TExcelApplication. В первом случае вы можете установить некоторые опубликованные свойства серверов во время проектирования. А объект сервера создастся автоматически. Также автоматически в приложение занесутся ссылки на соответствующие модули. Во втором варианте вы должны создавать объект сервера и задавать его свойства программно. Например, для сервера Word программное создание объекта без использования компонента делается следующим образом:

var WordApplicationl: TWordApplication; 
...
WordApplicationl := TWordApplication.Create(self);
... // операторы задания свойств

Приведенный оператор создания объекта сервера может быть вставлен, например, в обработчик события OnCreate формы.

Если вы используете компонент сервера, то можете во время проектирования задать его свойство AutoConnect. Оно определяет, должен ли сервер автоматически загружаться с началом выполнения приложения. Если установить AutoConnect = true, то соединение с сервером произойдет в момент начала выполнения вашего приложения. Если же оставить значение AutoConnect = false, принятое по умолчанию, то соединение с сервером можно установить вызовом метода Connect. Например:

WordApplicationl.Connect;

Впрочем, совершенно не обязательно устанавливать соединение свойством AutoConnect или методом Connect. Соединение автоматически устанавливается, когда выполняется вызов какого-то метода сервера или задается значение какому-то его свойству.

При использовании свойства AutoConnect надо иметь в виду, что установка в true влияет только при запуске приложения, т.е. если это свойство установлено во время проектирования. Задание AutoConnect = true во время выполнения приложения ни на что не влияет. Так что если вы не используете компонент сервера, задание этого свойства бессмысленно.

Свойство ConnectKind определяет, как именно осуществляется соединение с сервером. Это свойство может принимать следующие значения:

ckRunningOrNewПодсоединиться к выполняющемуся серверу или создать новый экземпляр сервера.
ckNewInstanceВсегда создавать новый экземпляр сервера.
ckRunningInstanceТолько подсоединиться к выполняющемуся серверу.
ckRemoteПодсоединиться к удаленному серверу. Эта опция должна сочетаться с заданием свойства RemoteMachineName.
ckAttachToInterface He подсоединяться к серверу. Вместо этого приложение обеспечивает интерфейс методом ConnectTo (об этом методе будет сказано позднее). Опция ckAttachToInterface не может использоваться совместно с установкой в true свойства AutoConnect.

По умолчанию значение ConnectKind равно ckRunningOrNew. При этом, если в момент соединения имеется выполняющийся сервер (применительно к WordApplication — если Word открыт), то приложение соединится именно с этим выполняющимся экземпляром сервера. Если же в этот момент соответствующий сервер не выполняется, то будет создан новый экземпляр сервера (в нашем случае будет осуществлен запуск Word).

Если значение ConnectKind равно ckNewInstance, то приложение всегда создает новый экземпляр сервера. Если значение ConnectKind равно ckRunninglnstance, то приложение всегда соединяется с выполняющимся сервером. В этом случае, если выполняющегося сервера нет, будет сгенерировано исключение EOleSysError. Поэтому при ConnectKind = ckRunninglnstance, если нет уверенности, что в момент соединения на компьютере имеется выполняющийся сервер, соединение надо осуществлять, например, так:

uses comobj; 
...
try
WordApplicationl.ConnectKind := ckRunningInstance;
WordApplicationl.Connect;
except
On EOleSysError do begin
Application.MessageBox(
'На компьютере нет выполняющегося в данный момент Word’,
'Приложение будет закрыто', МВ_0К + MB_ICONEXCLAMATION);
Application.Terminate;
end;
end;

Приведенный код перехватывает исключение EOleSysError и выдает пользователю соответствующее сообщение. Только не забудьте вставить в приложение приведенный выше оператор uses, подключающий модуль comobj, в котором объявлено исключение EOleSysError. Автоматически этот модуль не подключится. Значение ConnectKind = ckRemote используется, если надо связаться с удаленным сервером. В этом случае свойство RemoteMachineName должно указывать компьютер, на котором выполняется удаленный сервер.

Категория: Delphi и Microsoft Office | Просмотров: 1611 | Добавил: PeKpyT | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]