Visual Basic 6. Руководство разработчика

Модули VB: краткий обзор


Обычно легче понять новую концепцию, если ассоциировать ее с другой, уже освоенной. Начнем с обзора модулей Visual Basic, а затем посмотрим, как те же концепции могут быть применены к модулям классов. Разработаем небольшое приложение, подсчитывающее время (оно может стать частью другого приложения, которому необходимо вычислять время выполнения своих операций). Приложение должно иметь возможность запускать и останавливать таймер по своему желанию. Когда в приложении выполняется вспомогательный программный код, необходимо иметь возможность приостановить таймер, а затем продолжить отсчет времени. После завершения операции, продолжительность которой определяется, должна быть предусмотрена возможность считывания прошедшего времени. Поместим все необходимые переменные и функции в модуль. При этом его можно будет повторно использовать в других проектах. (Вообще, такая практика является хорошим тоном в программировании — изолировать механизм определения промежутков времени от остального кода и сделать его доступным приложению через вызов нескольких процедур). Приложение, которое будет разработано в этом разделе, называется TimerMod, и его можно найти в папке этой главы на компакт-диске.

Создайте новый проект и добавьте в него модуль. Затем введите в этот модуль следующие строки.

Программа 15.1. Код модуля TimerMod

Public TotalInterval As Double

Dim T1 As Double

Sub StartCounting()

Tl = Time

End Sub

Sub  StopCounting ()

     Totallnterval = Totallnterval + Time – Tl

End  Sub

Sub ResetTimer()

Totallnterval = 0



End Sub

Процедура

StartCounting()

запускает таймер, а процедура StopCounting() — оста­навливает. Каждый раз после остановки таймера переменная Totallnterval

обновляется. Для получения затраченного времени приложение должно прочесть значение этой переменной. И, наконец, процедура ResetTlmer() переустанавливает таймер. Такой механизм отсчета времени не позволяет прочитать затраченное время во время работы таймера. Необходимо сначала вызвать метод StopCounting для обновления переменной Totallnterval,


затем считать значение переменной.

А сейчас перейдите к формам приложения и поместите две кнопки на форму. Установите их заголовки в Start Timing и Show Interval, как показано на рис. 15.1. Затем добавьте следующие строки в содержимое окна кода формы.

Программа 15.2. Код тестирования

TimerMod

Private Sub Commandl_Click()

If Coinmandl.Caption = "Start" Then

StartCounting

Command1.Caption = "Stop"       ' (Остановка)

Else

StopCounting

Command1.Caption = "Start"      ' (Запуск)

End If

End Sub

Private Sub Command2_Click ()

MsgBox "I've been counting for " & vbCrLf & _

Hour(TotalInterval) & "hours" & vbCrLf & _

Minute(TotalInterval) & " minutes and" & vbCrLf & _

Second(TotalInterval) & " seconds" & vbCrLf

' (С начала отсчета прошло... часов... минут и... секунд)

End Sub

Выполните приложение, запустите таймер, остановите и запустите его еще несколько раз. Затем нажмите кнопку Show Interval для оценки затраченного времени в часах, минутах и секундах.

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

Totallnterval

какое-либо значение:

TotalInterval = 0.00453567

Такое присваивание допустимо для интервала времени, но что произойдет, если он попытается присвоить недопустимое значение, например:

TotalInterval = 99



Рис. 15.1. Форма проекта TimerMod

Вероятнее всего, программа будет работать, но она больше не будет правильно информировать о затраченном времени. Другой программист может проигнориро­вать процедуру ResetTimer() и попытаться переустановить переменную Totallnterval из процедуры StartCounting(). Возможно, его действительно не интересует остановка и возобновление процесса отсчета времени и ему удобно переустанавливать пере­менную Totallnterval каждый раз при вызове функции StartCounting(). Его проект будет работать (и с меньшим числом вызовов), но ваш нет. В этом и заключается наиболее важное преимущество в реализации вспомогательных процедур в виде модулей классов — создание компонентов, совместимых со многими приложе­ниями. В дополнение, реализуя механизм отсчета времени отдельно от приложения, можно скрыть детали ее реализации от разработчиков, которые ее используют. Ведь на самом деле не надо знать, как Excel вычисляет сложное математическое выражение в процессе вызова его метода Evaluate.


Содержание раздела