Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Конструирование элемента управления 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.





Дата публикования: 2014-12-28; Прочитано: 201 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...