Создание утилиты комментирования на уровне приложения
Надстройка, которой мы сейчас займемся, называется CodeDoc — App. Она собирает подробную информацию о приложении. Она документирует свойства проекта, составляет список форм, модулей и классов проекта, а также перечень внешних ссылок. Чтобы не возиться со всеми тонкостями объектов-надстроек, мы воспользуемся шаблоном надстройки Visual Basic. Он заметно сокращает объем работы. Просматривая исходный текст проекта, вы всегда сможете разобраться, как он выполняет свою работу.
1. Создайте новый проект командой File > New Project.
2. Выберите значок Add-In (рис. 16.23) и нажмите кнопку ОК, чтобы создать проект.
3. Задайте свойству Name созданного проекта значение CodeDocApp.
4. Откройте папку Designers в окне проекта и дважды щелкните на объекте Connect. На экране появляется описание объекта-надстройки, изображенное на рис. 16.24.
5. В поле Add-In Display Name введите строку CodeDoc - App. Это имя будет отображаться в диспетчере и на панели инструментов.
6. В поле Add-In Description введите строку Приложение CodeDoc - комментирование на уровне приложения. Это описание будет отображаться в диспетчере надстроек.
7. В списке Application выберите строку Visual Basic, а в списке Application Version -строку Visual Basic 6.0.
8. В списке Initial Load Behavior выберите строку Startup. Проследите за тем, чтобы флажок Addin is Command -Line Safe был снят. Наша надстройка обладает визуальным интерфейсом и не работает в режиме командной строки.
Рис. 16.23. Выбор шаблона проекта Add-In
Рис. 16.24. Конструктор надстроек
9. Откройте окно программы — щелкните правой кнопкой мыши на объекте Connect и выполните команду View Code из контекстного меню.
10. Примерно в середине процедуры события AddinInstance_OnConnection замените строку
Set mcbMenuCommandBar = AdToAddInCommandBar("My Addln")
строкой
Set mcbMenuCommandBar = AdToAddInCommandBar("CodeDoc - App")
11. Удалите текущее содержимое функции AddToAddInCommandBar() и введите следующее:
Function AddToAddInCommandBar(sCaption As String) As Office.CommanBarControl Dim cbMenuCommandBar As Office.CommandBarControl Dim cmd As Office.CommandBarButton Dim cbMenu As Object
Если произошла ошибка, пропустить основной код функции On Error Goto AddToAddlnCommandBarErr
Проверить, удается ли найти панель Edit If cbMenu = VBInstance.CommandBars("Edit") If cbMenu Is Nothing Then
панель недоступна, попытка закончилась неудачей Exit Function End If
Добавить кнопку на панель Set cbMenuCommadBar = cbMenu.Controls.Add(1, , , 11)
Настроить кнопку... Set cmd = cbMenuCommandBar
Скопировать значок с формы надстройки Clipboard.SetData frmAddln.picButton.Picture
Вставить значок из буфера обмена cmd.PasteFace
Снабдить его понятной подсказкой cmd.ToolTiptext = "Документировать приложение" Set cmd = Nothing
Вернуть ссылку на новую кнопку Set AddToAddlnCommandBar = cbMenuCommandBar
AddToAddlnCommandBarErr:
End Function
12. Сохраните проект.
13. Закройте окно программы для объекта Connect.
14. Откройте форму frmAddln, дважды щелкнув на ней в окне проекта.
15. Создайте надпись в левом верхнем углу формы. Задайте ее свойству Name значение IblDescription, а свойству Caption — значение Описание...
16. Растяните надпись по горизонтали так, чтобы ее правый край находился на расстоянии в одну линию сетки от кнопки ОК. Растяните надпись по вертикали так, чтобы ее нижний край совпадал с нижним краем кнопки Cancel.
17. Создайте на форме рамку. Задайте ее свойству Name значение fraOptions, а свойству Caption — значение &Параметры.
18. Расположите рамку так, чтобы она находилась на одну линию сетки ниже надписи и правее левого края формы.
19. Растяните рамку так, чтобы ее правый и нижний края отстояли на одну линию сетки от правого и нижнего краев формы.
20. Создайте на форме флажок. Задайте его свойству Name значение chkProject Summary, а свойству Caption — значение Сведения о &проекте.
21. Создайте под ним еще один флажок. Задайте его свойству Name значение chkComponents, а свойству Caption — значение Сведения о &компонентах.
22. Создайте под ним еще третий флажок. Задайте его свойству Name значение chkReferences, а свойству Caption — значение Сведения о &ссылках.
23. Создайте в правой части формы графическое поле. Задайте его свойству Name значение picButton, а свойству Visible — значение False.
ПРИМЕЧАНИЕГрафическое поле используется в качестве контейнера для хранения значка, отображаемого на кнопке надстройки. Поскольку объект Control панели команд не имеет свойства Icon или Picture, мы должны воспользоваться его методом PasteFace, чтобы вставить значок из буфера обмена. Тем не менее перед вставкой необходимо скопировать значок в буфер с помощью объекта Visual Basic Clipboard. Графическое поле будет служить источником для операции копирования/вставки.
Значок можно выбрать среди тех, которые поставляются с Visual Basic, или нарисовать свой собственный в стандартном графическом редакторе Paint. Если вам захочется использовать для настройки специальный значок, попробуйте загрузить файл CodeDocApp.bmp с Web-узла издательства «Питер» (www.piter-press.ru).
24. Дважды щелкните на свойстве Picture графического поля в окне свойств.
25. Выберите графическое изображение для кнопки на панели надстроек. В частности, просмотрите файлы в каталоге \Program Files\Microsoft Visual Studio\ Common\Graphics\Bitmaps\Tlbr_Win95.
26. Сохраните проект.
27. Примерный вид формы показан на рис. 16.25. Рис. 16.25. Форма надстройки в режиме конструирования
28. Задайте свойству Name кнопки ОК значение cmdOK.
29. Задайте свойству Name кнопки Cancel значение cmdCancel.
30. Дважды щелкните на кнопке cmdOK, чтобы открыть окно программы.
31. Вставьте следующий фрагмент в процедуру события cmdOK_Click:
Private Sub cmdOK_Click()
Добавить новый программный модуль AddModule
Документировать приложение DocumentApp
' Убрать диалоговое окно Connect.Hide End Sub
32. Вставьте следующий фрагмент в процедуру события Load формы:
Private Sub Form_Load() Dim msg As String
msg = "CodeDoc-App позволяет " &
"выбрать параметры на уровне проекта " & "и создает программный модуль " & _ "с перечислением ссылок проекта."
lblDescription.Caption = msg End Sub
33. Создайте процедуру с именем DocumentApp():
Public Sub DocumentAppO Dim X As String
Dim msg As String
If chkProjectSummary.Value = 1 Then
Сведения о проекте X = ListSummaryO End If
If chkComponents.Value = 1 Then
' Сведения о компонентах, использованных в проекте
X = X & ListComponentsO End If
If chkReferences.Value = 1 Then
' Сведения о ссылках, использованных в проекте
X = X & ListReferencesO End If
' Добавить комментарии в начало модуля With VBInstance.ActiveCodePane.CodeModule
.InsertLines 1, X & .....
End With
' Сообщить пользователю о выполнении работы msg = "Проект успешно документирован!" MsgBox msg, vblnformation, "Готово!" End Sub
Эта процедура определяет, какие аспекты проекта необходимо документировать. Как видно из программы, она проверяет состояние флажков и вызывает соответствующие функции, генерирующие комментарии. Перейдем к написанию функций, на примере которых вы поймете, как надстройки работают с IDE:
1. Включите следующую процедуру в секцию (General)(Declarations) формы:
Private Sub AddModuleO Dim ndx As Integer Dim i As Integer
With VBInstance.ActiveVBProject ' Существует ли модуль? For i = 1 To .VBComponents.Count
Если существует, создавать не нужно If .VBComponents(i).Name = "AppSpecs" Then
Активизировать модуль для его дополнения .VBComponents(i).Activate
Создавать новый файл не нужно
Exit Sub End If Next
' Создать программный модуль
.VBComponents.Add vbext_ct_StdModule
ndx = .VBComponents.Count
' Переименовать
.VBComponents(ndx).Name = "AppSpecs" End With End Sub
2. Следующая функция составляет список всех форм, модулей, классов и конструкторов, входящих в проект:
Public Function ListComponentsO As String Dim i As Integer Dim X As String
With VBInstance
' Создать заголовок секции X = " " & vbCrLf & '" Компоненты проекта: " & _ vbCrLf
If .ActiveVBProject.VBComponents.Count > 0 Then
Составить список компонентов For i = 1 To _
.ActiveVBProject.VBComponents.Count
X = X & ..... & vbTab & _
.ActiveVBProject.VBComponents(i).
Name & vbCrLf Next Else
Компонентов нет
X = X & ..... & vbTab & "Нет."
End If End With
Возвратить список компонентов ListComponents = X End Function
Следующая функция составляет список всех библиотечных ссылок, необходимых для нормальной работы приложения. Такой список может пригодиться в ситуации, когда группа разработчиков совместно работает над программой и устанавливает ее на разные компьютеры. Секция ссылок в файле AppSpecs поможет до от-