Создание программной библиотеки

Программные модули, которыми мы вскоре займемся, нужно будет где-то хранить. Создайте на жестком диске специальный каталог. В нем мы будем хранить программные модули, которые будут использоваться в будущих проектах.

Программная библиотека создается так:

1. Запустите Проводник Windows с помощью кнопки Пуск или ярлыка на рабочем столе Windows.

2. Создайте каталог (или папку) Codelib. Местонахождение папки следует выбрать так, чтобы при необходимости ее можно было легко найти и скопировать. Содержимое библиотеки не должно пропасть при переустановке программного обеспечения.

3. Закройте Проводник Windows.

ПРИМЕЧАНИЕВ среде Windows термины «папка» и «каталог» означают одно и то же. Метафора папки появилась из-за значков, отображаемых в Проводнике Windows или окне Мой компьютер. Термин «каталог» использовался в эпоху DOS и Unix для обозначения контейнера, в котором хранились файлы и другие каталоги (называемые подкаталогами). В Windows эти понятия относятся к одной и той же области диска.

Если написанный вами программный модуль достаточно универсален и содержит средства, которые могут использоваться в других приложениях, сохраните его в каталоге Codelib. Когда вы захотите включить модуль в другой проект, поступите так:

1. Щелкните правой кнопкой мыши в окне проекта Visual Basic.

2. Выберите из контекстного меню команду Add > Add File.

3. В диалоговом окне Add Module выберите нужный модуль из каталога Codelib.

Создание модулей

Чтобы включить в программный модуль новую процедуру, выполните команду Tools > Add Procedure и выберите нужные параметры в диалоговом окне Add Procedure (рис. 4.1). Эта команда доступна лишь при открытом окне программы.

Создание программной библиотеки - student2.ru

Рис. 4.1. Диалоговое окно Add Procedure

После создания каталога для хранения модулей можно приступать к написанию первого модуля. В следующих разделах мы наделим его некоторыми полезными функциями. Создание модуля происходит так:

1. Создайте новый проект командой File > New Project.

2. Щелкните правой кнопкой мыши в окне проекта и выполните команду Add > Module.

3. Выберите в диалоговом окне Add Module значок Module. Нажмите кнопку Open -в проекте создается пустой модуль.

Ускоренный способ добавления процедур

Вместо выполнения команды Tools > Add Procedure существует и другой, более быстрый, способ включения процедуры в модуль:

1. Введите текст Public Sub ProcedureName (где ProcedureName — имя вашей процедуры) где-нибудь в пустой строке окна программы.

Кроме того, можно ввести Private Sub ProcedureName для создания закрытой процедуры или просто Sub ProcedureName — такая процедура по умолчанию будет открытой.

2. Нажмите клавишу Enter; Visual Basic автоматически создает шаблон процедуры,

Примерный вид окна программы Visual Basic показан на следующем рисунке.

Создание программной библиотеки - student2.ru

4 В окне свойств задайте свойству Name только что созданного модуля значение

MyLibrary.

5. Сохраните файл командой File > Save MyLibrary или воспользуйтесь сочетанием

клавиш Ctrl+S. В открывшемся диалоговом окне Save File As сохраните файл в

каталоге Codelib, созданном в предыдущем разделе. Он положит начало вашей

программной библиотеке.

Процедуры

В предыдущих уроках вы познакомились с процедурами, которые принимают некоторые аргументы, выполняют программный код и изменяют значения передаваемых аргументов. Аргументами называются переменные, которые передаются процедуре. Например, методу Addltem списка передаются аргументы с данными, заносимыми в список, и позицией добавляемой строки в списке. Следующая команда:

Istltems.Addltem "Widgets"

вызывает метод Addltem с аргументом "Widgets" и добавляет эту строку в конец списка. Обратите внимание: аргументы могут относиться практически к любому типу. Конкретный тип зависит от того, как работает данная процедура.

