Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Windows Movie Maker 2.6
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Программирование -> C++ Builder -> Использование COM-технологии в C++ Builder

2. Использование OLE-документов в приложениях C++Builder

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

2.1 Создание OLE-объектов

Компонент TOleContainer позволяет поместить OLE-объект на поверхности формы. Основные свойства этого компонента: AutoActivate - определяет, каким образом активизируется OLE-объект, OleClassName - имя класса OLE-объекта, содержащегося в контейнере. Основные методы: InsertObjectDialog - выводит стандартную диалоговую панель Object для выбора типа объекта или загрузки его из файла, CreateObject - создает OLE-объект, DestroyObject - уничтожает объект.

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

Форма  с TOleContainer

Рис.7. Форма с TOleContainer

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleContainer1->InsertObjectDialog();
}

Запустив приложение и нажав на кнопку, получим диалог для вставки объекта:

Диалог вставки объекта

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

В списке перечислены все OLE-серверы, зарегистрированные на данном компьютере.

Можно выбрать один из них (например, документ Word). Теперь после двойного щелчка на объекте TOleContainer получим на компоненте TPanel инструментальную панель MS Word, главное меню и сам документ.

Активный объект в  OleContainer<

Рис.9. Активный объект в OleContainer

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleContainer1->CreateObject("Word.Document",True);
}

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

Модифицируем приложение, добавив еще две кнопки с надписями "Свойства" и "Вставка", и создадим соответствующие обработчики событий:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
OleContainer1->ObjectPropertiesDialog();
}
//--------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
OleContainer1->PasteSpecialDialog();
}

Скомпилируем приложение. Добавим какой-нибудь объект в OLEContainer.

Нажав на кнопку "Свойства", получим стандартный диалог с описанием свойств объекта.

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

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

Нажав кнопку "Вставить", получим диалог вставки объекта:

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

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

Выбрав тип вставки объекта, можем вставить его в OLEContainer:

2.2 Хранение OLE-объектов в базах данных

Для хранения OLE-объектов могут быть использованы как поля специальных типов (поддерживаемые, например, Paradox или dBase)., так и обычные blob-поля.

Основная идея такого приложения заключается в том, что OleContainer позволяет сохранить содержащийся в нем объект в файле или в памяти, а затем поместить его в blob-поле.

Модифицируем созданное приложение, добавив компоненты TTable, TdataSource и TDBNavigator и заменив надписи на кнопках на "Сохранить" и "Показать". Создадим копию таблицы biolife.db из набора демонстрационных примеров, свяжем с ней компонент TTable и создадим набор объектов TFields. Свяжем TDataSource c TTable и TDBNavigator с TDataSource.

Изменим обработчики событий:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (OleContainer1->OleObjectInterface!=NULL)// определим, не пуст ли контейнер
{OleContainer1->SaveToFile("aaa.dat");
Table1->Edit();
Table1Graphic->LoadFromFile("aaa.dat");}
}
//-----------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Table1Graphic->SaveToFile("aaa.dat");
OleContainer1->LoadFromFile("aaa.dat");
}

Теперь, если TOleContainer не пуст, при нажатии на кнопку "Сохранить" его содержимое сохранится в blob-поле таблицы, а при нажатии на кнопку "Показать" OLE-объект из blob-поля отобразится в TOleContainer.

Рисунок 12

Рис.12. Неактивный OLE-объект, изъятый из blob-поля при нажатии на кнопку "Показать"

2.3 Использование свойств OleContainer

Как определить характеристики OLE-объекта, помещенного в OleContainer, и управлять им?

Имя класса OLE-объекта можно получить с помощью свойства OleClassName. Список доступных команд доступен с помощью свойства ObjectVerbs. Метод DoVerb позволяет вызвать одну из этих команд, ссылаясь на ее порядковый номер в спискe. Целочисленное свойство PrimaryVerb содержит номер команды из этого списка, выполняющейся при активации OLE-объекта. Состояние контейнера можно определить с помощью свойства State.

