Visual2000 · Архив статей Колесова & Павловой

Создание документа ActiveX. Часть 1

Андрей Колесов, Ольга Павлова

Загрузить программные приложения (3 Кб, ACTXDC1.zip)

© 1998, Андрей Колесов, Ольга Павлова
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" № 03/98, c. 177-180.


Одним из новшеств версии VB5 является...

Одним из новшеств версии VB5 является возможность создания документов ActiveX, то есть форм, отображаемых в окнах браузеров. Они предоставляют все необходимые для этого возможности, а именно: гиперсвязи, прокрутку окон и согласование меню.

Слово "документ" в сочетании с "ActiveX" может ввести в заблуждение, однако здесь необходимо знать следующее. При создании документа ActiveX практически стирается различие между документом и приложением (прикладной программой). Традиционный документ (например, Word-документ) является, в отличие от документов ActiveX, статическим. В VB можно создать приложение, обладающее качествами традиционного документа. Другими словами, когда пользователь открывает документ ActiveX, он не только получает функциональные возможности приложения, но и может работать с ним так же гибко, как и с документом. Таким образом, документ ActiveX и в самом деле является активным.

Документы ActiveX создаются аналогично VB-формам и могут содержать внедренные объекты, например таблицы Microsoft Excel. Кроме того, такие документы могут выводить окна сообщений и дополнительные формы.

Документ ActiveX, созданный с помощью VB, всегда состоит из объекта UserDocument, а также размещенного в нем программного кода, модулей кода и элементов управления.

Подобно экранным формам, объекты UserDocument хранятся в обычных текстовых файлах, содержащих исходный код и значения свойств объектов и элементов управления. В VB для таких файлов используется расширение DOB. Если объект UserDocument содержит элементы управления, использующие графические элементы типа растров, которые нельзя сохранить как простой тест, VB сохраняет эти данные в файлах с расширением DOX. Файлы DOB и DOX полностью определяют внешний вид и интерфейс документов ActiveX.

Документ ActiveX можно откомпилировать как EXE-файл (in-process server) или DLL-файл (out-of-process server). В обоих случаях при выполнении или компиляции проекта VB создает дополнительный файл с расширением VBD (Visual Basic Document), который помещается в один каталог вместе с откомпилированным компонентом. Фактически VBD-файл — это структурированное хранилище OLE, доступ к которому можно осуществлять через стандартные OLE-интерфейсы. Аналогичным образом хранятся данные и в других приложениях Microsoft, например в Word и Excel.

Документы ActiveX во многом напоминают элементы управления ActiveX. Вот несколько из основных сходств:

Теперь мы рассмотрим несколько примеров создания документов ActiveX. Разрабатываемый нами проект не является законченным приложением, однако в ходе его реализации будет сказано об основных свойствах, методах и событиях, необходимых для создания документа ActiveX. Приведенные здесь этапы создания документа ActiveX связаны друг с другом, поэтому следует соблюдать последовательность выполняемых действий.

Для выполнения описанных в этой статье действий необходимо иметь программу IE (можно обойтись без доступа к Internet).

В начало статьи

Создание проекта ActXDoc

Первым шагом в создании проекта ActXDoc является включение объекта UserDocument в состав исполняемого модуля ActiveX. После этого в данном примере мы добавим в форму элементы управления CommandButton и TextBox. И наконец, последний шаг — с помощью объекта Hyperlink мы создадим код, позволяющий осуществлять переход к другому адресу URL. В результате получится документ, имеющий вид объекта, работу которого мы проверим в Internet Explorer.

Шаг 1. В меню File выберите команду New Project для открытия одноименного диалогового окна, в котором дважды щелкните значок ActiveX Document EXE. VB автоматически добавит к проекту объект UserDocument. Если окно дизайнера (окно графического интерфейса проекта) не появилось сразу, щелкните правой кнопкой мыши имя UserDocument1 в окне Project Explorer. В окне Properties дважды щелкните свойство Name и измените имя UserDocument1 на FirstDoc. Новое имя появится на панели заголовка документа и в окне Project Explorer.

В окне Project Explorer выделите значок Project1. В окне Properties дважды щелкните свойство Name и измените имя проекта на ActXDoc. На панели заголовка документа теперь написано ActXDoc — FirstDoc (UserDocument).

Шаг 2. Разместите на форме элементы управления CommandButton и TextBox, как показано на рис.1. Измените свойство Name элемента Command1 на cmdNavigateTo, а Caption — на "Навигация к". Проделайте аналогичную операцию со свойствами элемента Text1 (Name — txtURL, Text — http://www.microsoft.com).

Рис. 1

Шаг 3. Дважды щелкните на форме командную кнопку "Навигация к" и введите в событие Click следующий код:

Private Sub cmdNavigateTo_Click()
  Hyperlink.NavigateTo txtURL.Text
End Sub

Метод NavigateTo объекта Hyperlink используется для навигации по значению свойства Text элемента управления txtURL.

Шаг 4. Сохраните файлы проекта командой Save Project из меню File. Назовите их следующим образом: документ пользователя — FirstDoc.dob, проект — ActXDoc.vbp. Запуск и отладка проекта ActXDoc

Чтобы увидеть документ FirstDoc, следует вначале запустить проект ActXDoc, а затем другое приложение-контейнер для просмотра данного документа. Для этого запускается программа Internet Explorer и осуществляется навигация к файлу FirstDoc.vbd, чтобы открыть документ ActiveX. Файл с расширением vbd создается автоматически для каждого документа ActiveX при каждом запуске проекта.

Шаг 5. Запустите проект ActXDoc.vbp в среде VB (F5). В этот момент в каталоге, где установлен VB (а не там, где были записаны файлы проекта), создается временный файл FirstDoc.vbd. При компиляции exe- и dll-файлов VB всегда размещает файлы с расширением vbd в том же каталоге, где находятся данные файлы.

Шаг 6. Запустите Internet Explorer. Если программа уже выполняется, перезапустите ее для очистки кэша документа. В поле Address введите путь к файлу FirstDoc.vbd. Если VB установлен по умолчанию, то путь будет таким: c:\Program Files\DevStudio\VB\FirstDoc.vbd.

Шаг 7. В текстовом окне у нас уже указан адрес URL — http://www.microsoft.com. Можете заменить его на любой другой. Например, если вы в данный момент не подключены к Internet, то можно указать какой-нибудь HTM-файл на вашем локальном компьютере (рис. 2). Щелкните кнопку "Навигация к". В браузере появится Web-страница для указанного в текстовом окне адреса URL.

Рис. 2

В начало статьи

Отладка документа FirstDoc

Отладка документов ActiveX осуществляется аналогично отладке других компонентов ActiveX. Для этого вы можете использовать все средства, имеющиеся в VB: точки останова, операторы отладки, наблюдение значений переменных и т.д.

Здесь следует отметить, что ведущий контейнер (IE) является клиентом для документа ActiveX (он использует объекты, предоставляемые документом). Если попытаться прервать выполнение проекта VB в тот момент, когда ведущий контейнер обращается к документу ActiveX, будет выдано предупреждение, что в данный момент этот объект используется другим приложением (в нашем случае — IE) и завершение программы приведет к ошибке в нем. Поэтому, чтобы избежать ошибок, в конце каждого этапа следует выходить из IE для освобождения ссылки.

В начало статьи

Применение режима останова

При выполнении проекта и его просмотре в IE можно осуществить переход в режим останова (нажав клавиши Ctrl+Break или щелкнув кнопку Break). При этом в ведущем приложении не возникает ошибок. Тем не менее старайтесь избегать любых изменений кода, которые вызывают перезагрузку проекта. Для отладки программы можно также использовать оператор Stop.

Шаг 8. В окне IE перейдите к документу FirstDoc, а потом перейдите в среду VB. Нажмите Ctrl+Break для остановки выполнения программы. В событии Click для кнопки cmdNavigateTo введите оператор Stop, как показано здесь:

Private Sub cmdNavigateTo_Click()
   Stop   '<- добавьте в процедуру
   Hyperlink.NavigateTo txtURL.Text
End Sub

Шаг 9. Нажмите F5 для продолжения выполнения программы, а затем вернитесь в IE. Щелкните кнопку "Навигация к", и VB выведет на экран окно кода (Code) с выделенным оператором Stop (рис. 3). Снова нажмите F5 для продолжения работы.

Рис. 3

В начало статьи

Добавление второго документа ActiveX в проект ActXDoc

Созданный нами проект содержит единственный документ ActiveX, что соответствует наличию одной формы. Попробуем расширить возможности проекта ActXDoc, добавив в него второй документ.

В отличие от стандартных VB-форм для отображения документов ActiveX нельзя пользоваться методом Show. Причина здесь в том, что режим отображения документа ActiveX определяется приложением-контейнером (в нашем случае — IE). Поэтому необходима навигация от одного документа ActiveX к другому, для чего применяется метод NavigateTo объекта Hyperlink.

Шаг 10. Вначале поместим на форму второй элемент управления CommandButton, как показано на рис.4. Установим свойство Name элемента Command1 равным cmdGoNext, а свойство Caption — "Перейти вперед".

Рис. 4

Дважды щелкните кнопку "Перейти вперед" и введите следующий код в процедуру события Click:

Private Sub cmdGoNext_Click()
   Hyperlink.NavigateTo App.Path & "\SecndDoc.vbd"
End Sub

Примечание. Строка, содержащая код App.Path, правильно работает только в том случае, если проект ActXDoc находится в том же каталоге, где и VB (см. шаг 5). Во всех остальных случаях вы должны заменить эту строку. Например, если VB установлен в каталог по умолчанию, введите c:\Program Files\DevStudio\VB\SecndDoc.vbd.

Шаг 11. Теперь добавим второй документ ActiveX к нашему проекту. В меню Project выберите команду Add User Document и в появившемся одноименном диалоговом окне дважды щелкните значок User Document. На экране появится еще одна форма, для которой измените свойство Name на имя нового объекта UserDocument — SecndDoc. Теперь заголовок формы будет выглядеть следующим образом: ActXDoc — SecndDoc (UserDocument).

Шаг 12. Добавьте в документ SecndDoc два элемента управления — Label и CommandButton — и расположите их, как показано на рис.5. Измените их свойства. Для Label1: Name = lblCaption, Caption = "Второй документ SecndDoc". Для Command1: Name = cmdGoBack, Caption = "Вернуться назад".

Рис. 5

Шаг 13. Введите следующий код для события Click командной кнопки "Вернуться назад":

Private Sub cmdGoBack_Click()
  UserDocument.Hyperlink.GoBack
End Sub

Метод GoBack объекта Hyperlink осуществляет навигацию к предыдущему документу в средстве просмотра.

Шаг 14. Теперь сохраним файлы проекта (меню File команда Save). Присвоим документу пользователя имя SecndDoc.dob. Запустим проект на выполнение в среде VB. Затем обратимся из IE к документу FirstDoc и попробуем осуществить навигацию между двумя документами с помощью командных кнопок "Перейти вперед" и "Перейти назад".

В начало статьи

Добавление формы в проект ActXDoc

Добавление формы к проекту ActXDoc осуществляется так же просто, как если бы мы имели дело с любым другим VB-проектом. Единственное отличие заключается в том, что наша форма должна вызываться документом ActiveX. Покажем это на примере.

Шаг 15. В меню Project выберите команду Add Form и в одноименном диалоговом окне дважды щелкните значок Form. Замените имя формы с Form1 на frmAux, а свойство Caption установите равным "Дополнительная форма".

Добавьте элемент управления TextBox в форму. Измените размеры формы и местоположение текстового окна, как показано на рис.6. Установите свойства TextBox следующим образом: Name = txtAux, MultiLine = True, Text = "".

Рис. 6

Шаг 16. Перейдите к документу FirstDoc и поместите в него новую командную кнопку. Задайте ее имя равным cmdShowForm, а свойство Caption — "Показать форму". Добавьте в событие Click этой кнопки следующий код:

Private Sub cmdShowForm_Click()
  ' Устанавливает значение URL документа FirstDoc
  ' для свойства Text элемента txtAux
  frmAux.txtAux.Text = txtURL.Text
  ' Отображает дополнительную форму
  frmAux.Show vbModal
End Sub

Примечание. Некоторые средства просмотра, например IE, не отображают немодальные формы, вызываемые изнутри DLL. Для устранения данного недостатка следует откомпилировать документ ActiveX как исполняемый файл. Таким образом, приложение сможет отображать как модальные, так и немодальные формы.

Шаг 17. Снова сохраните файлы проекта. Присвойте форме имя, предложенное по умолчанию, — frmAux.frm.

Шаг 18. Теперь можете снова запустить проект и пронаблюдать за взаимодействием документа ActiveX с формой при помощи командной кнопки "Показать форму" (рис. 7) в среде IE.

Рис. 7

Сделаем на этом остановку. В следующий раз мы расскажем о том, как добавлять свойства в объект UserDocument, добавлять меню в проект ActXDoc и использовать Мастер перемещения документа ActiveX (ActiveX Document Migration Wizard) для преобразования существующих приложений в документы ActiveX.

(Продолжение следует)

В начало статьи