| Создание утилиты комментирования на уровне процедуры |
| 28.10.2011 22:30 |
|
Последняя надстройка помогает документировать код на уровне процедуры. Я назвал ее CodeDoc - Ргос. 1. Создайте новый проект командой File > New Project. 2. Выберите значок Add-In и нажмите кнопку ОК, чтобы создать проект. 3. Задайте свойству Name созданного проекта значение CodeDocProc. 4. Откройте папку Designers в окне проекта и дважды щелкните на объекте Connect.
5. В поле Add-In Display Name введите строку CodeDoc - Ргос. Это имя будет отображаться в диспетчере и на панели надстроек. 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 был снят. Наша надстройка обладает графическим интерфейсом и не работает в режиме командной строки. 9. Откройте окно программы — щелкните правой кнопкой мыши на объекте Connect и выполните команду View Code из контекстного меню. 10. В секции (General)(Declarations) удалите строку Dim mfrmAddln As New frmAddln 11. Примерно в середине процедуры события AddinInstance_OnConnection замените строку Set mcbMenuCommandBar = AdToAddInCommandBar("My AddIn") Строкой Set mcbMenuCommandBar = AdToAddInCommandBar("CodeDoc - Proc") 12. Удалите из процедуры события AddinInstance_OnDisconnection следующий фрагмент: Unload mfrmAddIn Set mfrmAddIn = Nothing 13. Удалите текущее содержимое функции 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 AddToAddInCommandBarErr Проверить, удается ли найти панель 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 frmAddIn. picButton. Picture ' Вставить значок из буфера обмена cmd. PasteFace ' Снабдить его понятной подсказкой cmd. ToolTiptext = "Документировать шаблон" Set cmd = Nothing ' Вернуть ссылку на новую кнопку Set AddToAddlnCommandBar = cbMenuCommandBar AddToAddlnCommandBarErr: End Function 14. Сохраните проект. 15. Замените содержимое процедуры Show конструктора следующим: Sub Show() Dim proc As String Dim x As String Dim 1 As String ' Получить имя процедуры proc = GetProcedureName() With VBInstance. ActiveCodePane. CodeModule ' Получить верхнюю строку процедуры ' Создать комментарии х = ..... & vbCrLf & _ "' Автор: " & vbTab & vbTab & _ " Введите свое имя" & _ VbCrLf & "' Создан: " & _ VbTab & vbTab & _ Format$(Date$, "mm-dd-yyyy") & _ VbCrLf & "' Описание: " & _ VbCrLf & ..... & vbTab & vbTab & _ VbTab & vbTab & "Введите " & _ "описание процедуры." & vbCrLf & '" Обновления: " &vbCrlf & _ " ' " & vbTab & vbTab & vbTab &_ vbTab & "Введите описание обновлений." & _ vbCrLf & " ' "Вставить над объявлениями процедуры. InsertLines 1, х End With End Sub 16. Удалите содержимое процедуры Hide. 17. Создайте функцию GerProcedureName: Public Function GetProcedureName() As String Dim a As Long Dim b As Long Dim с As Long With VBInstance. ActiveCodePane Определить текущую строку курсора. GetSelection currentline, a, b, с Передать номер строки функции ProcOfLine() GetProcedureName = .CodeModule. _ ProcOfLine(currentline, _ vbext_pk_Proc) End With End Function 18. Откройте форму frmAddIn двойным щелчком в соответствующей строке окна проекта. 19. Удалите с формы кнопки ОК и Cancel. 20. Создайте на форме графическое поле. Задайте его свойству Name значение picButton, а свойству Visible — значение False.
ПОДСКАЗКА Значок можно выбрать среди тех, которые поставляются с Visual Basic, или нарисовать свой собственный в стандартном графическом редакторе Paint. Если вам захочется использовать для настройки специальный значок, попробуйте загрузить файл CodeDoc App. bmp с Web-узла издательства «Питер» (www. piter-press. ru). 21.Дважды щелкните на свойстве Picture графического поля в окне свойств. 22. Выберите графическое изображение для кнопки на панели надстроек. В частности, просмотрите файлы в каталоге \Program Files\Microsoft Visual Studio\ Common\Graphics\Bitmaps\Tlbr_Win95. 23. Сохраните проект. Откомпилируйте готовую надстройку и загрузите ее в IDE с помощью диспетчера надстроек, как это было сделано для предыдущей надстройки. После загрузки надстройки панель инструментов должна выглядеть так, как показано на рис. 16.32.
Документировать процедуру Рис. 16.32. Кнопка надстройки на панели Edit Рассмотрим работу надстройки на следующем несложном примере: 1. Откройте окно программы для модуля, в который добавляются комментарии. В нашем примере следует открыть окно программы для конструктора Connect. 2. Выберите процедуру, в которой создается комментарий, — для этого щелкните мышью внутри тела процедуры. Для нашего примера выберите функцию GetProcedureName(). 3. Нажмите кнопку CodeDoc - Ргос на панели Edit. 4. При запуске надстройки в процедуру автоматически включается блок комментариев. Его примерный вид показан на рис. 16.33. Рис. 16.33 Блок комментариев на уровне процедуры
Комментарий готов, вам остается лишь заполнить пару строк. Если в процедуру будут внесены какие-либо изменения, включите их описание в комментарий. Хорошие комментарии — залог жизнеспособности и устойчивости вашей программы. Они не только упрощают чтение кода, но и оказываются особенно полезными при работе в составе группы. Впрочем, даже если вы работаете в одиночку, комментарии все равно важны. Представьте себе, что через год вам потребуется внести в программу какие-нибудь изменения или исправить ошибку. Будете ли вы помнить весь исходный текст программы и логику ее работы после столь длительного перерыва? |

