Комп’ютерна документація від А до Я - C Builder
Остання зі специфікацій COM, що розглядається в даному циклі статей - OLE-документи. Це складові документи, що містять впроваджені або пов'язані об'єкти, створені іншими програмами, що виступають у цьому випадку як OLE-сервери. Ця специфікація описує правила створення контейнерів для таких документів з активацією за місцем. Для створення та використання у додатках таких впроваджених або пов'язаних об'єктів призначений компонент TOleContainer.
2.1 Створення OLE-об'єктів
Компонент TOleContainer дозволяє розмістити OLE-об'єкт на поверхні форми. Основні властивості цього компонента: AutoActivate - визначає, яким чином активізується OLE-об'єкт, Ole Створимо найпростіший приклад використання OleContainer. З цією метою помістимо на форму компонент TPanel з властивістю Align, що дорівнює alClient, на нього - компонент TOleContainer, кнопку та головне меню (можна створити в ньому один пункт). Панель і меню потрібні для відображення інструментальних панелей і меню OLE-серверів, що обслуговують об'єкти, що відображаються в TOleContainer.

Рис.7. Форма з TOleContainer
Створимо обробник події, пов'язаний із натисканням на кнопку:
Запустивши програму та натиснувши на кнопку, отримаємо діалог для вставки об'єкта:

Рис.8. Діалог вставки об'єкта
У списку перераховані всі сервери OLE, зареєстровані на цьому комп'ютері.
Можна вибрати один із них (наприклад, документ Word). Тепер після подвійного натискання на об'єкті TOleContainer отримаємо на компоненті TPanel інструментальну панель MS Word, головне меню і сам документ.

Рис.9. Активний об'єкт у OleContainer
Якщо тип об'єкта, що включається в TOleContainer, відомий заздалегідь, можна використовувати метод CreateObject:
Другийпараметр цього методу вказує, чи відображати об'єкт усередині OleContainer у вигляді піктограми.
Модифікуємо додаток, додавши ще дві кнопки з написами "Властивості" та "Вставка", і створимо відповідні обробники подій:
Скомпілюємо додаток. Додамо якийсь об'єкт в OLEContainer.
Натиснувши кнопку "Властивості", отримаємо стандартний діалог з описом властивостей об'єкта.

Рис.10. Діалог з описом властивостей об'єкта
Натиснувши кнопку "Вставити", отримаємо діалог вставки об'єкта:

Рис.11. Діалог спеціальної вставки
Вибравши тип вставки об'єкта, можемо вставити його в OLEContainer:
2.2 Зберігання OLE-об'єктів у базах даних
Для зберігання OLE-об'єктів можуть бути використані поля спеціальних типів (підтримувані, наприклад, Paradox або dBase)., так і звичайні blob-поля.
Основна ідея такої програми полягає в тому, що OleContainer дозволяє зберегти об'єкт, що міститься в ньому, у файлі або в пам'яті, а потім помістити його в blob-полі.
Модифікуємо створений додаток, додавши компоненти TTable, TdataSource та TDBNavigator та замінивши написи на кнопках на "Зберегти" та "Показати". Створимо копію таблиці biolife.db із набору демонстраційних прикладів, зв'яжемо з нею компонент TTable та створимо набір об'єктів TFields. Зв'яжемо TDataSource з TTable і TDBNavigator з TDataSource.
Змінимо обробники подій:
Тепер, якщо TOleContainer не порожній, при натисканні на кнопку "Зберегти" його вміст збережеться в blob-полі таблиці, а при натисканні на кнопку "Показати" OLE-об'єкт з blob-поля з'явиться в TOleContainer.

Рис.12. Неактивний OLE-об'єкт, вилучений із blob-поля при натисканні на кнопку "Показати"
2.3 Використання властивостей OleContainer
Як визначити характеристики OLE-об'єкта, розміщеного в OleContainer, і керувати ним?
Ім'я класу OLE-об'єкта можна отримати за допомогою властивості Ole ≫

Рис.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, але і під управлінням інших операційних систем, що дозволяє повторно використовувати код не лише на рівні операційної системи, а й на рівні всієї мережі, реалізуючи тимнайбільш розподілену обробку даних. Але це тема іншого циклу статей.