- •Проблемы, решаемые с помощью технологии com
- •Основные понятия
- •Именование com-объектов
- •Понятие интерфейса
- •Основы компиляции
- •Простейший пример использования
- •Интерфейс iUnknown
- •Еще один пример
- •Com-сервер
- •Создание "настоящего" com-сервера.
- •Фабрика классов
- •Использование фабрики классов
- •ITypeLib, iTypeInfo, библиотеки типов и информация о методах сервера. Язык idl.
- •IDispatch и вызов методов "по имени"
- •IMarshall, маршалинг и взаимодействие клиента с внутренними, локальными и удаленными серверами
- •Технология ole Внедрение и связывание объектов - ole
- •Использование ole-документов в приложениях
- •Использование свойств OleContainer
- •Создание элементов управления ActiveX Понятие ActiveX.
- •Создание элементов управления ActiveX на основе vcl-компонентов
- •Создание страниц свойств
- •Создание активных форм
- •Создание локальных серверов и контроллеров автоматизации Понятие автоматизации.
- •Создание приложения, подлежащего автоматизации
- •Превращение приложения в сервер автоматизации
- •Библиотека типов
- •Реализация методов объекта автоматизации
- •Создание контроллера
- •Раннее и позднее связывание
- •Создание контроллеров для произвольных серверов автоматизации
- •Коллекции объектов внутри серверов автоматизации
- •Использование информации из библиотек типов
- •Создание коллекций объектов
- •Экспонируемые свойства и методы
- •Процессы в Windows Процессы
- •Планирование потоков
- •Приоритеты
- •Привязка к процессорам
- •Создание процессов
- •Завершение процессов
- •Создание потоков
- •Завершение потоков
- •Wait функции
- •Синхронизация потоков
- •Синхронизация процессов
- •Взаимодействие между процессами
- •Создание внутренних серверов и контроллеров автоматизации Внутренний сервер автоматизации и передача данных
- •Создание внутреннего сервера автоматизации
- •Манипуляция ресурсами в dll
- •Работа внутреннего сервера автоматизации в многопоточном режиме Понятие многопоточности. Синхронизация
- •Класс tThread
- •Пример многопоточного приложения
- •Применение com-объектов, входящих в состав Windows Создание ярлыков
- •Использование Internet Explorer в приложениях
Использование свойств OleContainer
Как определить характеристики OLE-объекта, помещенного в OleContainer, и управлять им?
Имя класса OLE-объекта можно получить с помощью свойства OleClassName. Список доступных команд можно получить с помощью свойства ObjectVerbs. Метод DoVerb позволяет вызвать одну из этих команд, ссылаясь на ее порядковый номер в списке. Целочисленное свойство PrimaryVerb содержит номер команды из этого списка, выполняющейся при активации OLE-объекта. Состояние контейнера можно определить с помощью свойства State.
Для иллюстрации их работы на панель с OleContainer поместим компоненты TComboBox и TEdit.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OleContainer1->State != osEmpty)
{
OleContainer1->DoVerb (ComboBox1->Itemlndex);
}
}
ПредыдущаяОглавлениеСледующая
ПредыдущаяОглавлениеСледующая
Создание элементов управления ActiveX Понятие ActiveX.
Технология ActiveX базируется на технологии Microsoft COM и позволяет создавать и использовать программные компоненты, предоставляющие различные сервисы другим приложениям и операционной системе.
В настоящее время существуют три типа спецификаций COM, определенных Microsoft и включающих большое количество интерфейсов и функций:
OLE-документы - составные документы, содержащие внедренные или связанные объекты. Эта спецификация описывает правила создания контейнеров для таких документов с "активацией по месту". Отметим, что компонент OLEContainerDelphi и C++Builder создан с учетом этой спецификации (этой теме будет посвящена одна из следующих статей данного цикла).
OLE Automation. Эта спецификация описывает, как создать сервер и контроллер, управляющий его поведением с помощью скриптов или макросов. Эта спецификация также поддерживается Delphi и C++Builder (об этом также пойдет речь в ближайших статьях данного цикла).
Управляющие элементы ActiveX, использующие специальный вариант протокола Automation (о них-то и пойдет речь в данной статье).
Использование СОМ, и в частности технологии ActiveX, позволяет создавать приложения, собираемые из готовых компонентов - элементов управления ActiveX. При этом не имеет значения, на каком языке программирования написаны как готовые компоненты, так и использующее их приложение, - лишь бы средство разработки поддерживало возможность использования таких компонентов в разрабатываемом приложении (такое приложение обычно называется контейнером).
Элементы управления ActiveX своим поведением напоминают компоненты на палитре C++Builder. Их можно поместить на проектируемую форму, и при этом в инспекторе объектов появятся их свойства и события. Можно также вызывать их методы на этапе выполнения использующего их приложения. Как было сказано выше, главное отличие элементов ActiveX от компонентов VCL заключается в том, что если компоненты, написанные на Delphi, доступны для использования только в Delphi и C++Builder, а компоненты, написанные на C++ Builder, - только в C++Builder, то элементы управления ActiveX можно применять в любых средствах разработки, поддерживающих использование в приложениях СОМ-объектов, например в Visual Basic, Microsoft Visual C++, PowerBuilder, Visual dBase и др.
Элементы управления ActiveX представляют собой библиотеки, содержащие исполняемый код. Эти библиотеки могут быть использованы в различных приложениях как встроенные элементы управления, поэтому они обладают свойствами, событиями и методами, доступными посредством автоматизации. Подавляющее большинство современных средств разработки, как правило, позволяет включать такие элементы в создаваемые с их помощью приложения. Помимо этого, элементы управления ActiveX нередко используются в качестве расширений Web-браузеров с целью придания им дополнительной функциональности, например для отображения документов, отличных от поддерживаемых данным браузером.
Отметим, что элементы управления ActiveX представляют собой внутренние (in-process) серверы, выполняющиеся в адресном пространстве приложения.
Как любой СОМ-сервер, элемент управления ActiveX обладает уникальным идентификатором GUID и должен быть зарегистрирован в реестре. На основании этой записи может быть осуществлен поиск местоположения файла с расширением *.осх, содержащего его реализацию.
Таким образом, создав элемент управления ActiveX, обладающий интересующей вас функциональностью, вы можете в дальнейшем позволить его пользователям встраивать этот элемент в свои приложения (например, написанные на Visual Basic, PowerBuilder, Delphi, C++Builder, Visual dBase и др.), отображать его в Web-браузере в составе выгруженной с вашего Web-сервера HTML-страницы, включать его в состав документов MS Office, при этом вы не обязаны представлять исходный текст этого компонента.
Когда следует создавать управляющие элементы ActiveX?
Естественно, в тех случаях, когда функциональность, содержащаяся в таком элементе, уникальна. Нет смысла создавать ActiveX, реализующий функциональность кнопки или текстового редактора, - таких элементов управления, в том числе выполненных в виде ActiveX, на рынке готовых компонентов более чем достаточно. Нет смысла также создавать ActiveX, если он будет использоваться только в C++Builder; в этом случае проще создать VCL-компонент, который будет работать в использующем его приложении значительно быстрее, чем аналогичный ActiveX. Но создание элемента управления, реализующего, к примеру, часть автоматизированного рабочего места какой-либо категории сотрудников предприятия, может оказаться весьма полезным особенно в следующих двух случаях. Первый случай - использование на предприятии различных инструментальных средств, например C++Builder и Visual Basic; в этом случае разработчик, использующий Visual Basic, может встраивать в свои приложения ActiveX, созданный другим разработчиком и реализующий какую-либо функциональность, используемую несколькими различными автоматизированными рабочими местами. Второй случай - широкое использование Internet или intranet при автоматизации предприятия. В этом случае ActiveX, реализующий подобную функциональность, может быть встроен в HTML-страницу и отображен в Web-браузере. Такой подход существенно облегчает решение проблемы обновления версий автоматизированных рабочих мест, так как вместо установки новых версий на рабочих станциях достаточно заменить один экземпляр ActiveX, хранящийся на Web-сервере. Наиболее ярким примером такого подхода может быть выполненный в виде ActiveX "тонкий" клиент, получающий данные от удаленного сервера приложений, являющегося, в свою очередь, клиентом серверной СУБД.
Такой набор преимуществ сделал эту технологию весьма популярной, и именно поэтому многие современные средства разработки, такие, как Delphi или C++Builder, позволяют создавать элементы управления ActiveX. Эти средства обычно имеют встроенные механизмы поддержки спецификации ActiveX с помощью автоматической генерации соответствующего кода (хотя, конечно, не возбраняется писать подобный код вручную).
Спецификация ActiveX представляет собой набор правил (а именно описание стандартных интерфейсов), с помощью которых следует создавать такие элементы управления. Отметим, что текущая версия этой спецификации учитывает возможность использования в качестве контейнера Web-браузеров и необходимость загрузки элементов ActiveX с удаленных Web-серверов с их автоматической регистрацией.