Как подключить библиотеку DLL ? |
Опубликован: 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