Создание и использование ActiveX DLL
DLL-библиотеки ActiveX (или сокращенно ActiveX DLL) пришли на смену программным компонентам, ранее известным под названием OCX. Этот класс компонентов особенно полезен при подключении к базам данных и работе на серверах. К DLL можно обращаться из броузера или нестандартных интерфейсных программ Visual Basic. В уроке 10 мы создали простейший пример ActiveX DLL для отображения нескольких диалоговых окон. Настало время сделать нечто менее тривиальное и в то же время доступное для начинающего программиста. В этом примере мы создадим утилиту для подсчета строк и страниц в Word 97. Код этого раздела позаимствован из более сложного элемента, написанного мной около года назад. Чтобы создать ActiveX DLL, выполните следующие действия:
1. Создайте новый проект.
2. В окне Project Wizard выберите шаблон проекта ActiveX DLL (рис. 17.12).
Рис. 17.12. Выбор шаблона проекта ActiveX DLL
3. Задайте свойству Name значение Word Helpers. Данный элемент расширяет возможности Microsoft Word 97.
4. Задайте свойству Name класса Class1 значение Counters (то есть «счетчики» -наш класс будет заниматься сбором статистики о документе Word).
5. Выполните команду Project > References в меню Visual Basic. Создайте ссылку на библиотеку Microsoft Word 8.0 Object Library и закройте диалоговое окно кнопкой ОК.
6. Дважды щелкните на строке Counters в окне проекта, чтобы открыть окно программы.
7. Добавьте в класс следующую функцию, которая динамически вычисляет количество строк в активном документе Word:
Public Function LineCount(CharactersPerLine As Integer) As Long Dim x As Word.Application Dim cc As Long ' Количество символов
Получить ссылку на документ Set x = Word.Application
Получить общее количество символов With x.ActiveDocument
сc = .Characters.Count End With
Убрать мусор Set x = Nothing
Чтобы получить общее количество строк, ' следует разделить общее количество символов
на количество символов в строке (CharactersPerLine) LineCount = Int(cc / CharactersPerLine) End Function
8. Добавьте в класс следующую функцию, которая получает количество страниц в активном документе:
Public Function PageCount() As Integer Dim x As Word.Application
Получить, ссылку на документ Set x = Word.Application
Получить общее количество страниц With x.ActiveDocument
PageCount = .BuiltInDocumentProperties("Number " &
"of Pages") End With
Убрать мусор
Set x = Nothing End Function
9. Сохраните проект, чтобы не потерять внесенные изменения.
10. Откомпилируйте проект как ActiveX DLL командой Make WordHelpers.dll (рис. 17.13).
Когда DLL-библиотека будет откомпилирована, к ней можно обращаться, указывая ее тип в окне References редактора Visual Basic приложения Word. После создания ссылки вы создаете объект и работаете с его свойствами и методами точно так же, как и с любым другим объектом.
Рис. 17.13. Компиляция DLL
Мы прошли примерно половину пути. Теперь мы напишем в Word два макроса для работы с нашим элементом.
В качестве сценарной основы Word 97 используется язык Visual Basic for Applications (VBA). В будущем VBA будет поддерживаться большинством или даже всеми приложениями Office.
1. Запустите Microsoft Word 97. 2. Откройте редактор Visual Basic командой Сервис > Макросы > Редактор Visual Basic1 или клавишами Alt+F11. Если Visual Basic for Applications был установлен, его окно появится на экране (рис. 17.14).
Рис. 17.14. Редактор Visual Basic для Word 97
3. Добавьте модуль в проект Normal — щелкните правой кнопкой мыши в окне проекта и выполните команду Insert > Module из контекстного меню.
4. Задайте свойству Name нового модуля значение Utilities.
5. Теперь, как и в Visual Basic 6, следует создать ссылку на библиотеку типов WordHelpers. Откройте диалоговое окно Ссылки командой Сервис > Ссылки2.
6. Выберите из списка строку WordHelpers и закройте диалоговое окно кнопкой ОК.
ПОДСКАЗКАРедактор Visual Basic для Word очень похож на IDE Visual Basic 6, однако в нем изменилось расположение некоторых команд меню. Так, команда References (Ссылки) находится в меню Tools (Сервис), а не в меню Project.
1 Команда Tools > Macros > Visual Basic Editor в исходной версии. — Примеч. перев.
2 Команда Tools > References в исходной версии. — Примеч. перев.
7. Вставьте в модуль следующую процедуру, которая подсчитывает строки:
Public Sub LineCount()
Dim wh As WordHelpers.Counters
Set wh = New WordHelpers.Counters
MsgBox Str$(wh.LineCount(65)), vblnformation,
"Строк:"
Set wh = Nothing End Sub
8. Создайте макрос для вывода количества страниц:
Public Sub PageCountO
Dim wh As WordHelpers.Counters
Set wh = New WordHelpers.Counters
MsgBox Str$(wh.PageCount), vblnformation, "Страниц:" Set wh = Nothing End Sub
9. Сохраните макросы в шаблоне Normal.dot (команда Файл > Сохранить Normal1). 10. Закройте редактор Visual Basic для Word 97.
Мы создали два новых макроса в Microsoft Word 97. Нетрудно убедиться, что их код очень похож на код Visual Basic. Две процедуры, добавленные нами (LineCount и Page Count), теперь хранятся в виде макросов Word 97 в глобальном шаблоне. Это означает, что ими можно пользоваться в любом открытом документе Word. Чтобы понять, о чем идет речь, выполните следующие действия:
1. Запустите Microsoft Word 97, если он не был запущен ранее.
2. Откройте любой документ Word со своего жесткого диска.
3. Откройте диалоговое окно Макросы клавишами Alt+F8. На экране появляется список зарегистрированных макросов (рис. 17.15).
4. Выберите макрос LineCount и нажмите кнопку Выполнить2. Появляется небольшое диалоговое окно с данными о количестве строк в активном документе.