Выполнить следующее:
1. в окне Новый проект (рис. 6.11) выбрать элемент ActiveX Control (форма теперь будет объектом UserControl)
OK
задать имя проекта: щелчок правой клавишей мыши в окне проекта на Project1
Свойства
в поле Имя проекта ввести MeinCont
OK,
2. свойству ControlContainer присвоить значение True - создать элемент-контейнер,
3. создать процедуры Timer1_Timer() и Timer2_Timer(), обеспечивающие перемещение объекта Image с рисунком и поля метки в созданном элементе-контейнере, для этого:
o создать поле метки; присвоить значения: Label1.Caption = A Happy New Millennium!!!, AutoSize = Тrue, создать элемент управления Image (см. рис. 6.16); свойству Stretch присвоить значение True,
o создать 2 элемента управления Timer, свойствам Interval присвоить значения 50 и 100 соответственнно,
4. создать набор параметров (свойств, методов, событий); для этого использовать программу-мастер: ActiveX Control Interface Wizard: меню Добавления
Менеджер расширений
включить флажок Загружен
ОК; имя программы появляется в выпадающем меню Добавления
стартовать эту программу. В результате действий пользователя (их последовательность дана ниже) система программирования генерирует соответствующий код (см. код ниже: курсивом выделен частично распечатанный сгенерированный системой код),
5. после старта программы-мастера во втором окне-ассистенте, рис. 6.13 нужно выбрать имеющиеся параметры из списка: свойства: BackСolor, BorderStyl, Caption, Font, ForeColor, ControlContainer, Picture, Stretch, Interval; событие Resize, для этого:
o удалить всe содержимое правого поля за исключением параметров, перечисленных выше, добавить недостающее из левого поля в правое. Тем не менее параметров нехватает, поэтому следует:
o перейти к следующему окну-ассистенту, рис. 6.14 ввести собственные параметры в имеющееся поле ввода, нажимая после каждого ввода кнопку Next:,

Рис. 6.13. Второе окно-ассистент - выбор имеющихся в наличии параметров

Рис. 6.14. Следующее окно-ассистент - создание собственных параметров
o распределить все параметры между объектами: создаваемый элемент, поле метки, Timer, Image; для этого перейти к следующему окну-ассистенту, рис. 6.15при этом использовать данные табл.6.5
Таблица 6.5. Соответствие объекты - параметры
|
Name
| Control
| Member
|
BackColor
| UserControl
| BackColor
|
BorderStyle
| UserControl
| BorderStyle
|
Caption
| Label1
| Caption
|
ControlContainer
| UserControl
| ControlContainer
|
Resize
| UserControl
| Resize
|
Font
| Label1
| Font
|
ForeColor
| Label1
| ForeColor
|
Interval
| Timer1
| Interval
|
Stretch
| Image1
| Stretch
|
Picture
| Image1
| Picture
|
o 
o Рис. 6.15. Следующее окно-ассистент
o cделать щелчок на кнопке Finish; код сгенерирован, его можно просмотреть,
6. сохранить проект,
7. ввести код, данный ниже (за исключением строк, данных курсивом); пояснения даны под комментариями к коду,
8. проверить функционирование созданного элемента, для этого: стартовать проeкт: выполнение проводится в приложении-Browser рис. 6.16
9. остановить выполнение, закрыть окна кода и объект UserControl (форма); пиктограмма ActiveX Control автоматически добавляется к объектам панели элементов управления и его можно использовать в других проектах. Можно, например, выполнить следующее: меню Файл
Добавить проект
Standard.EXE
OK
разместить новый элемент на форме.
' описание переменных, используемых в процедурах,' обеспечивающих перемещение элементов ' управления Label1, Image1Private Go As Integer, Go1 As Integer ' обработка события объекта TimerPrivate Sub Timer1_Timer()GoMeinContEnd Sub'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!'MappingInfo=UserControl,UserControl,-1,BackColorPublic Property Get BackColor() As OLE_COLORBackColor = UserControl.BackColorEnd PropertyPublic Property Let BackColor(ByVal New_BackColor As OLE_COLOR)UserControl.BackColor() = New_BackColorPropertyChanged "BackColor"End PropertyPrivate Sub Timer2_Timer()Go1MeinContEnd Sub'Load property values from storagePrivate Sub UserControl_ReadProperties(PropBag As PropertyBag)UserControl.BackColor = PropBag.ReadProperty("BackColor", &H8000000F)' центрировать элементы, задать начальные значения ' переменным. Обратить внимание на использование в ' данном случае события InitializePrivate Sub UserControl_Initialize Label1.Move (UserControl.Width - Label1.Width)/2, _(UserControl.Height - Label1.Height)/2Image1.Move (UserControl.Width - Image1.Width)/4, _(UserControl.Height - Image1.Height)/4Go = 1: Go1 = 2End SubPrivate Sub UserControl_Resize() ' масштабировать объекты Label1.Width = (ScaleWidth - Label1.Left) Label1.Height = (ScaleHeight - Label1.Top) Image1.Width = (ScaleWidth - Image1.Left) Image1.Height = (ScaleHeight - Image1.Top) End SubPrivate Sub GoMeinCont() ' реализация перемещенияSelect Case GoCase 1: Label1.Move Label1.Left - 45, Label1.Top - 45If Label1.Left <= 0 ThenGo = 2ElseIf Label1.Top <= 0 ThenGo = 4End IfCase 2: Label1.Move Label1.Left + 45, Label1.Top - 45If Label1.Left >= (UserControl.Width - Label1.Width) ThenGo = 1ElseIf Label1.Top <= 0 ThenGo = 3End IfCase 3: Label1.Move Label1.Left + 45, Label1.Top + 45If Label1.Left >= (UserControl.Width - Label1.Width) ThenGo = 4ElseIf Label1.Top >= (UserControl.Height - Label1.Height) ThenGo = 2End IfCase 4: Label1.Move Label1.Left - 45, Label1.Top + 45If Label1.Left <= 0 ThenGo = 3ElseIf Label1.Top >= (UserControl.Height - Label1.Height) ThenGo = 1End IfEnd SelectEnd SubPrivate Sub Go1MeinCont()Select Case Go1Case 1: Image1.Move Image1.Left - 60, Image1.Top - 60If Image1.Left <= 0 ThenGo1 = 2ElseIf Image1.Top <= 0 ThenGo1 = 4End IfCase 2: Image1.Move Image1.Left + 60, Image1.Top - 60If Image1.Left >= (UserControl.Width - Image1.Width) ThenGo1 = 1ElseIf Image1.Top <= 0 ThenGo1 = 3End IfCase 3: Image1.Move Image1.Left + 60, Image1.Top + 60If Image1.Left >= (UserControl.Width - Image1.Width) ThenGo1 = 4ElseIf Image1.Top >= (UserControl.Height - Image1.Height) ThenGo1 = 2End IfCase 4: Image1.Move Image1.Left - 60, Image1.Top + 60If Image1.Left <= 0 ThenGo1 = 3ElseIf Image1.Top >= (UserControl.Height - Image1.Height) ThenGo1 = 1End IfEnd SelectEnd Sub
Рис. 6.16. ActiveX Control