Как вы вскоре убедитесь, процедуры помогают организовать многократное использование кода. Вместо того чтобы заново вводить каждую строку в нескольких местах программы для выполнения одних и тех же задач, можно создать одну процедуру и вызывать ее из нескольких мест программы. Это не только сократит объем вводимого текста, но и гарантирует одинаковую работу процедуры при каждом вызове.

Чтобы вы лучше поняли, как написать процедуру и использовать ее в программе, мы создадим процедуру, заменяющую стандартный указатель-стрелку песочными часами. Ее следует вызывать перед тем, как ваша программа займется выполнением какой-нибудь длительной задачи. Указатель в виде песочных часов подскажет пользователю, что программа не «зависла», а делает что-то полезное.

1. Откройте проект из предыдущего раздела, если он не был открыт ранее.

2. Если модуль MyLibrary отсутствует в проекте, добавьте его — для этого следует щелкнуть правой кнопкой мыши в окне проекта и выполнить команду Add > Module из контекстного меню. Когда появится диалоговое окно Add Module, перейдите на вкладку Existing. Затем найдите файл MyLibrary.Bas и нажмите кнопку Open, чтобы включить модуль в проект.

3. Дважды щелкните на файле My Library. Bas в окне проекта. Открывается окно программы.

4. В окне программы введите следующий код:

Public Sub ShowHourglass()

Screen.MousePointer = 11 End Sub

Процедура создает указатель мыши в виде песочных часов. Однако после того, как указатель был изменен, мы должны иметь возможность вернуть ему прежний вид.

5. Добавьте в модуль следующий фрагмент:

Private Sub ShowMousePointer()

Screen.MousePointer = 0

End Sub

6. Выполните команду File > Save MyLibrary в меню Visual Basic.

Процедуры ShowHourglass и ShowMousePointer пригодятся в тех случаях, когда программа занята, а пользователю приходится ждать ее освобождения. Вызовите ShowHourglass в начале, a ShowMousePointer — в конце периода ожидания, например:

ShowHourglass

IndexLargeDatabase

ShowMousePointer

В будущем, когда вы начнете писать собственные процедуры и функции, их тоже можно будет добавить в этот модуль.

Функции

Функции во многом похожи на процедуры. Существует лишь одно принципиальное отличие — при вызове они возвращают значение. Функция получает один или несколько объектов данных, называемых аргументами, и выполняет с ними некоторые действия. Их результат возвращается функцией. Возможно, это звучит несколько туманно, но на самом деле в функциях нет ничего сложного. Лучше всего рассмотреть работу функций на конкретном примере. Давайте напишем функцию для вычисления кубического корня:

1. Создайте новый проект командой File > New Project.

2. Если модуль My Libгагу отсутствует в проекте, добавьте его — для этого следует щелкнуть правой кнопкой мыши в окне проекта и выполнить команду Add > Module из контекстного меню.

3. Когда появится диалоговое окно Add Module, перейдите на вкладку Existing. Затем найдите файл MyLibrary.Bas и нажмите кнопку Open, чтобы включить модуль в проект.

4. Дважды щелкните на файле MyLibrary.Bas в окне проекта. Открывается окно программы. Вставьте следующий фрагмент в секцию (General)(Declarations):

Public Function CubeRoot

Visual Basic автоматически создает шаблон следующего вида:

Public Function CubeRoot()

End Function

5. Вставьте в шаблон следующий фрагмент (рис. 4.2):

Public Function CubeRoot(x as Double) As Double

If x = 0 Then

CubeRoot = 0

Exit Function

End If

CubeRoot = 10 ^ ((Log(Abs(x)) / Log(10)) / 3)

If x < 0 Then

CubeRoot = -CubeRoot

End If

End Function

Создание программной библиотеки - student2.ru

Рис. 4.2. Окно программы с функцией для вычисления кубического корня

6. Выполните команду File > Save MyLibrary.

