Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Уроки по программированию от Алексеева Игоря

Урок 8. Добавление события к ActiveX'у.
Урок 9. Компиляция ActiveX.
Урок 10. Сохранение свойств в PropertyBag.
Урок 11. Событие InitProperties для ActiveX.

Visual Basic. ActiveX. Урок 8. Добавление события к ActiveX'у

Посмотрим теперь, как мы можем добавить событие к нашему ActiveX'у.

Для этого, во-первых, мы должны в коде нашего ActiveX'а соответствующее событие объявить:

Option Explicit
 ...
Event MyClick()

Теперь нам надо указать, когда это событие возникает. Мы хотим чтобы оно возникало при щелчке на нашем ActiveX'е. Но его-то мы рисуем на UserControl. А у UserControl есть уже событие Click:

Событие Click

Им-то мы и воспользуемся. Добавьте следующий код для ActiveX-элемента:

Private Sub UserControl_Click()
  RaiseEvent MyClick
End Sub

Строка RaiseEvent MyClick говорит, что в этом месте должно возникнуть событие MyClick, которое мы ввели для нашего ActiveX'а. Обратите внимание, что при написании этого кода у нас возникла подсказка:

Подсказка MyClick

Подсказка возникла, естественно, потому, что мы это событие в нашем ActiveX'е объявили.

Все, теперь у нашего ActiveX'а есть событие. Проверим это в тестовом проекте. Перейдите в код для тестового проекта и убедитесь, что событие MyClick присутствует:

Событие MyClick

Напишите теперь для события MyClick тестового проекта следующий код:

Private Sub UserControl11_MyClick()
  MsgBox "Возникло событие MyClick"
End Sub

Запустите тестовый проект (клавиша F5). При щелчке на нашем прямоугольнике возникает соответствующий MessageBox:

MessageBox

И в обработчике для события MyClick можно написать всё, что угодно. Это уже не код ActiveX'а, а код программы, его использующей. Мы делаем это точно также, как и для, скажем, события Click для обычной кнопки - что хотим, то и пишем.

Наверх

Visual Basic. ActiveX. Урок 9. Компиляция ActiveX

Настало время откомпилировать наш ActiveX-элемент. После компиляции мы получим файл с расширением *.ocx. Его уже можно распространять и по другим компьютерам. Так что воспользоваться нашим ActiveX'ом можно будет и в других программах.

Компиляцию делаем естественным образом. Заходим в меню File, далее выбираем Make имя_проекта.ocx:

Компиляция

Проследите только, чтобы из двух проектов - основного и тестового - был активен именно основной (тот, в котором мы и конструируем наш ActiveX). Иначе указанного пункта меню в нем не будет.

После компиляции в указанной вами при этом папке появится файл с откомпилированнным ActiveX-элементом. По размеру он будет не слишком большой, но он будет требовать присутствия на компьютере файла MSVBVM60.DLL. Этот файл требуют все программы, скомпилированные с помощью Visual Basic (версии 6). Он довольно-таки большой (больше 1 Мб), но почти на всех компьютерах с Windows присутствует. Но его может и не быть. Тогда ваш ActiveX работать не будет.

Наверх

Visual Basic. ActiveX. Урок 10. Сохранение свойств в PropertyBag

Все бы сейчас с нашим ActiveX хорошо, но вот беда - он не сохраняет свои свойства. Например, вы в тестовом проекте можете задать свойство Color равным Blue. Цвет нашего прямоугольника станет синим. Но как только мы запустим тестовую программу, то он опять будет красным. Кроме того, при закрытии тестовой программы (т. е. при возврате в режим разработки) наш прямоугольник опять будет красным. Сейчас мы посмотрим, как с этим бороться.

Для этого у нас существует объект такого типа как PropertyBag. Он служит как бы промежуточным хранилищем между двумя экземплярами нашего ActiveX-элемента - экземпляром этапа разработки и экземпляром этапа выполнения (это разные экземпляры!). Добираемся мы до него через UserControl, точнее через его события WriteProperties и ReadProperties:

Методы WriteProperties и ReadProperties

Внесите в них следующий код:

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  m_blnColor = PropBag.ReadProperty("Color", Red)
  If m_blnColor = Red Then
    UserControl.BackColor = vbRed
  Else
    UserControl.BackColor = vbBlue
  End If
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  PropBag.WriteProperty "Color", m_blnColor, Red
End Sub

Прокомментируем его. Событие WriteProperties служит для записи свойств в объект типа PropertyBag. В качестве параметра в него передается объект PropBag типа PropertyBag. У этого объекта есть несколько методов. Один из них - WriteProperty - как раз и используется для записи некоторого свойства в PropertyBag. Это мы делаем в строке

  PropBag.WriteProperty "Color", m_blnColor, Red

У этого метода два параметра: первый - имя параметра (Color), второй - записываемое значение и третий (необязательный) - значение по умолчанию.

Для чтения нам надо использовать событие ReadProperties нашего UserControl. Здесь все аналогично, только кроме чтения значения для цвета мы ещё пишем код для отображения цвета фона для нашего прямоугольника.

Сейчас вы можете менять в тестовом проекте значение свойства Color, и при запуске программы цвет будет отображаться именно выбранным вами значением. И даже если вы выйдите из VB, и потом опять откроете наш тестовый проект, то значение для свойства Color будет именно то, которое вы выбрали!

Наверх

Visual Basic. ActiveX. Урок 11. Событие InitProperties для ActiveX

Когда вы размещаете некоторый стандартный элемент на форме, то части свойств присваивается значение по умолчанию (например, высота и ширина для кнопки). Для создаваемого нами элемента это не так (пока не так). Скажем, если мы разместим на тестовой форме наш ActiveX, то его свойству Color автоматически никакого значения не присвоится:

Свойство Color

Давайте изменим эту ситуацию. Для этого воспользуемся событием InitProperties для нашего ActiveX. Пишем в него следующий код:

Private Sub UserControl_InitProperties()
  m_blnColor = Red
End Sub

Теперь при размешении на тестовой форме нашего ActiveX'а автоматически присвоится нужное свойство:

Свойство Color

При этом обратите внимание, что наш событие InitProperties воазникнет только один раз - а именно при размешении элемента на форме. При запуске программы, а также при повторном открытии проекта это событие возникать не будет. И это правильно - представьте себе, что оно возникало бы при каждом создании ActiveX'а (как вы помните, когда вы запускаете программу, то экземпляр ActiveX'а времени разработки умирает и создается новый экземпляр времени выполнения). Тогда, например, наш элемент всегда был бы красным, а это мы вовсе не хотим.

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

Наверх

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное