Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

7.8.4 Элементы ActiveX

Спецификация ActiveX является составной частью технологии СОМ. Элемен-

ты ActiveX оформляются в виде файлов .осх, регистрируются в реестре Windows и

затем могут использоваться в программах, написанных на различных языках с ис-

пользованием различных систем (Visual Basic, PowerBuilder, Delphi), а также

в приложениях, работающих с Интернет (см. гл. 12).

Надо сказать, что в любой поставке Windows имеется множество элементов

ActiveX, реализующих различные кнопки, списки, окна редактирования и т.п.

Так что создавать новый элемент ActiveX имеет смысл только в том случае, если

он реализует какие-то специфические функции, требуемые ряду пользователей ва-

шей организации. Причем создавать элемент именно как ActiveX следует только

в тех случаях, если он должен встраиваться в другие приложения, разработанные

не на C-H-Builder. В частности, элементы ActiveX, как будет показано далее, могут

встраиваться в такие офисные приложения Microsoft, как Word, Excel и др. Могут

они использоваться также в составе страниц Web.

Рассмотрим простой пример создания элемента ActiveX. Конечно, реально

надо предварительно разработать свой новый компонент, реализующий требуемые

функции, а затем оформлять его как ActiveX. Создание собственных компонентов

рассмотрено в разд. 8.3. А пока попробуем оформить в виде ActiveX стандартный

компонент C++Builder MonthCalendar (см. разд. 3.3.3). Это будет просто тестовый

пример, так как в составе Windows имеется свой календарь ActiveX. Но забудем об

этом, будем считать, что его нет, а он нужен нам для различных целей, в частно-

сти, для использования в Word.

Закройте текущие проекты, выполнив команду File CloseAII. Теперь выполните

команду File | New | Other и на странице ActiveX выберите пиктограмму ActiveX Control.

Отметим, что возможен и другой вариант начала создания элемента ActiveX: снача-

ла создается пиктограммой ActiveX Library библиотека типов, а затем выбирается пик-

тограмма ActiveX Control. В любом случае перед вами откроется окно, показанное на

рис. 7.16. В выпадающем списке VCL Class Name вы можете выбрать элемент VCL

(стандартный, или созданный вами), который хотите оформить как ActiveX. В на-

шем примере надо выбрать класс TMonthCalendar. В трех окнах, расположенных

ниже списка, автоматически появятся имена файлов, описывающих создаваемый

элемент. Можете при желании изменить их, но вряд ли в этом есть необходимость.

Рис. 7.16

