Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Понятие внедрения и связывания объектов




Начать обсуждение этого понятия можно с такого простого примера.

Наберем некоторый текст в приложении WordPad, выделим его и выполним команду «Вставить» из меню «Правка» (или подадим клавишную команду Ctrl+C). Теперь запустим приложение Microsoft Word, создадим новый документ или откроем существующий и выполним команду «Вставить» из меню «Правка» этого приложения (или клавишную команду Ctrl+V). Само собой, в нашем Word-документе появится текст, набранный в приложении WordPad, который в дальнейшем мы будем редактировать с помощью редактора Word. При чем здесь технология OLE? Совершенно верно – ни при чем.

Теперь выполним, в приложении Word, тему «Специальная вставка» того же меню «Правка». Появится диалоговое окно, приведенное на рис. 1.

 

 

 

Рис. 1. Окно команды «Правка | Специальная вставка» приложения Word

 

Замечание. Кстати, вставкой текста как рисунка можно воспользоваться, например, для того, чтобы, изменяя размеры рисунка или другие его свойства, добиться специальных эффектов.

Выбор способов вставки «Текст в формате RTF», «Неформатированный текст» или «Текст в кодировке Юникод» приведет практически к тому же результату, что и выполнение обычной команды вставить. Если же выбрать способ «Документ WordPad (объект)», то текст станет внедренными данными (embedded items), что обеспечивает технология OLE.

 

Что же из этого следует? Во-первых, при попытке выделения вставленного текста появляется обрамляющая текст рамка. Во-вторых, с помощью редактора Word такой текст отредактировать не удастся, так как он представляет собой внедренный объект, редактирование которого должно осуществлять то приложение, которое его создало, т.е. WordPad.

Если курсор мыши поместить на внедренный объект и вызвать контекстное меню, то в нем, в частности, будут присутствовать темы «Объект Документ WordPad | Изменить» и «Объект Документ WordPad | Открыть». Выбор любой из этих команд приведет к вызову приложения WordPad, однако выглядеть это будет по-разному.

Выбор команды «Объект Документ WordPad | Изменить» приведет к активации приложения WordPad «на месте» (in-place activation). При этом все темы меню редактора Word, кроме меню «Файл», будут удалены и на их месте появятся все темы меню приложения WordPad, опять-таки кроме меню «Файл». Кроме того, будут удалены панели инструментов редактора Word, но можно, с помощью меню «Вид», сделать видимыми панели инструментов WordPad и воспользоваться ими для редактирования текста. По нажатию клавиши Escape приложение WordPad закроется и приложение Word вновь приобретет привычный вид. Того же результата – возврата к приложению Word – можно достичь и простым щелчком мыши вне окна редактирования WordPad.

Выбор команды «Объект Документ WordPad | Открыть» приведет к запуску WordPad как самостоятельного приложения, в окне которого появится внедренный текст. Единственное отличие в такой активации WordPad от его запуска как отдельного (stand-alone) приложения проявится в изменении тем меню файл: вместо обычных тем WordPad появятся «Обновить Документ», «Сохранить копию как…» и «Выход и возврат к Документ». (Здесь «Документ» – это имя файла.) Выполнение команды «Обновить Документ» приведет к немедленному обновлению открытого документа в Word. Выбор последней темы меню «Выход и возврат к Документ» приведет к завершению приложения WordPad.

Надо отметить, что в любом из двух рассмотренных случаев дальнейшее изменение документа WordPad, из которого были внедрены данные в документ Word, в случае запуска WordPad как самостоятельного приложения, никак не отразится на документе Word.

Проведем еще один эксперимент. Также запустим WordPad как самостоятельное приложение, наберем какой-нибудь текст и сохраним его в файле, допустим, с именем Temp.rtf. Теперь запустим Word, создадим новый документ и выполним тему меню «Вставка | Объект». В результате появится окно, приведенное на рис. 2.

Если выбрать создание объекта, например, такого как кнопка или медиаплеер, то в документе появится его изображение и далее, как правило, необходимо будет написать на VB программу, которая будет реализовать требуемую программу.

 

 

 

Рис. 2. Окно команды «Вставка | Объект» приложения Word

 

Выберем в окне вкладку «Создание из файла», установим флажок «Связь с файлом» (рис. 3) и с помощью кнопки «Обзор» выберем и загрузим файл Temp.rtf. Содержимое файла будет вставлено в документ Word и выделено рамкой.

В контекстном меню «Связанный объект Документ» для вставленного компонента имеются команды «Изменить связь» и «Открыть связь».

Выбор любой из этих команд позволяет редактировать связанный документ непосредственно в (отдельном) окне Word, причем панели и меню Word при этом не изменяются, а все внесенные изменения сохраняются в связанном файле (по команде пользователя «Сохранить») и, естественно, в документе Word. Как только будет закрыто окно Word, в котором редактировался связанный файл, в первом окне Word документ будет автоматически обновлен.

 

