Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

Вопросы для самопроверки и контроля

Вопрос для самопроверки

  1. Что происходит в точке прерывания?

Контрольный вопрос

  1. Можно ли создать полностью исполняемый файл программы, который при выполнении не использует динамических библиотек?

Глава 14. Дополнительные возможности

14.1. ActiveX ‑ элементы

ActiveX-элементы (внешние управ­ляю­щие элементы, которые нахо­дят­ся в OCX-файлах, представляют собой го­то­вые модули, реализующие некоторые типичные задачи, элементы интер­фей­са пользователя, вк­лю­чае­мые в состав приложения или в HTML‑документ (п.15.2.12). ActiveX-эле­менты можно создавать в различных системах программирования и ис­поль­зовать в Visual Basic, так как структура и правила их исполь­зования унифицированы.

Покажем создание ActiveX-элемента на примере. Создадим новый управляющий элемент под названием ctlActX и разместим его на панели элементов, а для отладки его создадим программу (рис. 14.1.1).

Рис. 14.1.1. Формы управляющего элемента и программы его тестирования

Запустите Visual Basic, выберите команду File/New Project, выделите значокActiveX Controlи нажмитеOpen, откроется окноUser Control, ко­ман­дойFile/Save UserControl Asсохраните элемент под именем ActX.CTL, командойFile/Save Projectсохраните проект под именем ActX.VBP.

Для построения элемента можно использовать мастер VB Active Control Interface Wizard, который включается в менюAdd-Ins командой Add-Ins/Add-In Manager и вызывается далее командой Add-Ins/Active Control Interface Wizard.

В нашем примере мы не будем использовать этот мастер. Для присвоения имени новому элементу выполним команду Project/Project1 Properties, выберем страницуGeneralи в поле имени проектаProject Nameукажем ActX, а в поле описания проектаProject Description‑ текст “Cобственный ActiveX Control” (это имя будет указано в списке выби­раемых компонентов, который выводится командойProject/Components). Зададим значения свойств окнаUserControl: Name=ctlActX (имя элемента, которое появится в сплывающей подсказке на панели элементов и которое будет присваиваться по умолчанию при размещении элемента на форме приложения), BackColor=(красный цвет), разместим две кнопки и текстовое поле (рис. 14.1.1.]. Составим текст про­цедур для кнопок:

Private Sub Command1_Click() ‘обработка кнопкиПривет

Text1.Text = ”Здравствуйте!” ‘формирование значения поля Text1

End Sub

Private Sub Command2_Click() ‘обработка кнопкиОчистить

Text1.Text = ”” ‘формирование пустого значения поля Text1

End Sub

После размещения нового элемента на форме пользователь должен иметь возможность изменять размеры этого элемента. Размеры кнопок и тексто­вого поля этого элемента должны автоматически пропорционально изменяться. Для этого воспользуемся событием Resize объекта UserControl, которое наступает при изменении размера этого объекта, и составим процедуру:

Private Sub UserControl_Resize() ‘процедура изменения размеров

Text1.Top=0 ‘вертикальная координата левого верхнего угла поля Text1 Text1.Left= 0 ‘горизонтальная координата левого верхнего угла поля Text1

Text1.Width = ScaleWidth ’ширина поля Text1 равна ширине элемента

Text1.Height = ScaleHeight / 4 ‘высота поля Text1=1/4 высоты элемента

Command1.Top = Text1.Height ‘вертикальная координата кнопки

Command1.Left = 0 ‘горизонтальная координата кнопки

Command1.Width = ScaleWidth ‘ширина кнопки равна ширине элемента

Command1.Height = Text1.Height ‘высота кнопки равна высоте поля Text1

Command2.Top = Text1.Height + Command1.Height ‘вертикальная координата

Command2.Left= 0 ‘горизонтальная координата кнопки

Command2.Width=ScaleWidth‘ширина кнопки равна ширине элемента

Command2.Height = Text1.Height ‘высота кнопки равна высоте поля Text1

End Sub

Выполним команду File/Make ActX.ocx и сформируется файл ActX.OCX в нужном каталоге.

Для отладки этого нового элемента выполним команду File/Add Project/New/Standard Exe/Open и создадим новый проект TestActx. Нажав ^T, выберем новый элемент под именем “Cобственный ActiveX Control” из списка компонентов, и он окажется на панели элементов. Разместим новый элемент и кнопку Выход на форме нового проекта (рис. 14.1.1). Проце­ду­ра обработки кнопки Выход имеет вид:

Private Sub Command1_Click() ‘процедура выхода из программы

End ‘закончить выполнение программы

End Sub

Выполним команду Save Project Group As для объединения двух проектов в группу и укажем имя группы Group1. Это позволит открывать одну группу из двух проектов одной командой Open Project и далее работать одновременно с несколькими проектами. Если в форме для тести­рования поле нового элемента окажется заштрихованным (рис. 14.1.1), то закройте окно нового элемента в проекте его создания (ActX). Выполните программу тестирования.

Добавим собственное свойство Caption в новый ActveX элемент. Перейдем в программное окно элемента ActX, выберем команду Tools/Add Procedure, в поле Name введем имя создаваемого свойства Caption, установим тип процедуры Property, область видимости ‑ Public и составим процедуры чтения свойства и присвоения нового значения свойству:

Public Property Get Caption() As String ‘процедура чтения свойства

Caption = Text1.Text ‘значение поля Text1

End Property

Public Property Let Caption(ByVal vNewValue As String) ‘присв. значения

Text1.Text = vNewValue ‘параметр содержит новое значение свойства

PropertyChanged ”Caption” ‘признак изменения значения свойства Caption

End Property

Разместим на форме тестирования надпись со свойствами Name=lblCaptionProperty, Caption=””, BorderStyle=1 и две кнопки cmdRead (“Прочитать Caption”), cmdWrite (“Записать Caption”) с процедурами:

Private Sub cmdRead_Click() ‘чтение свойства

lblCaptionProperty = ctlActX1.Caption ‘вывод значения нового свойства

End Sub

Private Sub cmdWrite_Click() ‘формирование значения свойства Caption

ctlActX1.Caption = Date ‘значение свойства=текущей дате

lblCaptionProperty.Caption = Date ‘вывод значения нового свойства

End Sub

Добавим значение по умолчаниюдля элемента Caption. Для этого в программном окне UserControl разместим три процедуры:

Private Sub UserControl_InitProperties() ‘выполняется после размещения

Caption=Extender.Name ’свойство=значению свойства Name элемента

End Sub

Процедура сохранения значения свойства Caption:

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

‘метод записи свойства “Caption”-имя, Caption-значение, Name-умолчание

PropBag.WriteProperty ”Caption”, Caption, Extender.Name

End Sub

Процедура чтения запомненного значения свойства Caption:

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

Caption = PropBag.ReadProperty(”Caption”, Extender.Name)

End Sub

Добавим новое событие для созданного элемента. В разделе глобальных объявлений (General)(Declarations) окна UserControl объявим переменнуюClickRed: Public Event ClickRed. Для этого элемента составим процедуру объявления события при отпускании кнопки мышки:

Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

RaiseEventClickRed‘объявление события

End Sub

Объявленное событие появится в списке событий для этого элемен­та. Введем в программном окне формы для тестирования процедуру обра­бот­ки события ClickRed элемента ctlActX1:

Private Sub ctlActX1_ClickRed() ‘заголовок процедуры

MsgBox (”Событие случилось”) ‘вывод сообщения

End Sub

Проверьте работу программ.