Окно задания характеристик элемента ActiveX VCL Class Name: jTMonlhCalendai [CornCtrls

Hew ActiveX Name: JMonlhCalendorX

Implementation Unit: jMonthCalendatlmpH xpp

EroiectName: JMonthCalendatXControll .cpp

" ActiveX Conliol Options

Г" Make Control Licensed

Г" Include yeision Information

1 ~QK~

Г Include About В ox

492 Глава 7

Индикатор Make Control Licensed обеспечивает генерацию лицензионного файла

.lie. Если вы включите этот индикатор, то вашим элементом ActiveX потребители

смогут пользоваться, только если он включен в переданный им завершенный про-

ект. А использовать элемент в каких-то свих разработках они смогут, только если

приобретут у вас соответствующую лицензию и получат копию файла .lie. Индика-

тор Include Version Information обеспечивает включение в результирующий файл .осх

информации о версии (см. раздел 2.3.5). Индикатор Include About Box обеспечивает

включение в проект дополнительной формы с информацией об элементе и его авто-

рах. Эту форму сможет видеть разработчик, использующий ваш элемент в ка-

ких-то своих разработках.

Заполнив необходимую информацию, щелкните на кнопке ОК. C++Builder

создаст все необходимые файлы, включая библиотеку типов, которая неоднократ-

но рассматривалась в предыдущих разделах. Если требуется, можете что-то в ней

изменить. Если нет — то сохраните сгенерированные файлы и выполните команду

Run | Register ActiveX server, чтобы зарегистрировать ваш элемент в реестре Windows.

Если вы в дальнейшем надумаете снять элемент с регистрации, надо будет выпол-

нить команду Ron | Unregister ActiveX Server.

Все операции, необходимые для создания элемента ActiveX и его регистрации,

выполнены. Как видите, все свелось к нескольким щелчкам мыши. Теперь вы мо-

жете использовать элемент в любых разработках. В качестве примера, давайте по-

пробуем использовать его в программе Word. Это означает, фактически, проверку

вашего компонента в проекте на языке Visual Basic.

Пусть вы хотите создать в Word макрос, который вызывал бы форму, содержа-

щую ваш календарь и три кнопки. При щелчке на первой из них в текущую пози-

цию курсора в документе Word должна заноситься дата, которую вы выбрали в ка-

лендаре. При щелчке на второй кнопке в документ должно заноситься число дней

от текущей даты до даты, выбранной в календаре. А щелчок на третьей кнопке

должен закрывать форму с календарем.

Операции, необходимые для создания подобного макроса, несколько различа-

ются в различных версиях Word. Я буду описывать операции, выполняемые

в Word 2002, включенном в Windows XP. Описание будет кратким, так как рас-

смотрение работы с Word и с языком VBA, конечно, лежит за пределами тематики

данной книги.

Выполните в Word команду Сервис | Макрос | Макросы. В открывшемся окне

введите имя создаваемого макроса (например ≪Календарь≫) и щелкните на кнопке

Создать. Вы попадете в окно Редактора Microsoft Visual Basic (см. рис. 7.17).

Выделите в окне Project вершину шаблона Normal, щелкните правой кнопкой

мыши и выберите во всплывшем меню раздел Insert | UserForm. Появится форма и

панель ToolBox (справа вверху на рис. 7.17) с компонентами, которые можно разме-

щать на форме. Конечно, сначала в этой панели не будет компонента вашего ка-

лендаря.

Щелкните на ToolBox правой кнопкой мыши и выполните команду Additional

Controls. Появится список всех зарегистрированных элементов ActiveX. Включите

индикатор у MonthCalendarX. Соответствующая пиктограмма появится на панели

ToolBox. Разместить компонент на форме. В окне Property можно изменить какие-то

его свойства.

Назовите вашу форму FCalendar (свойство Name формы). Перенесите на фор-

му с панели ToolBox три кнопки, расположите их примерно так, как показано на

рис. 7.17, измените надписи на них (свойство Caption), полезно также задать их

свойства ControlTipText — надписи всплывающих ярлычков, позволяющие поль-

зователю ориентироваться в назначении кнопок формы.

Сделайте поочередно двойные щелчки на кнопках и в появившихся заготов-

ках обработчиков напишите соответствующие операторы языка Visual Basic. В ре-

зультате код процедур будет иметь вид:

Процессы, потоки, распределенные приложения 493

Private Sub CommandButtonl_Click()

Selection = MonthCalendarXl.Date

End Sub

Private Sub CommandButton2_Click()

Selection = MonthCalendarXl.Date - Date

End Sub

Private Sub CommandButton3_Click()

End

End Sub

Сделайте в окне Project двойной щелчок на вершине создаваемого макроса (на

рис. 7.17 я назвал эту вершину ≪MyCalendar≫) и в открывшемся окне заготовки

кода вашего макроса добавьте единственный оператор (см. на рис. 7.17):

FCalendar.Show (modeless)

делающий форму видимой и не модальной (это задается параметром modeless). По-

следнее желательно, чтобы пользователь мог свободно переключаться между ок-

ном документа и формой. Впрочем, если у вас Microsoft Office 97 или младше,

форму нельзя сделать не модальной.

Рис. 7.17

Окно Редактора Microsoft Visual Basic

Сохраните созданный макрос, протестируйте его (кнопка Run Sub/UserForm — де-

вятая справа на рис. 7.17) и закройте редактор Visual Basic. Теперь для облегчения

работы пользователя желательно задать вашему макросу какие-то горячие клави-

ши. Для этого надо выполнить в Word команду Сервис | Настройка, в открывшемся

окне щелкнуть на кнопке Клавиатура, в открывшемся окне в списке Категории вы-

брать раздел Макросы, затем в панели Макросы выбрать ваш макрос Календарь, пе-

рейти в окно Новое сочетание клавиш, нажать желательные клавиши (например,

Orl-Alt-C), щелкнуть на кнопке Назначить и затемна кнопке Закрыть. Все это я изло-

жил скороговоркой, так как думаю, что вы и сами все это прекрасно знаете.

Теперь можете испытать макрос, использующий ваш элемент ActiveX. От-

кройте в Word документ, напишите какой-то текст и нажмите клавиши Ctrl-Alt-C.

Вы увидите спроектированную вами форму (рис. 7.18). Выбирая в календаре дату

и нажимая соответствующую кнопку вы сможете заносить в текущую позицию

курсора выбранную дату или число дней между этой и текущей датой. В некото-