Событийное управление
Событийное управление - это способ структуризации программного кода, основанный на следующей идее. Имеется некоторое предопределенное множество поименованных событий. События могут быть явным образом связаны с объектами, а могут быть связаны неявным образом или быть связаны с неявными объектами - в таком случае события обычно называют системными. События могут возникать. Возникновение события подразумевает, что состояние системы изменилось определенным образом.
С событием может быть связана процедура, которая называется реакцией на событие. При возникновении события автоматически вызывается процедура реакции. В современных системах программирования, поддерживающих событийное управление, предусматривается большое число самых разнообразных событий, реакции на которые могут быть определены в программе, например: нажатие клавиши на клавиатуре, попадание указателя мыши в определенную область экрана, достижение внутренним таймером заданного значения, открытие заданного файла и т. д. В программе, целиком управляемой событиями, нет основного потока управления, он находится вне программы (в операционной системе или в административной системе времени выполнения, т. е. там, где реализован механизм возникновения и контроля событий).
Управление в программу попадает только в форме вызова процедуры реакции. Такая организация программы обеспечивает высокую модульность, прозрачность, сбалансированность структуры и другие полезные свойства. Понятно, что если связать события с командами приложения (как обычно и делается), то событийное управление как нельзя лучше подходит для реализации интерфейса пользователя.
В сущности, событийное управление является развитием очень старой идеи прерываний, которые были придуманы для организации взаимодействия синхронно и монотонно работающего центрального процессора с асинхронными немоно-
83
тонными внешними устройствами. Поэтому событийное управление называют еще асинхронным.
В современных системах программирования имеются богатые и все время развивающиеся библиотеки готовых компонентов, которые называются элементами управления (controls) и которые тесно интегрированы со встроенными механизмами событийного управления. Использование готовых элементов управления удобно, продуктивно и должно быть рекомендовано в большинстве случаев.
5.4. Вызов процедур и функций
Помимо объявления процедур и функций, их нужно использовать - вызывать. VBA предоставляет пользователю настолько гибкую систему вызова процедур и функций, что пользователю приходится задумываться, каким из способов вызывать процедуру.
Первый, самый простой вызов:
ИмяПроцедуры СписокФактическихАргументов
ИмяПроцедуры - это имя вызываемой Процедуры, а СписокФактическихАргументов - это список фактических аргументов, передаваемых процедуре при ее вызове. Он должен соответствовать обязательному списку формальных параметров, заданному при объявлении процедуры. Фактические аргументы, если их больше одного, перечисляются через запятую; их порядок обязан соответствовать объявленным параметрам. Заметьте, что при подобном вызове процедуры нет необходимости заключать список фактических аргументов в скобки.
Также можно вызывать процедуру, используя ключевое слово Call.
Call ИмяПроцедуры(СписокФактическихАргументов)
84
Суть всех синтаксических при данном способе вызова остается той же. Отличие заключается в том, что список фактических аргументов обязан (!) заключаться в скобки.
Вызов функции немного отличен от вызова процедур. Главное отличие в том, что можно передавать вычисляемое значение функции некоторой переменной; таким образом, вызов функции имеет следующий вид:
ИмяПеременной = ИмяФункции _ (СписокФактическихАргументов)
Давайте на примере вышеобъявленных процедур и функций покажем их вызов.
Листинг. Вызов процедур и функций
Public Sub TestCall_l() Dim book As TBook Dim salary As Currency book.pages = 687 book.price = 170.5 book.edition = 3000
Call InitContent(book.content) salary = getAuthorSalary(book, True) MsgBox salary
End Sub
В вышеописанных способах вызова фактические аргументы располагались в той же последовательности, что и формальные параметры при объявлении процедуры или функции. В ряде случаев, особенно когда процедура содержит большое количество необязательных параметров, можно воспользоваться уникальной возможностью VBA - именованными аргументами. При подобном вызове кроме значения фактического аргумента указывается и имя формального параметра, которому соответствует данное значение. Для этого после имени параметра ставится двоеточие и знак равенства, после которого
85
идет фактический аргумент. Это очень удобный прием, позволяющий видеть связь формального параметра с фактическим аргументом.
Листинг. Использование именованных аргументов
Public Sub TestCall_2() Dim book As TBook Dim salary As Currency book.pages = 687 book.price = 170.5 book.edition = 3000
Call InitContent(cnt:=book.content)
salary = getAuthorSalary(book:=book, SalaryType:=False) MsgBox salary
End Sub
При описании синтаксиса объявления процедуры мы вскользь упомянули ключевое слово paramArray. Настало время уделить ему достойное внимание. Возможность передавать процедуре заранее не известное число фактических аргументов является опять-таки уникальной по отношению ко многим другим языкам программирования.
6. ВСТРОЕННЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
6.1. Функции ввода и вывода
Одним из классов часто употребляемых функций являются функции ввода и вывода, обеспечивающие диалог пользователя с компьютером. Одна из них - уже знакомая вам функция мsgВох, вызов которой имеет следующий синтаксис:
Msgbox(сообщение[, кнопки] [, заголовок] _ [, файлСправки, контекст])
Здесь сообщение - это и есть тот текст, который будет отображен в диалоговом окне. Только этот параметр обязате-
86
лен, остальные - нет, и могут быть опущены, кнопки - это числовое выражение, являющееся суммой значений, определяющих, какие именно кнопки будут выведены в диалоговом окне, какой значок диалогового окна следует использовать, а также указывающее, какая кнопка должна иметь фокус по умолчанию и, наконец, определяющее модальность окна. При задании этой величины удобно использовать следующие встроенные константы VBA.
|
|
|
|
Таблица 6.1 |
|
|
Константы функции MsgBox |
|
|||
Константа |
|
Значение |
Описание |
|
|
|
|
|
|
||
VbOKOnly |
|
0 |
Выводится только кнопка ОК |
||
|
|
|
(принимается по умолчанию) |
||
|
|
|
|
||
VbOKCancel |
|
1 |
Выводятся кнопки ОК и Cancel |
||
|
|
|
|
||
vbAbortRetrylgnore |
|
2 |
Выводятся кнопки Abort, Retry |
||
|
|
|
и Ignore |
|
|
|
|
|
|
||
vbYesNoCancel |
|
3 |
Выводятся кнопки Yes, No и |
||
|
|
|
Cancel |
|
|
|
|
|
|
||
vbYesNo |
|
4 |
Выводятся кнопки Yes и No |
||
|
|
|
|
||
vbRetryCancel |
|
5 |
Выводятся кнопки Retry и |
||
|
|
|
Cancel |
|
|
|
|
|
|
||
vbCritical |
|
16 |
Выводится значок Critical |
||
|
|
|
Message |
|
|
|
|
|
|
|
|
vbQuestion |
|
32 |
Выводится |
значок |
Warning |
|
|
|
Query |
|
|
|
|
|
|
|
|
vbExclamation |
|
48 |
Выводится |
значок |
Warning |
|
|
|
Message |
|
|
vblnformation |
|
64 |
Выводится |
значок Information |
|
|
|
|
Message |
|
|
|
|
|
|
||
vbDefaultButtonl |
|
0 |
Выделяется первая кнопка |
||
|
|
|
|
||
vbDefaultButton2 |
|
256 |
Выделяется вторая кнопка |
||
|
|
|
|
|
|
87