Шаг 22.
Использование OLE-документов в приложениях. Создание и отображение OLE-документов в формах

    На этом шаге мы рассмотрим правила использования компонента OleContainer.

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

    Для создания и использования OLE-документов в приложениях, разрабатываемых в Delphi, предназначен компонент TOleContainer, находящийся на странице System палитры компонентов. Этот компонент инкапсулирует все интерфейсы, необходимые для создания клиентов OLE-документов.

    Компонент TOleContainer позволяет поместить OLE-документ на поверхность формы. Наиболее часто используемыми свойствами этого компонента являются:

    Наиболее часто используются следующие методы этого компонента:

    Создадим простейшее приложение, иллюстрирующее использование компонента TOleContainer. С этой целью поместим на форму компонент TPanel со свойством Align, равным alClient, на него - компонент TOleContainer и главное меню (можно создать в нем пункты New object и Exit). Панель и меню нужны для отображения панелей инструментов и меню OLE-серверов, обслуживающих отображаемые в компоненте TOleContainer объекты. Если на форме, содержащей компонент TOleContainеr, имеется меню, то меню сервера будет присоединено к меню приложения согласно правилам слияния меню, принятым в Windows. Если компонент TOleContainer помещен на компонент TPanel, последний будет отображать панель инструментов сервера (рисунок 1).


Рис.1. Исходная форма

    Создадим обработчик события, связанный с выбором пункта меню New Object:

procedure TForm1.NewObject1Click(Sender: TObject);
begin
  OleContainer1.InsertObjectDialog; 
end;

    Запустив приложение и щелкнув по этому пункту меню, получим диалоговое окно Insert Object (Вставка объекта) (рисунок 2).


Рис.2. Диалоговое окно вставки объекта

    В списке, представленном в этом диалоговом окне, перечислены все серверы OLE-документов, зарегистрированные на данном компьютере. Можно выбрать один из них (например, Лист Microsoft Excel). Теперь после двойного щелчка на компоненте TOleContainer компонент TPanel будет содержать панель инструментов Microsoft Excel и главное меню этого приложения, а сам OLE-контейнер - новую рабочую книгу Excel (рисунок 3).


Рис.3. Активный объект в OLE-контейнере

    Если тип объекта, отображаемого в OLE-контейнере, известен заранее, можно использовать метод CreateObject компонента TOleContainer:

procedure TForm1.NewExcelworksheet1Click(Sender: TObject); 
begin
  OleContainer1.CreateObject('Excel.Sheet', False); 
end;

    Второй параметр этого метода указывает, отображать ли в виде значка объект внутри OLE-коитейиера.


    Замечание. Хотя что в диалоговом окне Insert Object содержатся только имена серверов OLE-документов, отображать в подобных компонентах можно в принципе любые СОМ-серверы, обладающие пользовательским интерфейсом, в частности многие из элементов управления ActiveX. В случае если необходимо отобразить в OLE-контсйнере пользовательский интерфейс СОМ-сервера, не являющегося сервером OLE-документов, следует указать его идентификатор CLSID в качестве первого параметра метода CreateObject.

    Модифицируем приложение, добавив еще несколько пунктов меню (рисунок 4).


Рис.4. Меню

    Создадим соответствующие обработчики событий:

procedure TForm1.ShowProrerties1Click(Sender: TObject);
begin
 if OleContainer1.OleObjectInterface <> nil then
      OleContainer1.ObjectPropertiesDialog
 else ShowMessage ('OleContainer is empty');
end;

procedure TForm1.Pastespecial1Click(Sender: TObject);
begin
  OleContainer1.PasteSpecialDialog;
end;

    Скомпилируем приложение и на этапе выполнения добавим какой-нибудь объект в OLE-коитейпер. Выбрав команду Action | Show Properties нашего приложения, получим стандартное диалоговое окно с описанием свойств OLE-объекта (рисунок 5).


Рис.5. Диалоговое окно с описанием свойств объекта

    Поместив какие-либо данные в буфер обмена, выберем команду Action | PasteSpecial нашего приложения и получим диалоговое окно специальной вставки объекта из буфера обмена Paste Special (Специальная вставка) (рисунок 6).


Рис.6. Диалоговое окно специальной вставки

    Выбрав тип вставляемого объекта в предложенном списке, мы можем поместить его в OLE-коитейиер (рисунок 7).


Рис.7. Результат вставки

    Текст этого приложения можно взять здесь (5,4 Кб).

    На следующем шаге мы рассмотрим управление объектом внутри контейнера.




Предыдущий шаг Содержание Следующий шаг