Для иллюстрации их работы на панель с OleContainer поместим компоненты TComboBox и TEdit и изменим обработчики событий:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleContainer1->CreateObject("Word.Document",True);
Edit1->Text=OleContainer1->OleClassName;
ComboBox1->Items=OleContainer1->ObjectVerbs;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Click(TObject *Sender)
{
if (OleContainer1->State!=osEmpty)
OleContainer1->DoVerb(ComboBox1->ItemIndex);
}
//---------------------------------------------------------------------------

Пример использования свойств TOleContainer

Рис.13 Пример использования свойств TOleContainer

2.4 Вместо заключения

Этой статьей заканчивается цикл, посвященный использованию COM-технологии в C++Builder. Мы рассмотрели создание различных типов COM-серверов и COM-клиентов (элементы управления ActiveX и содержащие их контейнеры, серверы и контроллеры автоматизации, OLE-документы и OLE-контейнеры) и наиболее типичные примеры их использования.

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

Отметим, однако, что, помимо COM, существуют и другие технологии, позволяющие создавать и использовать объекты, предоставляющие сервисы другим приложениям. В общем случае, например, при использовании технологии CORBA(Common Object Request Broker Architecture) или DCE (Distributed Computing Environment) такие объекты могут функционировать не только под управлением празличных версий Windows, как в случае COM, но и под управлением других операционных систем, что позволяет повторно использовать код не только на уровне операционной системы, но и на уровне всей сети, реализуя тем самым распределенную обработку данных. Но это тема уже другого цикла статей...

 
Популярные книги

Общая информатика. Универсальный курс

Подробнее

SQL для "чайников", 5-е издание

Подробнее

Дизайн помещений и интерьеров в 3ds max 7 (+CD)

Подробнее


 
Новости ИТ
09.01.2009  Exeda -- корпоративный цифровой ассистент с Android Linux
09.01.2009  Правительство Вьетнама массово переходит на Open Source
09.01.2009  Windows 7 build 7000
09.01.2009  Silicon Power представила скоростную SDHC
09.01.2009  CES 2009: RealView 360 3D Desktop Scanner - настольный 3D-сканер, один из первых в мире
09.01.2009  W90 - очень быстрый мультимедийный ноутбук ASUS «Ultimate-уровня»
09.01.2009  CES 2009: SanDisk представила семейство G3 - самых быстрых SSD-накопителей на флэш-памяти MLC
09.01.2009  ZOTAC GeForce GTX 285 и GTX 285 AMP! Edition - 3D-ускорители для геймеров на новом GPU NVIDIA
09.01.2009  Net Applications: в декабре доли Firefox и Chrome росли за счет IE
09.01.2009  Imation говорит о «новом классе» SSD и первом в отрасли полном наборе для модернизации на основе SSD
09.01.2009  Маршрутизатор D-Link Xtreme N DIR-685 может играть роль NAS, сервера печати... и цифровой фоторамки
09.01.2009  Очень тонкая фотокамера Pentax Optio P70 имеет разрешение 12 Мп
09.01.2009  pureSilicon 1TB Nitro - первый в мире 2,5-дюймовый SSD объемом 1 ТБ
09.01.2009  Дебютировали мобильные GPU ATI Mobility Radeon HD 4000
09.01.2009  NVIDIA GeForce GTX 285 и GTX 295 представлены официально
09.01.2009  Scythe выпустила процессорный кулер Mugen 2
09.01.2009  Optio E70 - новая компактная камера Pentax начального уровня
09.01.2009  Новый iPhone получит четырехъядерный процессор?
08.01.2009  FreeBSD 7.1-RELEASE -- обновление операционной системы
08.01.2009  Появилась сборка Om 2008.12 для Neo FreeRunner от bytestore
 
Полезно

 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100