Учебные материалы по математике | Способы объявления событий классов | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Способы объявления событий классов


Раннее связывание осуществляется при объявлении объектной переменной с явным указыванием имени класса. Например,

Dim Obj1 As New Form1

Dim Obj2 As New Class1

Dim ObjWord As New Word. Application

Dim ObjExcel As New Excel. Application

Dim ObjAccess As New Access. Application

Раннее связывание происходит на этапе компиляции и выполня­ется быстрее. При раннем связывании перед написанием кода необхо­димо загрузить в память библиотеку с классом, используя команду ProjectReferences, окно References и список Available References. После чего следует приступать к созданию объектной переменной (уже определенного класса) с ключевым словом New.

Если же при объявлении объектной переменной используется универсальный тип Object, Variant, Control, то VB осуществляет позднее связывание переменной с объектом. Например,

 Dim mObject As Object, Obj As Control

For Each Obj In Me. Controls

If TypeName(Obj) = "TextBox" Then Obj. BackColor = 0

Next

Set mObject=CreateObject(“Word. Application”) ‘Установить связь

………………………………………………………

Set mObject=Nothing ‘Разорвать связь объекта с приложением Word

Set mObject=CreateObject(“Excel. Application”) ‘Установить связь

………………………………………………………

Set mObject=Nothing ‘Разорвать связь объекта с приложением Excel

Позднее связывание оправдано тогда, когда невозможно заранее определить, какие типы объектов будут использоваться при выпол­нении программы, что требует дополнительных затрат времени на анализ допустимых объектов. При первом обращении к свойствам и методам объекта происходит событие Initialize – создание объекта, а в строке Set mObject=Nothing наступает событие Terminate – уничто­жение объекта и освобождение памяти.

К недостаткам раннего связывания можно отнести привязан­ность создаваемого Вами приложения к конкретной версии библио­теки объектов. Выход в свет новой версии продукта, объектную модель которого Вы используете посредством раннего связывания, приведет к необходимости обновления Вашего приложения. К досто­инству раннего связывания можно отнести способность отображать список свойств и методов объекта после ввода точки при написании кода. Обычно раннее связывание используется на стадии отладки приложения. Завершающая стадия разработки приложения осуществ­ляется обычно на основе позднего связывания, не зависящего от новых версий используемых в проекте объектных моделей.

7. Способы объявления событий классов. Примеры.

Каждый класс кроме свойств и методов имеет набор собственных событий. События – это реакция объекта на действие системы, поль­зователя и других приложений. События, определяемые пользовате­лем, могут объявляться как внутри модуля класса (в области GD окна Code класса) с помощью команды FileNewEvent или кнопки  окна Class Builder, так и внутри модуля формы одним и тем же оператором Event. Параметры, передаваемые процедуре события, должны быть указаны в той же строке объявления события. Например,

 Public Event WWW()

Public Event XXX(ByVal A As Long, ByVal B As Long)

 Для генерации (выполнения) события предназначен оператор RaiseEvent, которому в качестве параметра передается имя события. Например,

 Public Sub Text1_Change()

RaiseEvent WWW ‘Реализация события WWW

End Sub

Public Sub Command1_Click()

RaiseEvent XXX(500,300) ‘Реализация события XXX

End Sub

 Контейнер (модуль класса или формы), в котором используется объект, должен содержать процедуры-события.

Пример 59. Объявить событие в модуле класса, а запрограммировать его в модуле формы.

  Пусть событие (назовем его MTS) имеет два параметра. Первый – числовой, второй – логический. Событие будет реализовываться в методе Long1. Выполните следующие действия.

· Создайте новый проект с шаблоном Standard EXE.

· С помощью команды ProjectAdd Class Module добавьте модуль класса с именем Class1 в проект, используя шаблон Class Module на закладке New.

· Поместите в него следующий код.

Public Event MTS(ByVal Percent As Single, ByRef Cancel As Boolean)

Public Sub Long1(ByVal f As Single, c As Boolean)

RaiseEvent MTS(f, c) ‘Вызов события MTS с двумя параметрами

End Sub 

· Теперь добавьте в область GD окна Code модуля формы следующий код: 

Private WithEvents mW As Class1, nCancel As Boolean, r As Single

‘Ключевое слово WithEvents означает, что объект mW содержит события

Private Sub Command1_Click()

nCancel = False

r = Rnd

Set mW = New Class1 ‘Создание нового объекта на основе класса

Call mW. Long1(r, nCancel) ‘Обращение к методу Long1

