До появления Windows и его многочисленных возможностей приложения работали изолированно. Например, чтобы дополнить текст данными электронной таблицы, надо было выходить из редактора, загружать программу электронных таблиц и начинать работу с числами.
Благодаря огромным возможностям Windows, таким как многозадачность, буфер обмена, OLE (object linking and embedding), приложения стали интегрированными. OLE – одна из важнейших технологий обмена данными между приложениями Microsoft в настоящее время.
Для перемещения текста и графики из одного приложения в другое через буфер обмена применяются простые операции вырезания, копирования и вставки. Однако эти способы имеют три основных недостатка:
Во-первых, если данные в исходном документе меняются, то документ, содержащий копию, становится устаревшим.
Во-вторых, затруднено внесение изменений в скопированные данные.
В-третьих, копирование данных между документами часто приводит к нерациональному использованию дискового пространства.
Было бы хорошо, если бы не приходилось беспокоиться об обновлении общих данных и иметь систему, которая выполняет три задачи:
1) если данные изменяются в исходном приложении, обновляет скопированные данные автоматически;
2) если требуется редактировать скопированные данные, система облегчает поиск исходного приложения и файла данных;
3) позволяет хранить данные другого приложения в документе, не требуя содержания отдельных документов для исходных данных.
Всем этим требованиям отвечает технология OLE. В свое время Microsoft надеялась, что будущее за технологией DDE (dynamic data exchange). Работа DDE заключается в установке между двумя приложениями коммуникационного канала, по которому происходит передача данных. К сожалению, эта технология потерпела поражение. Она оказалась непроизводительной, ей не хватало цельности и гибкости.
Технология OLE облегчила для пользователей обмен данными между приложениями, обеспечила автоматическое обновление общих данных и смешивание нескольких типов данных в одном документе без использования лишнего дискового пространства.
Основные понятия OLE: объект, приложение сервера и приложение контейнера.
Объектами являются не только данные (фрагменты текста, графики, звук, электронная таблица и т. д.), но и одна или несколько функций создания, доступа и использования этих данных.
Приложение сервера – это приложение, используемое для создания и редактирования объекта. Оно называется еще исходным приложением. Приложение контейнера – это приложение, используемое для хранения связанного или внедренного объекта, созданного с помощью приложения сервера. Оно называется еще приложением клиента.
Архитектура OLE состоит из составного документа, связывания объекта и внедрения объекта.
Составным документом называется документ, который содержит, помимо базовых данных, один или несколько объектов, созданных с помощью других приложений. Базовые данные документа и его объекты могут иметь совершенно разные форматы данных. Например, документ текстового редактора может включать объект диапазона электронной таблицы или звуковой клип. Приложение контейнера не обязательно должно распознавать такие форматы данных. Ему достаточно знать имя приложения сервера, создавшего объект, и способ отображения данных. Вся эта информация предоставляется как часть объекта, поэтому она всегда доступна приложению контейнера.
Составной документ создается путем связывания объектов с документами или внедрения их в документ, что следует из самой технологии OLE. Связь и внедрение объектов (OLE) – способ передачи и обмена информацией между приложениями.
Связывание – это один из способов OLE, применяемых для вставки объекта в файл приложения контейнера и создания, таким образом, составного документа.
Связывание имеет много преимуществ, но наиболее существенны из них три:
Во-первых, связь позволяет приложению контейнера проверять исходный документ на изменения. Если обнаруживается, что данные изменены, OLE воспользуется связью для автоматического обновления объекта.
Во-вторых, поскольку объект знает, где найти приложение сервера и исходный документ, его можно редактировать непосредственно в приложении сервера. В большинстве случаев при выполнении двойного щелчка на объекте осуществляется вызов сервера и загрузка исходного файла. Затем можно отредактировать исходные данные и закрыть приложение сервера, а объект будет автоматически обновлен.
В-третьих, поскольку исходные данные хранятся в отдельном файле, их можно повторно использовать в других составных документах и изменять непосредственно в приложении сервера.
Связанный объект – представление объекта, вставленного в документ; при этом собственно объект существует в отдельном файле, и при его изменении связанный объект отображает эти изменения.
Одна из проблем, обусловленная связыванием, заключается в том, что при распространении составного документа приходится передавать и исходный документ. Подобным же образом, если исходный документ переносится на другой диск системы, связь прерывается.
Внедрение разрешает эти проблемы. При внедрении всё необходимое для отображения и обработки объекта хранится в нем самом. Отпадает необходимость в исходном файле, что позволяет распространять составной документ, не заботясь о целостности данных.
Фактически внедрение позволяет создавать объект сервера прямо из приложения контейнера. Например, если вы работаете с Word для Windows, можно вставлять в документ новый объект электронной таблицы непосредственно из Word. OLE запустит программу Excel, что позволяет создать новый объект, но после выхода из Excel объект будет существовать только в составном документе Word. Отдельный файл Excel создаваться не будет.
Следует заметить, что некоторые приложения могут исполнять роль только OLE-серверов. Это значит, что они не являются самостоятельными приложениями, а следовательно, не могут создавать собственные файлы. Эти программы существуют только для создания OLE-объектов для составных документов. Примерами являются приложения WordArt и Microsoft Graph.
Рассмотрим применение OLE для создания составных документов (соответствующие иллюстрации см. в Приложениях 1-4 Файла материалов):
СВЯЗЫВАНИЕ ЧЕРЕЗ БУФЕР ОБМЕНА. Если исходным приложением является OLE-сервер, при операции вырезания или копирования в буфер обмена передаются не только выделенные данные, но и различные фрагменты данных, называемые форматами буфера обмена. Приложение контейнера использует эти форматы для выполнения связывания.
После помещения данных в буфер обмена надо переключиться на приложение контейнера и поместить курсор в место вставки данных. Затем следует выбрать команду “Правка - Специальная вставка”, чтобы открыть диалоговое окно “Специальная вставка” (см. рис. 2.1).
Рис.2.1
В списке “Как” перечислены возможные форматы данных, их можно игнорировать. Для создания связи между контейнером и сервером надо использовать опцию “Вставить связь”. Чтобы данные в документе-контейнере отображались в виде пиктограммы, надо установить флажок “В виде значка”. После этого необходимо щелкнуть на кнопке “ОК”, чтобы вставить связанный объект в контейнер.
ВСТАВКА ФАЙЛА В КАЧЕСТВЕ СВЯЗАННОГО ОБЪЕКТА. В качестве связанного объекта можно выбрать целый файл. Например, при вставке связанной таблицы Excel в документ Word объект контейнера будет реагировать на все изменения исходной рабочей таблицы, включая добавление и удаление данных, форматирования и т.д.
Для вставки целого файла в качестве связанного объекта надо установить курсор в приложении контейнера там, где требуется выполнить вставку. В зависимости от приложения выбрать команду “Вставка – Объект” или “Правка – Вставить объект”, чтобы открыть диалоговое окно “Вставка объекта”. В диалоговом окне выбрать опцию “Создать из файла” (см. рис. 2.2).
Рис.2.2
В появившемся диалоговом окне ввести имя файла или щелкнуть на кнопке “Обзор”, чтобы выбрать файл. Установить флажок “Связать с файлом” и щелкнуть на кнопке “ОК”. Объект будет вставлен.
ВНЕДРЕНИЕ ЧЕРЕЗ БУФЕР ОБМЕНА. Если исходным приложением служит OLE-сервер, вырезанный или скопированный в буфер обмена объект содержит форматы связи и все форматы, позволяющие приложению контейнера внедрять данные.
Для вставки данных, помещенных в буфер, надо переключиться на приложение контейнера, установить курсор в место вставки и выбрать команду “Правка – Специальная вставка”, чтобы открыть диалоговое окно “Специальная вставка” (см. рис.2.3).
В списке “Как” надо выбрать формат объекта и обязательно установить опцию “Вставить”. Если требуется отобразить данные в документе-контейнере в виде пиктограммы, надо установить флажок “В виде значка”. После этого надо щелкнуть на кнопке “ОК”, и внедренный объект будет вставлен в контейнер.
Рис.2.3.
ВНЕДРЕНИЕ С ПОМОЩЬЮ ПЕРЕТАСКИВАНИЯ. Приложения сервера и контейнера поддерживают и внедрение путем перетаскивания. Это значит, что можно выделить некоторые данные в документе сервера и перетащить их с помощью мыши в окно контейнера. Для большинства приложений при этом происходит перемещение данных, но это не всегда так. Чтобы обеспечить именно перемещение данных, надо при перетаскивании удерживать клавишу <Shift>. Если данные надо копировать, следует удерживать клавишу <Ctrl> (см. рис 2.4).
ВСТАВКА НОВОГО ВНЕДРЕННОГО ОБЪЕКТА. Если объекта, который требуется внедрить, не существует, а создавать отдельный файл не требуется, OLE позволяет вставлять новый объект в окно приложения контейнера. В приложении контейнера необходимо указать курсором место вставки и выбрать команду “Вставка – Объект” или “Правка – Вставить объект”. В диалоговом окне “Вставка объекта” в списке “Тип объекта” надо выделить тип объекта, который требуется создать и щелкнуть кнопку “ОК” (см. рис.2.5).
Рис.2.4
Рис.2.5
В возникшем окне приложения сервера для выбранного типа объекта необходимо создать предназначенный для внедрения объект и для выхода из приложения сервера щелкнуть вне объекта.
ВСТАВКА ВНЕДРЕННОГО ФАЙЛА. В качестве внедренного объекта можно вставить целый файл (а не объект из файла). Это удобно, если требуется ввести изменения в файл в окне контейнера, не затрагивая оригинал.
Для этого в окне документа-контейнера надо установить курсор в место вставки объекта. В зависимости от приложения выбрать команду “Вставка – Объект” или “Правка – Вставка объект” для того, чтобы открыть диалоговое окно. В диалоговом окне, в зависимости от приложения, выбрать опцию “Создание из файла” или установить переключатель “Создание из файла”. В появившемся диалоговом окне ввести имя файла или, щелкнув на кнопке “Обзор”, выбрать “Имя файла” (см.рис.2.6).
Рис.2.6
Затем надо щелкнуть на кнопке “ОК”, чтобы выполнить вставку внедренного файла.
Рассмотренная технология получила широкое применение с появлением Windows 95, так как здесь OLE встроена в операционную систему. Дальнейшее развитие этот подход получил в Windows 98. Все приложения Windows 95 и Windows 98, обрабатывающие документы, гарантированно отвечают стандартам OLE, поэтому результат работы с ними всегда предсказуем.