Пока у нашего ActiveX-элемента есть несколько добавленных нами методов и свойств. В этом разделе мы посмотрим, как можно добавлять события. Для нашей звезды событие будет несколько искусственным (а именно она будет реагировать на щелчок мыши) - но это не суть важно. Главное, что бы Вы научились это делать - и в дальнейших примерах прибавляемые нами события будет более нужными и естественными.
У каждого события есть имя. Например, когда Вы щелкаете на некотором ActiveX-элементе, то возникает событие с именем Click. На самом деле имя события, возникающего при щелчке, может быть абсолютно любым - и как правило для стандартных событий все создатели ActiveX-элементов придерживаются стандартных имён.
Как задать для ActiveX-элемента некоторое событие? Для этого надо сделать два действия, а именно:
1.Написать в секции General для кода нашего ActiveX-элемента слово Event плюс имя события. Например если Вы хотите добавить событие с именем Click, то Вы должны написать
Event Click()
если Вы создаёте событие с именем MyEvent, то добавьте строчку
Event MyEvent()
2.Вы должны написать некоторый код, который будет определять, когда Ваше новое событие возникнет. Это надо сделать по следующей причине - само по себе объявление некоторого события (т. е. то, что Вы делаете в п. 1) не приводит к тому, что данное событие будет возникать. Например если Вы ввели событие Click() указанным способом, то это ещё не значит, что при щелчке на Вашем ActiveX-элементе что-нибудь будет происходить. Как раз напротив - ничего происходить не будет (пока Вы не выполните и п. 2). Вернёмся теперь к нашему элементу Star.
Добавьте в его код строчку Event Click() (сразу после определения наших переменных m_intN и m_intM). Для того, чтобы убедиться, что теперь наш ActiveX-элемент имеет событие Click(), перейдите в тестовый проект и сделайте двойной щелчок на нашем элементе Star1. Вы окажетесь в окне кода, в событии Star1_Click() (рис. 15)).
Добавьте в него строчку
MsgBox "Click!"
Теперь запустите наш тестовый проект нажав F5 и сделайте щелчок на нашей звезде. Несмотря на то, что мы добавили вызов MsgBox'а, ничего не происходит - и всё потому, что мы не указали, когда возникает событие Click. Сделаем это.
Для этого перейдите в окно кода для нашего ActiveX-элемента. Проследите, чтобы в левом ComboBox'е было выбрано UserControl. В правом ComboBox'е окна кода выберете событие Click. Внесите для этого события код RaiseEvent Click. Таким образом Ваш код для вызова события будет выглядеть следующим образом:
Private Sub UserControl_Click() RaiseEvent Click End Sub
Разберём теперь три приведенные строчки более подробно. Оператор RaiseEvent искусственно вызывает событие для нашего ActiveX-элементна. Какое именно событие? То, имя которого мы укажем после этого оператора, т. е. Click в нашем случае. Конечно в качестве имени события Вы должны указать только те события, которые определены для Вашего ActiveX-элемента. Напомним, что определение события мы делаем с помощью оператора Event, за которым идет имя события (Event Click() в начале кода в нашем случае). Каким образом в строке RaiseEvent Click вызовется событие Click для нашего элемента Star. Спрашивается, а когда именно оно вызовется? Ответ нам дают строчки
Private Sub UserControl_Click() ... End Sub
Т. е. мы вписали вызов нашего события Click в событие Click для нашего UserControl'а. Это означает, что событие Click для ActiveX-элемента возникнет при щелчке на UserControl'е. Таким образом мы как бы связываем события для нашего ActiveX-элемента с уже существующими событиями для UserControl'а.
Подчеркнём еще раз (это самое важное во всех этих рассуждениях) - события первоначально существуют только для UserControl'а. Для нашего ActiveX-первоначально никаких событий не существует. И мы должны вызвать событие для нашего ActiveX-элемента в уже существующем событии для UserControl'а. При этом имя нашего события может быть любое, а событие для UserControl'а мы должны выбрать из существующих.
Если Вы теперь запустите наш тестовый проект и сделаете щелчок на элементе Star1, то появится MsgBox с надписью "Click!" (т. е. именно с той надписью, которую мы для него задали). Обратите внимание ещё на одну вещь - до этого раздела мы почти всегда писали какой-нибудь новый код в окне кода для нашего ActiveX-элемента. Сейчас мы написали вызов MsgBox'а в тестовом проекте. Это означает, что программист, использующий Ваш ActiveX-элемент, сможет написать любой свой код для обработки события Click нашего элемента Star - точно также, как он может написать любой код для, скажем, события Click для стандартной кнопки или для события Change для TextBox'а.