|
Лекция 3: 2 Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox). Не могу найти меню Разработать (Develop)>Links и т.д. |
Опубликован: 04.07.2006 | Уровень: для всех | Доступ: платный
Лекция 6:
Обмен данными
Практическая работа 45. Создание ActiveX Control
Выполнить следующее:
- в окне Новый проект (рис. 6.11) выбрать элемент ActiveX Control (форма теперь будет объектом UserControl)
OK
задать имя проекта: щелчок правой клавишей мыши в окне проекта на Project1
Свойства
в поле Имя проекта ввести MeinCont
OK, - свойству ControlContainer присвоить значение True - создать элемент-контейнер,
- создать процедуры Timer1_Timer() и Timer2_Timer(), обеспечивающие перемещение объекта Image с рисунком и поля метки в созданном элементе-контейнере, для этого:
- создать поле метки; присвоить значения: Label1.Caption = A Happy New Millennium !!!, AutoSize = Тrue, создать элемент управления Image (см. рис. 6.16); свойству Stretch присвоить значение True,
- создать 2 элемента управления Timer, свойствам Interval присвоить значения 50 и 100 соответственнно,
- создать набор параметров (свойств, методов, событий); для этого использовать программу-мастер: ActiveX Control Interface Wizard: меню Добавления
Менеджер расширений
включить флажок Загружен
ОК; имя программы появляется в выпадающем меню Добавления
стартовать эту программу. В результате действий пользователя (их последовательность дана ниже) система программирования генерирует соответствующий код (см. код ниже: курсивом выделен частично распечатанный сгенерированный системой код), - после старта программы-мастера во втором окне-ассистенте, рис. 6.13, нужно выбрать имеющиеся параметры из списка: свойства: BackСolor, BorderStyl, Caption, Font, ForeColor, ControlContainer, Picture, Stretch, Interval; событие Resize, для этого:
- удалить всe содержимое правого поля за исключением параметров, перечисленных выше, добавить недостающее из левого поля в правое. Тем не менее параметров нехватает, поэтому следует:
- перейти к следующему окну-ассистенту, рис. 6.14; ввести собственные параметры в имеющееся поле ввода, нажимая после каждого ввода кнопку Next :,
- распределить все параметры между объектами: создаваемый элемент, поле метки, 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 - cделать щелчок на кнопке Finish; код сгенерирован, его можно просмотреть,
- сохранить проект,
- ввести код, данный ниже (за исключением строк, данных курсивом); пояснения даны под комментариями к коду,
- проверить функционирование созданного элемента, для этого: стартовать проeкт: выполнение проводится в приложении-Browser рис. 6.16.
- остановить выполнение, закрыть окна кода и объект UserControl (форма); пиктограмма ActiveX Control автоматически добавляется к объектам панели элементов управления и его можно использовать в других проектах. Можно, например, выполнить следующее: меню Файл
Добавить проект
Standard.EXE
OK
разместить новый элемент на форме.
' описание переменных, используемых в процедурах,
' обеспечивающих перемещение элементов
' управления Label1, Image1
Private Go As Integer, Go1 As Integer
' обработка события объекта Timer
Private Sub Timer1_Timer()
GoMeinCont
End Sub
'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
'MappingInfo=UserControl,UserControl,-1,BackColor
Public Property Get BackColor() As OLE_COLOR
BackColor = UserControl.BackColor
End Property
Public Property Let BackColor(ByVal New_BackColor As OLE_COLOR)
UserControl.BackColor() = New_BackColor
PropertyChanged "BackColor"
End Property
Private Sub Timer2_Timer()
Go1MeinCont
End Sub
'Load property values from storage
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
UserControl.BackColor = PropBag.ReadProperty("BackColor", &H8000000F)
' центрировать элементы, задать начальные значения
' переменным. Обратить внимание на использование в
' данном случае события Initialize
Private Sub UserControl_Initialize
Label1.Move (UserControl.Width - Label1.Width)/2, _
(UserControl.Height - Label1.Height)/2
Image1.Move (UserControl.Width - Image1.Width)/4, _
(UserControl.Height - Image1.Height)/4
Go = 1: Go1 = 2
End Sub
Private Sub UserControl_Resize() ' масштабировать объекты
Label1.Width = (ScaleWidth - Label1.Left)
Label1.Height = (ScaleHeight - Label1.Top)
Image1.Width = (ScaleWidth - Image1.Left)
Image1.Height = (ScaleHeight - Image1.Top)
End Sub
Private Sub GoMeinCont() ' реализация перемещения
Select Case Go
Case 1: Label1.Move Label1.Left - 45, Label1.Top - 45
If Label1.Left <= 0 Then
Go = 2
ElseIf Label1.Top <= 0 Then
Go = 4
End If
Case 2: Label1.Move Label1.Left + 45, Label1.Top - 45
If Label1.Left >= (UserControl.Width - Label1.Width) Then
Go = 1
ElseIf Label1.Top <= 0 Then
Go = 3
End If
Case 3: Label1.Move Label1.Left + 45, Label1.Top + 45
If Label1.Left >= (UserControl.Width - Label1.Width) Then
Go = 4
ElseIf Label1.Top >= (UserControl.Height - Label1.Height) Then
Go = 2
End If
Case 4: Label1.Move Label1.Left - 45, Label1.Top + 45
If Label1.Left <= 0 Then
Go = 3
ElseIf Label1.Top >= (UserControl.Height - Label1.Height) Then
Go = 1
End If
End Select
End Sub
Private Sub Go1MeinCont()
Select Case Go1
Case 1: Image1.Move Image1.Left - 60, Image1.Top - 60
If Image1.Left <= 0 Then
Go1 = 2
ElseIf Image1.Top <= 0 Then
Go1 = 4
End If
Case 2: Image1.Move Image1.Left + 60, Image1.Top - 60
If Image1.Left >= (UserControl.Width - Image1.Width) Then
Go1 = 1
ElseIf Image1.Top <= 0 Then
Go1 = 3
End If
Case 3: Image1.Move Image1.Left + 60, Image1.Top + 60
If Image1.Left >= (UserControl.Width - Image1.Width) Then
Go1 = 4
ElseIf Image1.Top >= (UserControl.Height - Image1.Height) Then
Go1 = 2
End If
Case 4: Image1.Move Image1.Left - 60, Image1.Top + 60
If Image1.Left <= 0 Then
Go1 = 3
ElseIf Image1.Top >= (UserControl.Height - Image1.Height) Then
Go1 = 1
End If
End Select
End Sub



