Visual2000 · Архив статей Колесова & Павловой
Андрей Колесов, Ольга Павлова
Загрузить программные приложения (9 Кб, ACTXDC2.zip)
© 1998, Андрей Колесов, Ольга ПавловаМы продолжаем рассматривать вопросы, связанные с созданием документов ActiveX (начало см. "Создание документа ActiveX. Часть 1", нумерация шагов и рисунков сохранена).
Для объектов UserDocument, так же, как и для объектов UserControl, можно создавать общие свойства. Такое свойство доступно для других приложений, которые либо устанавливают, либо получают его значение. Для нашего проекта ActXDoc создадим свойство, которое будет доступно другому документу ActiveX или форме. Помимо этого добавим в проект также модуль кода, содержащий глобальный модуль.
Шаг 19. Вначале добавим в проект модуль кода. В меню Project выберите команду Add Module для открытия одноименного диалогового окна, а затем дважды щелкните значок Module, чтобы добавить новый модуль кода.
Шаг 20. Измените имя модуля на mGlobal, а в раздел Declarations введите следующий код:
' Объектная переменная документа FirstDoc Public gFirstDoc As FirstDoc
Данная глобальная переменная содержит объектную ссылку, которая связывает документы FirstDoc и SecndDoc.
Шаг 21. Добавьте к документу FirstDoc новый элемент управления TextBox и поместите его ниже уже имеющегося в окне UserDocument элемента управления TextBox, как показано на рис. 8. Установите его свойства: Name = txtFirstDoc, Text = "".
Рис. 8
Шаг 22. Дважды щелкните окно документа FirstDoc для перехода в окно кода. В меню Tools щелкните пункт Add Procedure. В одноименном диалоговом окне введите имя strDocProp в окно Name и выберите параметр Property для создания общего свойства (рис. 9). После этого щелкните кнопку OK.
Рис. 9
Шаг 23. VB автоматически добавит в модуль процедуры Property Get и Property Let. Измените в них код следующим образом:
Public Property Get strDocProp() As String ' Внимание! Поменяйте тип свойства с Variant на String strDocProp = txtFirstDoc.Text End Property Public Property Let strDocProp(ByVal NewStrDocProp As String) ' Внимание! Поменяйте тип аргумента с Variant на String txtFirstDoc.Text = NewStrDocProp End Property
В приведенном здесь коде свойство strDocProp является общим, а свойство Text элемента управления txtFirstDoc сохраняет и выводит на экран строки текста. Поскольку свойство strDocProp является общим, его значение можно передать документу SecndDoc. Чтобы это сделать, измените программу для кнопки "Перейти вперед".
Шаг 24. Добавим в событие Click кнопки cmdGoNext оператор Set с глобальной переменной gFirstDoc. Установив значение Me для этой переменной, мы создаем ссылку на документ FirstDoc. Эту ссылку можно использовать для доступа к общим свойствам и методам документа.
Private Sub cmdGoNext_Click() Set gFirstDoc = Me ' < — Добавьте данную строчку ' Указанный здесь путь может не соответствовать пути ' к файлу SecndDoc.vbd на вашем компьютере Hyperlink.NavigateTo App.Path & "\SecndDoc.vbd" End Sub
Шаг 25. Перейдите в окно документа SecndDoc, откройте окно кода и добавьте в событие Show объекта UserDocument следующий код:
Private Sub UserDocument_Show() If Not gFirstDoc Is Nothing Then lblCaption.Caption = gFirstDoc.strDocProp Set gFirstDoc = Nothing End If End Sub
Здесь осуществляется проверка установки глобальной объектной переменной gFirstDoc, которая была сделана на предыдущем шаге. Если переменная указывает на объект, то доступны общие свойства документа ActiveX и заголовок метки соответствует свойству strDocProp документа FirstDoc. Сразу же после установки свойства Caption глобальная переменная уничтожается — ее значение устанавливается равным Nothing.
Примечание. Нельзя допускать, чтобы глобальная переменная сохраняла ссылку на объект UserDocument документа FirstDoc, так как, пока объект существует, он продолжает использовать ресурсы компьютера.
Шаг 26. Теперь сохраним модуль кода с именем mGlobal.bas (команда Save Project в меню File). Запустим проект на выполнение в среде VB, а затем обратимся к документу FirstDoc из IE. Введите какой-либо текст в новый элемент управления TextBox, например, "Создание документа ActiveX стало очень простым". После этого щелкните кнопку "Перейти вперед", и в метке документа SecndDoc появится текст, только что введенный в элемент управления TextBox.
При просмотре документа ActiveX пользователь может заполнить несколько текстовых окон. Если же он затем не один раз возвращается к документу, то для удобства работы было бы неплохо сохранить эти данные в объекте PropertyBag.
Поскольку в приведенном здесь примере оператор PropertyChanged вставлен в событие Change элемента управления txtFirstDoc, IE запрашивает пользователя о сохранении изменений. В случае положительного ответа значение свойства записывается в объект PropertyBag.
Шаг 27. Перейдите в документ FirstDoc, а затем дважды щелкните элемент управления txtFirstDoc и в его событие Change добавьте оператор PropertyChanged:
Private Sub txtFirstDoc_Change() PropertyChanged End Sub
Шаг 28. Добавьте следующий код в свойство WriteProperties объекта UserDocument. Здесь значение свойства Text элемента управления txtFirstDoc сохраняется в объекте PropertyBag.
Private Sub UserDocument_WriteProperties(PropBag As PropertyBag) PropBag.WriteProperty "StrDocProp", txtFirstDoc.Text, "Привет" Debug.Print "Запись свойств 1" End Sub
Теперь, чтобы считать значение этого свойства, введите в событие ReadProperties следующий код:
Private Sub UserDocument_ReadProperties(PropBag As PropertyBag) txtFirstDoc.Text = PropBag.ReadProperty("StrDocProp", "Привет") Debug.Print "Чтение свойств 1" End Sub
Шаг 29. Теперь у нас появилась возможность записывать и считывать свойство из объекта PropertyBag. Запустим наш проект для проверки. Нажмите F5, а затем запустите IE. Обратитесь к документу FirstDoc.vbd и введите в пустой элемент управления TextBox какой-либо текст, к примеру свое имя. В меню File выберите команду Close. IE предложит сохранить сделанные изменения — для этого выберите Yes в предложенном диалоговом окне.
Снова запустите IE и из него обратитесь к документу FirstDoc.vbd. Введенный на предыдущем шаге текст будет находиться в элементе управления TextBox.
Как видите, использование объекта PropBag вместе с событиями WriteProperties и ReadProperties позволяет очень просто сохранять данные объекта.
Для добавления меню в документ ActiveX используется программа Menu Editor. Поскольку документ ActiveX не может непосредственно содержать меню, оно будет объединено с приложением, которое используется для просмотра документа ActiveX. Поэтому при добавлении меню в документ ActiveX необходимо согласовать его с меню приложения.
Примечание. При осуществлении навигации к документу ActiveX пользователи порой ничего о нем не знают (они могут и не догадываться, что это документ ActiveX). Поэтому крайне желательно включать в разработанный документ ActiveX форму About ("О программе"). На примере этой формы покажем процедуру включения меню.
Рис. 10
Шаг 30. В меню Project выберите команду Add Form. В одноименном диалоговом окне дважды щелкните значок About Dialog (рис. 10). В появившейся форме About MyApp установите следующие свойства Caption для формы и элементов управления (рис. 11):
Объект | Значение Caption |
FrmAbout | О документе FirstDoc |
LblTitle | Документ ActiveX FirstDoc |
LblVersion | Версия 1.0 |
lblDescription | Документ ActiveX — это форма, отображаемая в окне Internet Explorer |
Рис. 11
Удалите элементы управления lblDisclaimer и cmdSysInfo, а также удалите или пометьте комментарием все строки кода в процедуре Form_Load.
Шаг 32. Перейдите в документ FirstDoc. Выведите диалоговое окно Menu Editor, выбрав одноименную команду в меню Tools (рис. 12). В поле Caption введите &Help, а в поле Name — mnuHelp. В поле NegotiatePosition выберите Right. Щелкните кнопку Next для создания нового элемента меню. В поле Caption введите "О документе FirstDoc", а в поле Name — mnuAbout. Щелкните кнопку со стрелкой вправо для смещения элемента меню вправо, а затем щелкните OK.
Шаг 33. Дважды щелкните окно документа FirstDoc, чтобы вывести окно Code. Введите следующий код в событие mnuAbout_Click:
Private Sub mnuAbout_Click() frmAbout.Show vbModal End Sub
Шаг 34. Запустите проект на выполнение (F5) и из IE обратитесь к документу FirstDoc. На панели команд IE выберите меню Help. Среди элементов меню найдите команду FirstDoc Help. Чтобы увидеть новое окно About ("О программе"), щелкните поле "О документе FirstDoc" (рис. 13).
Рис. 12
Рис. 13
Закройте IE и проект ActXDoc. Поздравляем всех, кто дошел вместе с нами до этого места, — мы рассмотрели довольно много приемов работы с документами ActiveX и на этом заканчиваем пример с проектом ActXDoc.
Иногда может понадобиться преобразовать уже существующие приложения в документы ActiveX. Для облегчения этой работы вы можете воспользоваться Мастером перемещения документа ActiveX (ActiveX Document Migration Wizard).
Рис. 14
Рис. 15
В процессе своей работы Мастер выполняет следующие действия:
'[AXDW] The following line was commented out by the 'ActiveX Document Migration Wizard.
Private Sub UserDocument_Show() Form_Load End Sub
В этой статье мы, конечно же, не смогли рассмотреть все вопросы, связанные с созданием документов ActiveX, и остановились только на самых общих моментах. В заключение нам бы хотелось высказать наиболее общие соображения, которые следует принять во внимание перед разработкой документов ActiveX.