Text2 = nCancel ‘Выводим значение, возвращаемое из события

Set mW = Nothing

End Sub

Private Sub Form_Load()

Text1 = Format(r, "0 %")

Text2 = ""

End Sub

Private Sub mW_MTS(ByVal Percent As Single, _

Cancel As Boolean)

m% = CInt(100 * Percent)

Text1 = m & "%"

If m >= 50 Then Cancel = True

End Sub

8. Создание элемента управления ActiveX в Visual Basic. Отображаемые и пользовательские свойств и методы ActiveX-компонент. Передача события приложению–контейнеру. Регистрация компонент.

Конструирование элемента управления ActiveX

Возможность создания независимых ActiveX-компонент подобно элементам управления, представленным на панели General ToolBox, и последующее их использование в любых разрабатываемых приложениях привлекает всех без исключения разработчиков. С помощью VB можно легко создать элемент управления ActiveX. Кроме того, созданный нами ActiveX-компонент можно будет использовать на Web-страницах Internet – одной из самых быстрорастущих информационных систем.

Как известно, стандартное приложение содержит главную форму и несколько вспомогательных форм. Вспомогательные формы обычно поддерживают главную, получают данные, вводимые пользователем (например, InputBox), и обрабатываются кодом своей или главной формы. Поэтому по аналогии можно предположить, что элемент управления ActiveX является главной формой, а страницы его свойств – вспомогательными формами.

Конструирование элемента управления ActiveX похоже на конструирование формы и выполняется разработчиком (конструктором) элемента. При этом элемент располагается на объекте, называемом UserControl, являющемся для него формой. Объект UserControl имеет те же методы, что и стандартная форма, например, Print, Line и др.

Как известно, форма приложения является окном, которое находится на рабочем столе при выполнении приложения. Элемент управления ActiveX – это то же окно, но он может существовать только на форме.

Как известно, приложение взаимодействует с пользователем через свой интерфейс. Разработчик приложения (программист, который использует элемент) решает, как оно будет вести диалог с пользователем, и пользователю приложения приходится следовать этим правилам. Подобное же происходит и с элементом управления ActiveX. Он предоставляет строго определенный интерфейс из свойств, событий и методов. При этом разработчик приложения получает доступ к элементу только через его интерфейс и также как пользователь приложения не может модифицировать исходный код элемента ActiveX.

Код элемента управления ActiveX работает в режиме конструирования и выполнения. Когда разработчик приложения помещает элемент управления на форму, то запускается программный код элемента ActiveX. Когда изменяются его свойства с помощью окна свойств, то с ним также что-то происходит на форме. Когда же разработчик запускает приложение, то элемент (уже объект формы) также выполняет какие-то действия. Но при этом в зависимости от режима работы элемент определяет как он должен себя вести.

Например рассмотрим элемент TextBox. Если в режиме конструирования через окно свойств установить присваиванием Scrollbar= Vertical, то к объекту на форме автоматически будет добавлена вертикальная полоса прокрутки. Причем она будет оставаться в поле в обоих режимах работы. Как Вы уже должны заметить, свойство Text имеет по умолчанию значение Text1. Запустив приложение и введя некоторый текст в поле объекта, Вы измените его значение. Однако если вновь вернуться в режим конструирования, то это свойство вновь примет значение Text1. То есть изменения, произведенные в окне свойств элемента, участвуют в обоих режимах.

При конструировании же элемента управления ActiveX разработчику приходится переключаться между функциями разработчика элемента и функциями разработчика приложения. При этом разработчик элемента определяет, какие свойства, события и методы должны быть доступны в каждом из этих режимов. Например, для разработчика элемента могут быть доступны свойства как для чтения, так и для изменения, а для разработчика приложения – только для чтения. Также разработчик элемента может быть определить дополнительные методы и события, недоступные для разработчика приложения.

Разработчик элемента управления ActiveX конструирует его видимый интерфейс (размещением каких-либо элементов) на объекте UserControl и может манипулировать им через свойства. Этот процесс похож на создание интерфейса у обычного приложения. Конструирование же невидимого интерфейса (свойств, методов и событий) во многом похоже на конструирование модуля класса.

Как известно, любой элемент ActiveX должен предоставлять определенные свойства, которые будут автоматически отображаться в окне свойств. Также разработчики приложений ожидают увидеть у элемента управления не только уникальные свойства, но и стандартные свойства, присущие всем стандартным элементам (такие как цвет фона, шрифт текста, видимость и т. д.). Разрабатываемые же методы должны обеспечивать все функциональные возможности элемента управления и быть доступными из кода приложения. И наконец, нужно предусмотреть события, необходимые для реакции на внешние воздействия.

