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

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

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

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

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

  • AutoActivate, определяющее, каким образом активизируется OLE-документ,
  • State, определяющее состояние OLE-контейнера, и
  • OleClassName, определяющее имя класса (CLSID) OLE-объекта, содержащегося в контейнере.

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

  • InsertObjectDialog - выводит стандартное диалоговое окно Object для выбора типа документа или загрузки его из файла;
  • CreateObject - создает OLE-объект;
  • CreateObjectFromFile - создает OLE-объект на основе существующего файла, содержащего OLE-документ, и помещает его в OLE-контейнер;
  • DestroyObject - уничтожает объект, содержащийся в 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 Кб).

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий