The server may have failed or be under short-term maintenance.
If the error repeats continuously over a long period of time,
please inform us via the Contact Us form.

Создание ActiveX элементов на Visual Basic

Создание первого ActiveX элемента.

Домой Наверх Предыдущий Следующий

Добавление кода для перерисовки

Если Вы сейчас запустите Ваш проект, нажав F5, то Вы увидите лишь серый прямоугольник ActiveX-элемента на красном фоне формы. Точно такой же прямоугольник Вы уведете и на этапе разработки при тестировании нашего ActiveX'а (в частности тогда, когда Вы размещаете на форме Form1 наш ActiveX-элемент Star - на этот момент он не представляет из себя ничего интересного: Вы ведете только тот же серый прямоугольник).

Сейчас мы займёмся тем, что зададим программно нашему ActiveX-элементу некоторые начальные значения (а именно n и m). При этом при размещении нашего ActiveX-элемента на форме Form1 (например путём двойного щелчка на панели элементов) у него начальные значения будут уже заданы (n будет равно 3, а m - 1, что соответствует правильному треугольнику), и, таким образом, на нашей форме вместо безликого серого прямоугольника будет сразу размещён треугольник.

Для этого добавьте в код для нашего ActiveX-элемента следующий код (запишите его в проект MyStar Project1.vbp):

Private Sub UserControl_Initialize()

DrawStar m_intN, m_intM

End Sub

Private Sub UserControl_InitProperties()

m_intN = 3

m_intM = 1

DrawStar m_intN, m_intM

End Sub

Обратите внимание на то, что обе функции: и Initialize, и InitProperties суть встроенные (т. е. Вы, скажем, в окне кода можете просто выбрать их в правом ComboBox'е (рис. 13)), т. е. Вы не можете давать им Ваши произвольные имена.

Для того, что бы посмотреть на изменения, который появились в нашей программе, удалите старый экземпляр ActiveX-элемента Star1 с нашей формы Form1, и затем снова поместите его туда любым способом. На этот раз у нас на форме Form1 наш элемент появится с изображённым на нём треугольником (рис. 14)!

Обратите также внимание, что в окне свойств n и m будут равны 3 и 1 соответственно.

При этом первый метод InitProperties выполняется только один раз при размещении нашего ActiveX-элемента на форме Form1 (т. е., например, в момент двойного щелчка на панели элементов).

Метод же Initialize может выполняться несколько раз. В частности, например, когда Вы запускаете Вашу тестовую программу с Form1 в качестве главной формы, каждый раз выполняется код метода Initialize; когда Вы закрываете Form1 и опять возвращаетесь к разработке тестового проекта, этот метод опять выполняется. Если говорить строго, то этот метод выполняется каждый раз когда создается экземпляр Вашего ActiveX-элемента. И здесь есть некий подводный камень. Как Вы думаете, когда создаётся экземпляр нашего элемента Star1? Если Вы думаете, что он создаётся только один раз (в момент его первого рисования на форме), то Вы ошиблись. Новый экземпляр будет создаваться каждый раз, и когда Вы запускаете Вашу программу на выполнение, и каждый раз, когда Вы возвращаетесь в режим конструирования формы. С технической точки зрения любой ActiveX-элемент может существовать в двух состояниях - на форме на этапе разработки и на форме на этапе выполнения. И в том, и в другом случае это отдельный полноценный экземпляр ActiveX-элемента. Когда Вы переводите форму из одного состояния в другое (т. е. из состояния разработки формы в состояние выполнения программы и обратно) существующий экземпляр ActiveX-элемента разрушается, и создаётся новый, для которого и выполняется код, написанный Вами в методе Initialize. При этом код, написанный в методе InitProperties, выполняться не будет - он выполняется только один раз при первом перенесении ActiveX-элемента с панели элементов на форму. Код же, написанный в методе Initialize, будет выполнятся неоднократно.

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

m_intN = 3

m_intM = 1

мы просто записываем начальные значения для n и m. Именно благодаря этому фрагменту на нашем ActiveX-элементе первоначально появляется именно треугольник, а не, скажем, квадрат или звезда . Обычно в этом методе задают что-то самое общее - нули для числовых значений, пустые строки для свойств типа String и т. п. Для числовых свойств m_intN и m_intM мы задали не нулевые значения только потому, что нульугольников просто не существует, и мы просто выбрали минимально возможное разумное значение.

В следующей строке

DrawStar m_intN, m_intM

мы просто рисуем наш многоугольник с заданными уже m_intN и m_intM.

Теперь пара слов о коде, написанном в методе Initialize. В этом фрагменте мы только рисуем наш многоугольник, при этом никакие n и m мы не задаём. Спрашивается, какой многоугольник при этом нарисуется (т. е. чему для него будут равны n и m)? Так вот, каждый раз может рисоваться многоугольник с разными n и m. Почему так происходит? Это сделано вот для чего. Представьте себе, что Вы не разработчик нашего ActiveX-элемента Star, а простой программист, только использующий его в своей работе. Вы нарисовали его на форме (с n равным 3 и m равным 1), затем Вы наверняка захотите изменить его внешний вид. Для этого Вы в свойствах n и m записываете другие значения (что-то типа 101 и 18). Теперь Вы запускаете Вашу программу на выполнение. Что при этом происходит? Первый экземпляр ActiveX-элемента, который Вы нарисовали на форме, разрушается, далее создаётся новый экземпляр, для которого выполняется код, написанный в Initialize. Затем Вы закрываете Вашу форму и снова переходите в режим разработки программы. При этом тот экземпляр ActiveX-элемента, который существовал на этапе выполнения, разрушается, и создаётся опять новый экземпляр, уже для этапа разработки. Так вот, разумеется Вы хотите, что бы для него n равнялось 101, а m - 18, т. е. тем значениям, которые Вы задали на этапе разработки. А так как на этапе разработки Вы и другие программисты, использующие этот ActiveX-элемент, могут задавать любые n и m, то в и методе Initialize мы не пишем конкретные значения для этих переменных.

Впрочем, если Вы сейчас запустите Вашу программу, то ситуация будет следующая: при размещении ActiveX-элемента на форме Вы увидите треугольник (как и обещалось). Далее Вы можете изменить n и m на что-нибудь другое по Вашему вкусу. ActiveX-элемент при этом изменит свой внешний вид в соответствии с Вашими новыми значениями для n и m. Но при запуске Вашей программы у Вас ничего не нарисуется! Но это было бы ещё полбеды. Когда Вы возвратитесь снова на этап проектирования, то на Вашем ActiveX-элементе тоже ничего не будет изображено, и n и m в окне свойств будут равны нулям, а не Вашим значениям и даже не первоначальным тройке и единице!

Вот так с эти бороться мы и рассмотрим в следующем разделе.

Далее

© Ушку ду Кашку

hidden/visible

Hosted by uCoz