Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Конструирование элемента управления 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 или воспользуйтесь командой File\New Project\ActiveX Control. VB подготовит «сцену» для нового элемента управления ActiveX, создав новый проект под названием Project1 с объектом UserControl1. UserControl – это аналог формы, на которой конструируется элемент управления.

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

• С помощью команды Add-Ins\Add-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 Угол базовой вершины звезды или угол между R max и осью х для эллипса
R max, R min Наружный и внутренний радиусы звезды или максимальный и минимальный радиусы эллипса
N Количество вершин звезды
Zvezda Рисуем звезду
Ellipse Рисуем эллипс
Shape Выбор фигуры (0–звезда, 1–эллипс, 2–круг)

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

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

• Последний шаг – это завершение (кнопка Finish), при этом оставьте отмеченным флажок View Summary Report, чтобы мастер показал итоговый отчет по завершении своей работы. Элемент управления FlexShape создан, теперь можно приступить к его испытанию. Элемент управления имеет собственную страницу свойств и может быть помещен на форму, но пока на экране нет ничего, кроме объекта UserControl. Появился новый значок на панели элементов управления с именем FlexShape. Значок с изображением матрицы и ручки по умолчанию дается всем элементам управления ActiveX. Для того чтобы поменять значок, можно либо нарисовать новую картинку (Bitmap -растр) в редакторе картинок, например, Imagedit.exe, либо загрузить с диска готовую картинку, например, по маршруту C:\Install\Visual Basic 6.0\COMMON\GRAPHICS\ 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, создав стандартный код интерфейса.

Перед добавлением собственного кода давайте посмотрим, что именно сделал мастер. Откройте окно кода объекта UserControl и просмотрите строки, сгенерированные мастером. Программа может показаться довольно длинной, но она не так сложна, как выглядит.

И наконец, еще раз вернемся к отображению различных событий на эквивалентные события объекта UserControl. Так, когда пользователь щелкает мышью на элементе управления ActiveX, Windows отправляет событие Click объекту UserControl. Разработчик элемента управления может обработать это событие в самом создаваемом элементе управления, но в этом случае приложение, которое использует элемент, не будет видеть событие Click. Но можно и передать событие (отобразить обратно) приложению-контейнеру (например, Form1). В этом случае разработчик приложения, использующий элемент управления, сможет сам запрограммировать это событие. Можно сделать и то, и другое, то есть сначала обработать событие в элементе управления, а затем передать его контейнеру, как это будет сделано в методе UserControl_Resize.

 

Private Sub UserControl_Resize()

m_x = UserControl.ScaleWidth \ 2

m_y = UserControl.ScaleHeight \ 2

If m_AutoSize Then

If UserControl.ScaleWidth <= UserControl.ScaleHeight Then

m_Rmax = UserControl.ScaleWidth \ 2 - 15 '15 твипов=1 пикселю

m_Rmin = UserControl.ScaleWidth \ 6 - 15

Else

m_Rmax = UserControl.ScaleHeight \ 2 - 15

m_Rmin = UserControl.ScaleHeight \ 6 - 15

End If

Else

m_Rmax = m_def_Rmax 'Возвращаем умалчиваемые значения

m_Rmin = m_def_Rmin

End If

UserControl.Refresh 'Обновить объект UserControl

RaiseEvent Resize 'Передаем событие контейнеру

End Sub

 

Передать событие приложению-контейнеру можно с помощью метода RaiseEvent. Так, событие Click объекта UserControl определено следующим образом.

 

Private Sub UserControl_Click()

RaiseEvent Click

End Sub

 

 

1. 'Default Property Values:

'Property Variables:

Это раздел объявлений. Здесь описываются константы, принятые по умолчанию, и закрытые переменные, характеризующие специальные свойства элемента управления. Элемент управления получает значение, введенное пользователем в окне свойств, и связывает их с закрытыми переменными. Имена констант и переменных основаны на именах свойств и их код можно легко редактировать.

1.1.Сделаем так, чтобы допустимые значения свойства отображались в раскрывающемся списке окна свойств, как в других элементах управления VB. Для этого следует добавить специальный код, который бы отображал только допустимые значения свойств Shape и FigureStyle и таким образом ограничивал выбор пользователя именно этими значениями. Если приложение использует переменную, которая может принимать только ограниченное число целочисленных значений, то можно использовать перечислимый тип, который объявляется с помощью структуры Enum … End Enum. Свойства Shape и FigureStyle как раз и будут являться такими переменными.

• Откройте окно кода проекта FlexProject и добавьте в секцию Declarations объявленные типы и описание переменных.

Это объявление сообщает Visual Basic, что переменная m_Shape типа Figure может принимать лишь значения от 0 до 2, а переменная m_FigureStyle типа FStyle – значения от 0 до 1 (перечислимые значения соответствуют числам, начинающимся с 0). Строки в объявлении типа являются синонимами соответствующих числовых значений, которые будут отображаться в окне свойств. Квадратные скобки в объявлении типа обязательны только для строк содержащих пробелы (или другие недопустимые символы).

• Теперь можно заменить тип у свойств Shape и FigureStyle с Byte на Figure и FStyle.

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

 

2. 'Event Declarations:

Это объявления событий. Эти события были определены в первых двух окнах мастера и отображены на объект UserControl. Если события не были отображены на объект UserControl, то только UserControl будет их видеть, и пользоваться ими смогут лишь разработчики элемента. В нашем элементе управления не требуется как-то по-особенному использовать события, поэтому предоставим эту возможность контейнеру-приложению (например, Form1), на котором будет использоваться созданный нами элемент управления ActiveX.

 

Чтобы ActiveX-компонент был виден проекту, его необходимо зарегистрировать в системе. Для этого следует создать осх -файл командой File\Make FlexProject.ocx, которая доступна только при активном окне UserControl.

Осх -файлы могут быть расположены в любом месте на диске, но система по умолчанию начинает искать их в папке Windows\ System32. При создании осх -файла VB автоматически регистрирует его в системном реестре. Следовательно, если Вы создали осх -файл в другом месте, то его не следует в дальнейшем перемещать.

Чтобы иметь возможность использовать элемент ActiveX в других компьютерах, следует применить утилиту regsvr32.exe (сервер регистрации), передавая ей имя осх -файла в качестве параметра. Например, можно использовать следующую команду: REGSVR32 FlexProject.ocx

Если осх -файл был сохранен в иной папке, отличной от папки Windows\ System32, то следует сначала перейти в эту папку, а затем выполнить следующую команду: С:\WINDOWS\SYSTEM32\REGSVR32 FlexProject.ocx

Чтобы удалить элемент управления из реестра Windows, также следует использовать утилиту Regsvr32, но с ключом /U. Например, удалим элемент управления FlexShape из реестра: С:\WINDOWS\SYSTEM32\REGSVR32 FlexProject.ocx/U

Таким же образом можно устанавливать в системе или удалять из нее библиотеки динамической компоновки. Например, REGSVR32 StarP.dll.





Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 460; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.062 сек.