Тестирование сообщений несколько сложнее, чем тестирование
функций. Связано это с тем, что система может отправлять сообщения только окну.
Как вы заметили, у нас, до сих пор, не о каких окнах речи не шло, и наши
маленькие примеры работали внутри окна «Excel». Создадим теперь свое маленькое окошко. Для этого
перейдите в редактор Visual Basic
(Alt+F11) и выберите в меню команду «Insert / User Form…». Перед глазами у вас появится маленькое пустое диалоговое
окошко (форма). Это собственно окно вашей программы. В другом окне редактора
находится код программы, которая будет выполняться в этой форме. Переключиться
в окно кода можно клавишей (F7).
Переключиться в окно формы можно клавишей (Shift+F7). Для начала переключимся в окно
кода (F7). Там будут
ненужные строки:
Private Sub UserForm_Click()
End Sub
В место них скопируйте наш
пример.
Попробуйте запустить приложение (F5). После того как вы закроете
"Ура! Получен указатель на документ О!Пиум", на экране останется окно
вашего приложения. Собственно мы пока никакого кода не писали, и это окно
просто болтается на экране и ничего не делает. Его можно закрыть. Но главное
достоинство этого окна в том, что оно может получать сообщения и даже уже
получает их. Обратите внимание на имя функции UserForm_Activate(). Оно
состоит из двух частей, разделенных символом подчеркивания. Это типичный пример
имени функции–обработчика сообщений. Слева от знака подчеркивания находится имя
объекта–источника сообщения, а справа собственно имя сообщения. Можно
догадаться, что это сообщение порождает наша форма (окно) во время своей
активизации (а мы пользуемся этим событием для получения указателя на объект).
Точно так же и указатель на объект opium может порождать
сообщения. Правда, для того, чтобы окно формы узнало об этом — нужно
использовать описании объекта ключевое слово WithEvents.
Собственно дальше можно было бы начинать писать обработчики сообщений подобные opium_BeforeClose(), используя
для названия функций соглашение, описанное выше, но Basic предлагает другой, более простой и
удобный способ создавать «скелеты» обработчиков. Чтобы понять, о чем идет речь
— переместите курсор в окне кода нашего примера на самую первую строку. Сразу
над первой строкой находятся два раскрывающихся списка. В левом списке (где
написано «(General)»)
находятся доступные объекты. В правом списке (где написано «(Declaration)») находятся сообщения для
текущего (выбранного в левом списке) объекта. Разверните левый список. Найдите
там объект opium. Если его нет, то, скорее всего вы
забыли подключить «Opium
1.0 Type Library»
(см. первую главу). Допустим, что объект opium там
есть. Выберите его. Затем раскройте правый список. Там вы найдете список всех
доступных событий. Выберите SelectedCRV. Редактор
сгенерирует «скелет» функции–обработчика такого вида:
Private Sub opium_SelectedCRV(ByVal name As Variant, ByVal depth As Double)
End Sub
Скопируйте внутрь тела обработчика этот код:
'Напишем
в заголовке имя кривой и глубину на которой щелкнули
UserForm1.Caption = name + " - " + Format(depth, "#0.0")
Теперь запустите приложение (F5), закройте окно "Ура! Получен указатель на документ О!Пиум". Обратите внимание на заголовок вашей формы. Теперь переключитесь в «О!Пиум». Щелкните левой кнопкой мыши на видимой кривой (не на заголовке). Затем переключитесь назад в Excel и посмотрите на заголовок вашей формы. Там должно быть написано имя кривой и через дефис глубина, на которой вы щелкнули мышью. Если это действительно так, то тест удался. дальше>>