Перед тем как рассматривать данный пример, давайте кратко рассмотрим приведенный выше код. Функция получает аргумент х и пытается вычислить его кубический корень. Тип значения, возвращаемого функцией (в нашем примере Double -числовой тип, который может работать с очень большими и очень малыми, а также дробными числами), указывается в заголовке функции после ключевого слова As. Текст функции заканчивается командой End Function, а не End Sub. Обратите внимание на три строки, в которых присваивается значение переменной CubeRoot. Значение функции возвращается в виде переменной, имя которой совпадает с именем функции (в нашем примере — CubeRoot). Если бы наша функция называлась TimesTwo(), то и значение возвращалось бы в переменной TimesTwo (например, TimesTwo = х*2).

Перед тем как приступать к обработке аргумента, желательно проверить полученные данные. Сначала мы проверяем, равен ли аргумент 0 — как известно, кубический корень из 0 равен 0, поэтому мы можем сразу присвоить переменной CubeRoot возвращаемое значение и выйти из функции, не выполняя дальнейших вычислений. Для выхода из функции применяется команда Exit Function.

Математическое обоснование нас сейчас не интересует. Поверьте мне на слово,

команда CubeRoot = 10 ^ ((Log(Abs(x)) / Log(10)) / 3) возвращает кубический корень аргумента х.

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

CubeRoot = - CubeRoot

ПОДСКАЗКАКоманда Exit Function завершает функцию без выполнения дальнейших вычислений. Все дальнейшие команды при этом игнорируются.

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

7. Дважды щелкните на форме Form1 в окне проекта — форма появляется в окне конструктора.

8. Задайте свойству Caption значение Работа с программной библиотекой.

9. Создайте на форме кнопку. Задайте ее свойству Name значение cmdCubeRoot, а свойству Caption — значение Кубический корень.

10. Дважды щелкните на кнопке cmdCubeRoot — открывается окно программы с процедурой события cmdCubeRoot_Click().

11. Вставьте в процедуру следующий фрагмент:

Dim Y As Double

Y = CubeRoot(27)

Print Y

Примерный вид окна программы показан на рис. 4.3.

Создание программной библиотеки - student2.ru

Рис. 4.3. Код вызова функции CubeRoot

12. Запустите приложение и нажмите кнопку. Примерный вид формы показан на рис. 4.4. В нашем примере возвращаемое значение печатается прямо на форме.

Создание программной библиотеки - student2.ru

Рис. 4.4. Функция возвращает кубический корень 3

Обычно возвращаемое значение отображается в одном из элементов формы, например в текстовом поле (рис. 4.5). Это делается так:

Создание программной библиотеки - student2.ru

Рис. 4.5. Измененное окно программы и форма

13. Остановите программу, нажав кнопку [х] в правом верхнем углу формы. Вы снова окажетесь в режиме конструктора.

14. Дважды щелкните на форме Form1 в окне проекта.

15. Создайте на форме текстовое поле, задайте его свойству Name значение txtText1. Удалите текущее содержимое свойства Text.

16. Удалите из процедуры события Click() кнопки cmdCubeRoot последнюю строку (Print Y) и замените ее следующей:

txtText1.Text = Y

Результат показан на рис. 4.6.

Кроме того, можно удалить все содержимое процедуры и ограничиться всего одной строкой:

txtText1.Text = CubeRoot(27)

В этом случае возвращаемое значение присваивается элементу без использования промежуточной переменной.

Создание программной библиотеки - student2.ru

Рис. 4.6. Новый вариант приложения

ПРИМЕЧАНИЕПараметры функций должны заключаться в скобки.

Тестирование в окне отладки

Работу процедур и функций можно проверить в окне отладки.

Запустите проект, затем выполните команду Run > Break. На передний план

выходит окно отладки, показанное на следующем рисунке.

Если вы потеряете его, выполните команду View > Immediate Window. Сейчас вы работаете в режиме отладки. Чтобы запустить процедуру из окна отладки, введите ее имя и нажмите Enter. Если процедура вызывается с параметрами, их также следует ввести. Например:

AlterCaption "Новый заголовок"

В функциях вас в основном интересует возвращаемое значение, которое можно вывести в окне отладки. Это делается, например, так:

Print CubeRoot(27)

или так:

? CubeRoot(27)

Наши рекомендации