396______________________________________________Глава 6

Главное отличие автоматных объектов от обычных объектов OLE состоит в
том, что автоматные объекты доступны только программно, они создаются и испо-
льзуются при помощи программного кода и, следовательно, в принципе временны.
Они не могут быть внедрены или связаны. Они могут существовать только в тече-
ние времени выполнения ваших программ и не видны непосредственно конечному
пользователю.

Существуют два типа автоматных серверов: внутри-процесса и вне-процесса
(их еще называют локальными). C+4-Builder поддерживает оба типа серверов.

Сервер внутри процесса является DLL (динамически связываемой библиоте-
кой), которая экспортирует автоматные объекты. Поскольку автоматные объекты
поставляются из DLL, а не из других приложений, они являются частью приложе-
ния клиента. Это избавляет от больших накладных расходов, сопутствующих каж-
дому вызову автоматного сервера.

Сервер вне-процесса — это автономный исполняемый файл, экспортирующий
автоматные объекты. Примером этого мог бы быть Microsoft Word. Word имеет не-
которое количество объектов, которые он экспонирует в качестве автоматных. По-
зже будет приведен пример использования Word как автоматного сервера.

Автоматизации OLE, чтобы функционировать правильно, опирается на три
различных источника информации: классы, документы и элементы.

Класс OLE определяет приложение сервера, которое создает автоматный объ-
ект. Например, если класс объекта — документ .doc, то он был создан с помощью
Word.

Документы OLE ссылаются на исходный файл, содержащий данные объекта
OLE. Любой документ OLE должен быть связанным документом (т. е. не внедрен-
ным), потому что данные связанных документов должны храниться в файле.

Элемент OLE определяет, какая часть документа содержит данные, подлежа-
щие связыванию или внедрению в другой документ. Это способ, с помощью кото-
рого вы можете вместо целого документа связывать с другими документами лишь
небольшую часть его данных. Элементы OLE позволяют сократить размеры объек-
тов.

6.4.2 Внедрение и связывание

Теперь рассмотрим основные приемы использования OLE в C++Builder. На
странице System библиотеки визуальных компонентов имеется контейнер OLE Ole-
Container — основной компонент, обеспечивающий внедрение и связывание. Да-
вайте посмотрим его возможности сначала на очень простом примере. Разместите
на форме контейнер OleContainer, компонент главного меню MainMenu, диалоги
OpenDialog и SaveDialog. Можно также разместить панель и на ней быстрые
кнопки, дублирующие основные команды меню. Но меню, как мы увидим ниже,
должно быть обязательно.

Панель, если вы ее ввели, выравнивается по верху формы (Align = alTop), a
контейнер должен занимать всю оставшуюся площадь формы (Align = alClient).
Пример такого приложения приведен на рис. 6.2.

В MainMenu введите меню Объект и в нем разделы Новый, Открыть, Сохранить,
Закрыть. Назовите объекты этих разделов MNew, MOpen, MSave и MClose.

Установите в диалогах в свойстве Filter: «объекты OLE | *.о1е» и «все файлы
*.*». Установите также в диалогах расширение по умолчанию в свойстве Defaul-
tExt равным ole.

Теперь перейдем собственно к программированию. Давайте введем в определе-
нии класса формы глобальную переменную Fname, в которой будет храниться имя
файла объекта OLE:

AnsiString FName;