И так, прежде чем начать кодировать элемент управления, Вы должны сформулировать для себя, что будет делать элемент и как он будет использоваться разработчиками приложений.

Теперь начнем наше конструирование элемента ActiveX. Создадим элемент управления FlexShape (улучшенный элемент управления Shape). Он будет реализовать некоторые возможности элемента управления Shape плюс отображение звезды и эллипса.

Надо сразу сказать, что большая часть функциональных возможностей для создаваемого (конструируемого) элемента управления уже разработана и нам лишь остается воспользоваться способом заимствования их из других элементов с помощью мастера VB, который будет генерировать код стандартных частей для создаваемого элемента управления, а разработчику только останется написать код для уникальных (дополнительных) свойств, методов и событий.

• Откройте новый проект с шаблоном ActiveX Control или воспользуйтесь командой FileNew ProjectActiveX Control. VB подготовит «сцену» для нового элемента управления ActiveX, создав новый проект под названием Project1 с объектом UserControl1. UserControl – это аналог формы, на которой конструируется элемент управления.

• Используя свойства Name, переименуйте проект и элемент управления. Эти два имени будут использованы для регистрации данного элемента в системе, поэтому они должны быть содержательными. Имя Project1 измените на FlexProject, а имя UserControl1 – на FlexShape (рис.123). Теперь запустим мастер, чтобы он сгенерировал за нас как можно больше стандартного кода для создаваемого элемента управления.

• С помощью команды Add-InsAdd-In Manager … загрузите мастер ActiveX Ctrl Interface Wisard (можно двойным щелчком) и выполните одноименную команду из меню Add-Ins. Проследуем за мастером по шагам весь путь по созданию кода.

• На первом шаге мастер пригласит Вас к началу процесса конструирования интерфейса. Его появление можно отключить флажком «Skip this screen in future». Однако сейчас нажмите кнопку Next.

• На втором шаге мастер предложит выбрать стандартные части элемента управления ActiveX. Слева – список стандартных свойств, методов и событий, которые можно включить в конструируемый элемент. Справа – список уже выбранных свойств, методов и событий интерфейса, которые создаваемый элемент управления будет поддерживать. Здесь можно любой из элементов списка убрать или добавить. Добавьте в список справа следующие свойства, события и методы, коротые характерны для большинства элементов управления: Click, Cls, DblClick, Enabled, ForeColor, BackColor, Hide, Hdc, Hwnd, MouseMove, MouseUp, MouseDown, OLEDrag, OLEDragOver, OLEDragDrop, OLEDropMode, OLEStartDrag, Paint, Picture, Resize, ScaleHeight, ScaleWidth, Show, Refresh.

• На третьем шаге происходит создание специальных частей интерфейса (рис.124), которые являются уникальными для данного элемента управления. Create Custom Interface Members (Создание пользовательских членов интерфейса) мастер предоставляет возможность программисту работать с пользовательскими событиями, методами и свойствами.

Для этого достаточно нажать кнопку New, чтобы отобразить диалог Add Custom Member и ввести название свойства, метода или события. Добавьте следующие свойства: x, y, Rmax, Rmin, AngleTopBase, N, Shape, FigureStyle, AutoSize и методы Zvezda, Ellipse. Кнопками Edit и Delete можно отредактировать или убрать компонент интерфейса.

• На четвертом шаге происходит установка соответствия (отображения) между компонентами интерфейса создаваемого элемента и стандартными элементами VB (рис.)

Все те компоненты, которые Вы не желаете обрабатывать собственным кодом, следует сделать соответствующими компонентам объекта UserControl. Такими компонентами являются все, кроме x, y, Rmax, Rmin, AngleTopBase, N, Shape, FigureStyle, AutoSize, Zvezda, Ellipse. Так, например, для события Click нет необходимости определять реакцию на щелчок внутри создаваемого элемента, а нужно передать это событие главному приложению, чтобы оно обработалось им стандартно. (((Четвертый шаг Set Mapping (Установить соответствие) мастера ActiveX Control Interface Wizard (рис. 14.9) связывает члены элемента управления, выбранные на втором и третьем шагах, с событиями, свойствами и методами объектов элемента управления ActiveX. Диалоговое окно мастера содержит список всех свойств, методов и событий, которые определены как часть общего интерфейса элемента управления. Для связывания члена, выбранного из списка Public Name (Наименование), необходимо из раскрывающегося списка Control (Объект элемента управления) группы Maps to (Отобразить на) выбрать объект элемента управления и из списка Member (Член) этой же группы соответствующее событие, свойство или метод.)))