Замечание.Так как формат .rtf-файла непосредственно поддерживается сервером Word, то здесь возникает своего рода коллизия или дилемма: какое приложение надо считать «родительским» для данного документа?

 

 

 

Рис. 3. Вкладка «Создание из файла» окна команды «Вставка | Объект» приложения Word

 

Надо отметить, что содержимое связанного файла сохраняется и в документе Word и в своем файле, но последний удалять нельзя, но перемещать можно. Если же его удалить, то редактировать связанные данные уже не удастся, хотя в документе они будут сохранены.

Пример со вставкой файла в формате .rtf в документ Word не является наглядным по той причине, что rtf-файлы непосредственно обрабатываются редактором Word. Если же Вы выполните вставку в документ объекта, созданного, например, приложением Excel, то обнаружите, что этот связанный объект редактируется только приложением Excel в его отдельном окне и при его изменении автоматически обновляется и документ Word.

Команды контекстного меню зависят от типа связанного объекта. Например, при вставке звукового файла появятся команды «Объект пакетèАктивировать содержимое» или «Объект пакетèИзменить пакет».

Приведенная последовательность действий позволяет создавать связанные (linked) компоненты. Преимущество связанных компонентов перед внедренными очевидно: изменение содержимого связанного документа в его «родном» приложении немедленно приводит к изменению содержимого документа, ссылающегося на него. Верно и обратное: изменения, внесенные в связанный компонент в клиентском приложении, вносятся и в исходный документ.

Любые данные, внедрены ли они или связаны, имеют тип, ассоциированный с породившим их приложением. Это приложение, тем не менее, может создавать более чем один тип данных. К примеру, приложение Excel может создавать листы, диаграммы и макролисты (macrosheet). Каждый из этих видов данных однозначно идентифицируется CLSID (идентификатором класса).

 






Серверы и контейнеры

Технология OLE предполагает, в первую очередь, наличие двух приложений: приложение-сервер и приложение-контейнер. Приложение сервер всегда обрабатывает внедренный (embedded) или связанный (linked) OLE-документ, т.е. является «родительским» приложением для документа.

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

Приложением-сервером называют такое приложение, которое может создавать OLE-документы для их последующего использования приложением-контейнером. Приложения-серверы обычно поддерживают технологию перетаскивания (drag and drop) или копируют свои данные в буфер обмена (clipboard), благодаря чему приложение-контейнер может вставить эти данные (в свой документ) как внедренные или связанные. Любое приложение может быть одновременно и сервером и контейнером.

Приложения-серверы могут быть полными серверами или мини-серверами. Большинство приложений-серверов являются самостоятельными (stand-alone) приложениями или полными серверами (full-server). Такие серверы могут выполняться как самостоятельные приложения или могут быть запущены на выполнение приложениями-контейнерами. Мини-серверы могут быть запущены на выполнение только приложениями-контейнерами. т.е. не могут выполняться как самостоятельные приложения. Примерами мини-серверов служат Microsoft Draw и Microsoft Graph.

Таким образом, приложения серверы в общем случае должны разрабатываться так, чтобы они могли функционировать как:

· отдельные самостоятельные приложения;

· полные серверы;

· мини-серверы.

 

Эти режимы функционирования серверов должны быть учтены, в частности, для того, чтобы было возможным слияние меню сервера и приложения контейнера. В качестве такого типового приложения можно назвать все тот же Microsoft Word, который может функционировать и как приложение-контейнер.

Приложение-контейнер – это приложение, которое имеет специальный компонент, который, собственно, и называется контейнером. Компонент контейнер используется для того, чтобы хранить данные внедренного или связанного объекта (OLE-документа) и выполнять некоторые операции над объектом.

Для внедрения в приложение объекта необходимо использовать так называемый OLE-контейнер, правила создания и использования которого регламентированы СОМ. Также в соответствии со спецификацией СОМ должна быть обеспечена активация объекта по месту (in-place activation), т.е. возможность редактирования объекта, находящегося в контейнере, с помощью соответствующего СОМ-сервера.

Контейнеры и серверы не взаимодействуют непосредственно, напрямую, а делают это посредством использования динамически подключаемых OLE-библиотек. Эти библиотеки предоставляют функции, которые вызывают контейнеры и серверы. В свою очередь контейнеры и серверы предоставляют функции обратного вызова (callback functions), которые вызываются OLE-библиотеками. Таким образом, OLE-библиотеки выполняют функцию промежуточного слоя, объединяющего контейнеры и серверы.

Благодаря такой технологии взаимодействия контейнер не должен знать деталей реализации сервера, что позволяет контейнеру получать данные, созданные любым сервером, и при этом не возникает необходимости в определении типа сервера, с которым взаимодействует контейнер. Вследствие этого пользователь приложения-контейнера может воспользоваться преимуществами будущих приложений и форматов данных. До тех пор пока эти новые приложения будут оставаться OLE-компонентами, составной документ (compound document) будет в состоянии включать данные, созданные такими приложениями.



Обработка ошибок










Последнее изменение этой страницы: 2018-04-12; просмотров: 444.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...