• Для отображения компонентов создаваемого интерфейса необходимо попеременно их выбирать из списка Public Name и связывать через список Control с элементом UserControl. Мастер сам подберет компонент интерфейса объекту UserControl с тем же именем в отображаемом ниже списке Member.

• ((((На пятом шаге Set Attributes (Назначить атрибуты) (рис. 14.10) мастер предлагает определить атрибуты тех членов нового элемента управления ActiveX, которые не были связаны с событиями, методами и свойствами на предыдущем шаге.))) На пятом шаге происходит установка типов свойств, значений по умолчанию и атрибутов для новых компонент (рис.126). По умолчанию мастер объявляет все новые свойства как Variant. Здесь же можно добавить описание (поле Description) к каждому компоненту интерфейса. Каждое описание отобразится внизу окна свойств, когда пользователь выберет свойство. Стандартные элементы уже имеют описания, а для пользовательских свойств их необходимо составить.

• Задайте для свойств x, y, Rmax, Rmin, AngleTopBase тип Integer, для свойств FigureStyle, N, Shape – тип Byte, для свойства AutoSize – тип Boolean, а для методов Zvezda, Ellipse – тип Variant. Как будет показано ниже, можно назначить некоторым свойствам пользовательский тип данных.

• В поле Default Value можно установить значение свойств по умолчанию. Установите для новых свойств следующие значения: x=1000, y=1000, Shape=0, Rmax=300, Rmin=100, AngleTopBase=90, FigureStyle=1, N=5, AutoSize=False. Таблица 35

Компонента

Описание

X и Y

X, Y – центр фигур

AngleTopBase

Угол базовой вершины звезды или угол между Rmax и осью х для эллипса

Rmax, Rmin

Наружный и внутренний радиусы звезды или максимальный и минимальный радиусы эллипса

N

Количество вершин звезды

Zvezda

Рисуем звезду

Ellipse

Рисуем эллипс

Shape

Выбор фигуры (0–звезда, 1–эллипс, 2–круг)

• В поле Arguments можно указать параметры для методов и событий. Наш проект не будет иметь собственных событий и аргументов у методов (как в предыдущем параграфе).

• Два списка Run Time и Design Time позволяют определить свойства для режима выполнения и режима конструирования.

• Последний шаг – это завершение (кнопка Finish), при этом оставьте отмеченным флажок View Summary Report, чтобы мастер показал итоговый отчет по завершении своей работы. Элемент управления FlexShape создан, теперь можно приступить к его испытанию. Элемент управления имеет собственную страницу свойств и может быть помещен на форму, но пока на экране нет ничего, кроме объекта UserControl. Появился новый значок на панели элементов управления с именем FlexShape. Значок с изображением матрицы и ручки по умолчанию дается всем элементам управления ActiveX. Для того чтобы поменять значок, можно либо нарисовать новую картинку (Bitmap-растр) в редакторе картинок, например, Imagedit. exe, либо загрузить с диска готовую картинку, например, по маршруту C:InstallVisual Basic 6.0COMMONGRAPHICS BITMAPS, и связать ее со свойством ToolBoxBitmap объекта UserControl.

Удостоверимся, что элемент управления работает. Значок элемента ActiveX заблокирован, поскольку сам элемент все еще конструируется.

Следующие шаги являются обязательными всякий раз, когда конструируется элемент управления ActiveX.

• Выберите команду Add Project из меню File, чтобы открыть новое окно проекта.

• Выберите шаблон проекта Standard EXE. Появится новая форма с именем Form1. Измените имя формы, например, на FlexForm, а имя нового проекта – на MyProject.

• Закройте окно конструирования UserControl и окно с кодом элемента управления, если они были открыты.

• При активной форме FlexForm значок на панели элементов управления General ToolBox становится также активным. С этого момента можно использовать элемент управления FlexShape, как любой другой элемент управления VB.

• Поместите объект FlexShape на форму FlexForm. Он автоматически получит имя FlexShape1.

• Нажмите на панели инструментов Standard кнопку Save Project Group () и сохраните компоненты на диске в виде файлов FlexShape. ctl, FlexProject. vbp, FlexForm1.frm, MyProject. vbp.

Итак, VB сделал за нас довольно много работы. Он сгенерировал работающий элемент управления ActiveX, создав стандартный код интерфейса.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020