Использование компонентов ActiveX

We use cookies. Read the Privacy and Cookie Policy

Использование компонентов ActiveX

Расположение компонентов ActiveX

Если вы хотите использовать компоненты ActiveX в своем проекте, их надо соответствующим образом к этому проекту добавить. Для этого нужно выполнить команду меню Project ? Components или нажать сочетание клавиш Ctrl+T. На экран будет выведено окно добавления ActiveX-компонента к проекту (см. рис. 3.11). В этом окне нужно установить флажки напротив компонентов, которые нужно использовать в проекте, и нажать кнопку OK. Добавленные к проекту компоненты будут отображены в палитре компонентов. На рис. 3.24 показано, как на палитре появился элемент MenuBar Control.

Рис. 3.24. Компонент MenuBar, помещенный на палитру.

Общие вопросы использования компонентов ActiveX

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

Для поставки и регистрации компонентов на пользовательском компьютере есть несколько способов. Самый простой способ заключается в том, что нужно поручить поставку и регистрацию самой среде eVB. Этот путь более всего подходит для отладки программ на эмуляторе. Чтобы среда скопировала файлы библиотек на пользовательскую машину и зарегистрировала их там, необходимо выполнить простую последовательность действий.

? Открыть окно настройки Project ? Project Properties.

? На вкладке General выбрать из списка Frequency значение Always, а в группе Component to Update установить флажок Project Components.

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

Вторым способом установить и зарегистрировать компоненты ActiveX является использование инструмента Control Manager. Для этого нужно выполнить другую последовательность действий.

? Выполнить команду меню Tools ? Remote Tools ? Control Manager. На экран будет выведено окно, внешний вид которого показан на рис. 3.25.

Рис. 3.25. Окно инструмента Control Manager.

? В левой части окна выбрать устройство, на которое будет осуществляться поставка приложения (на рисунке это Pocket PC 2002 Emulation). В правой части окна нужно найти библиотеку, которую необходимо установить и зарегистрировать (на рисунке выбрана библиотека Microsoft CE Grid Control). На имени библиотеки нужно щелкнуть правой кнопкой мыши и выполнить команду контекстного меню Install to Target. Библиотека будет установлена и зарегистрирована.

Наконец, установку и регистрацию библиотеки можно провести в «ручном» режиме. Для этого библиотеку необходимо скопировать на устройство (при помощи инструмента File Viewer или ActiveSync), а затем зарегистрировать при помощи программы RegSvrCE.exe. Эта программа обычно располагается в каталоге C: Windows СЕ Fileswce300Pocket PC 2002 argetarm или в каталоге C: Windows СЕ Fileswce300Pocket PC 2002 argetx86. В каталоге arm находится программа для работы на компьютере, а в каталоге х8б – для работы на эмуляторе. Эту программу также необходимо скопировать на целевое устройство. Библиотеки компонентов также находятся в двух подкаталогах arm и х8б каталога C: Program FileWindows СЕ Fileswce300Pocket PC 2002controls.

? После того, как программа RegSvrCE.exe и библиотека с компонентом, который необходимо установить, будут скопированы на целевое устройство, необходимо запустить программу RegSvrCE.exe. На экран будет выведено диалоговое окно, внешний вид которого показан на рис. 3.26.

Рис. 3.26. Окно программы RegSvrCE.exe.

? В этом окне необходимо ввести полный путь к библиотеке, включая имя файла, взвести флажок Register и нажать кнопку ОК.

? Если регистрация прошла успешно, на экран будет выведено соответствующее сообщение (рис. 3.27).

Рис. 3.27. Сообщение о регистрации компонента.

Данное сообщение не отображается поверх всех окон. Чтобы его увидеть, надо закрыть все приложения и вернуться в основное окно устройства.

Есть еще один способ регистрации компонентов на устройстве назначения. Компоненты могут регистрироваться при установке из поставочного пакета. Но этот процесс будет рассматриваться отдельно в следующих разделах.

Компонент MenuBar

Этот компонент предназначен для создания основного меню в программах для Pocket PC.

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

Свойство Enabled позволяет делать меню недоступным в ходе выполнения приложения. Для этого достаточно лишь установить для свойства значение false. Если для свойства NewButton задать значение true, то на полосе меню появится новая кнопка с именем New. Использование этих свойств обсуждается в следующем упражнении.

Упражнение 3.6

1. Создать новый проект с формой и сохранить его в папке EnPhrase с именем EnPhrase.ebp.

2. Установить для свойства формы Caption значение Учим английские фразы, а значение свойства Height нужно сделать равным 7050. Такая длинная форма нужна для того, чтобы посмотреть, как работает компонент VScrollBar.

3. Добавить к проекту компонент Frame. Значения его свойств приведены в таблице 3.7.

Таблица 3.7. Свойства компонента Frame

4. Добавить к проекту три компонента Label. Значения свойств этих компонентов приведены в табл. 3.8.

Таблица 3.8. Значения свойств компонентов Label1, Label2 и Label3

5. Добавить к проекту четыре компонента CommandButton. Значения свойств этих компонентов приведены в табл. 3.9.

Таблица 3.9. Значения свойств компонентов Command1, Command2, Command3 и Command4

6. Добавить к проекту компонент ListBox. Значения свойств этого компонента приведены в табл. 3.10.

Таблица 3.10. Значения свойств компонента ListBox

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

Рис. 3.28. Дизайн программы.

8. Чтобы фрейм, который имеет размер больший, чем размер экрана, можно было прокручивать при помощи вертикальной полосы прокрутки, нужно написать обработчик события Change для компонента VScroll. Код этого обработчика приведен в листинге 3.12. Листинг 3.12

Private Sub VScroll1_Change()

Frame1.Top = -200 – VScroll1.Value

End Sub

Теперь можно запустить проект в эмуляторе и посмотреть, как при помощи полосы вертикального скроллинга происходит прокрутка экрана. Граничные значения свойства Value равны тому значению, на которое надо будет сдвигать фрейм в окне, и поэтому обработчик события получился простым. Начальное значение -200 нужно для того, чтобы край фрейма не отображался на форме и не портил общий внешний вид приложения.

9. Чтобы создать в приложении основное меню, необходимо сначала подключить к приложению соответствующую библиотеку. Для этого надо выполнить команду Project ? Components и установить флажок напротив компонента Microsoft Pocket PC MenuBar Control. Следует также задать настройки для автоматической регистрации компонента на устройстве при помощи команды Project ? Project Properties|Update Components ? Always|Component to Updates ? Project Components.

10. После того как библиотека будет добавлена к проекту, соответствующий значок появится на палитре компонентов, и компонент MenuBar можно будет поместить на форму. Для свойства NewButton нужно установить значение false. Запуск проекта в таком состоянии не покажет никаких изменений. Чтобы меню отобразилось на форме, необходимо настроить и создать объекты, соответствующие тому, что должно отображаться на форме. Это делается программным путем в обработчике события Form_Load().

11. Прежде чем писать обработчик события, нужно разобраться с компонентом MenuBar. Сам компонент представляет собой коллекцию команд меню (объект MenuBarMenu) и кнопок (объекты MenuBarButton), которая создается и отображается на нижней панели экрана Pocket PC. Кроме свойств объекта MenuBar, которые отображены в инспекторе, есть еще свойство Collection, содержащее индексированную коллекцию меню и кнопок, и свойство ImageList, содержащее ссылку на коллекцию изображений, которые будут отображаться на кнопках. События ButtonClick, MenuClick и NewClick предназначены для обработки событий щелчка на кнопках, пунктах меню и кнопки New соответственно.

Добавление компонентов к коллекции производится при помощи методов AddButton и AddMenu объекта Collection. Доступ к элементам коллекции может производиться как по индексу, так и по символьному ключу, который задается для каждого элемента коллекции в момент его создания.

12. Добавить к коду приложения обработчик события Form_Load(). Код обработчика приведен в листинге 3.13. В него добавлены комментарии, которые можно не вводить в код приложения. Они потребуются лишь для удобства рассмотрения этого фрагмента.

Листинг 3.13

Rem 1

Dim mnuFile As MenuBarMenu

Rem 2

Dim mnuSep, mnuClrl, mnuClr2, mnuClr3 As MenuBarButtor

Rem 3

Set mnuFile = MenuBarl.Controls.АсШепиС'Файл", «mnuFile»)

Rem 4

mnuFile.Items.Add 1, «itFont», «Редактирование шрифта»

Rem 5

mnuFile.Items.Item(1). SubItems.Add 1, «itBold», «Полужирный»

mnuFile.Items.Item(1). SubItems.Add 2, «itItal», «Наклонный»

mnuFile.Items.Item(1). SubItems.Add 3, «itSize», «Размер»

Rem 6

mnuFile.Items.Item(1). SubItems.Item(3). SubItems.Add 1, «it8», «* 8»

mnuFile.Items.Item(1). SubItems.Item(3). SubItems.Add 2, «it10», «10»

mnuFile.Items.Item(1). SubItems.Item(3). SubItems.Add 3, «it12», «12»

Rem 7

mnuFile.Items.Add 2, "", ""

mnuFile.Items.Item(2). Style = mbrMenuSeparator

Rem 8

mnuFile.Items.Add 3, «itOpen», «Открыть»

Rem 9

mnuFile.Items.Add 5, "", ""

mnuFile.Items.Item(5). Style = mbrMenuSeparator

Rem 10

mnuFile.Items.Add 6, «itExit», «Завершить работу»

Rem 11

Set mnuSep = MenuBar1.Controls.AddButton(«mnuSep»)

mnuSep.Style = mbrSeparator

Rem 12

Set mnuClr1 = MenuBar1.Controls.AddButton("1")

mnuClr1.Style = mbrButtonGroup

mnuClr1.Caption = " 1»

Set mnuClr2 = MenuBar1.Controls.AddButton("2")

mnuClr2.Style = mbrButtonGroup

mnuClr2.Caption = " 2»

Set mnuClr3 = MenuBar1.Controls.AddButton("3")

mnuClr3.Style = mbrButtonGroup

mnuClr3.Caption = " 3»

Rem 13

Frame1.Top = -200

List1.Clear

End Sub

13. Теперь этот листинг надо детально рассмотреть. В качестве ссылок будут использоваться номера комментариев в тексте.

1) Объявляется переменная типа MenuBarMenu. Переменная одна, значит, на панели команд устройства будет один пункт меню.

2) Объявляются переменные типа MenuBarButton. Переменных этого типа четыре, значит, на панели команд устройства будет четыре кнопки.

3) Создается объект типа MenuBarMenu как элемент коллекции. При создании ему присваивается уникальный идентификатор mnuFile, задаем надпись, которая будет отображаться на кнопке меню, и этот объект связывается с переменной mnuFile.

4) Поскольку пункт меню может содержать в себе команды, коллекция команд содержится в свойстве Items. Она может быть пополнена при помощи вызова метода Add, что и происходит в этом фрагменте кода. Добавляются команды меню Файл и Редактирования шрифта. В качестве аргументов метода Add выступает индекс добавляемого элемента (1), уникальный ключ (itFont) и надпись, которая будет выведена в пункт меню – Редактированиешрифта. То, к какой именно команде меню относятся данные действия, определяется индексом, который указывается в скобках после свойства Item.

5) Каждая команда пункта меню может содержать вложенные меню. Для пополнения списка вложенных подменю у каждой команды существует свойство SubItems. У этого свойства есть метод Add. В данном фрагменте кода к пункту меню Редактирование шрифта добавляются три подменю – Полужирный, Наклонный и Размер.

6) К подменю Размер добавляются три вложенных подменю – 8, 10 и 12. Подменю 8 помечается звездочкой, чтобы указать текущее значение размера шрифта.

7) Следующая команда меню не имеет ни ключа, ни надписи, потому что во второй строке этого фрагмента кода для нее устанавливается стиль разделителя, и она просто будет отображать горизонтальную полосу в списке команд меню.

8) Добавляется команда Открыть.

9) Добавляется разделитель.

10) Добавляется команда Завершить работу.

11) Добавляется очередная кнопка. Для нее устанавливается стиль разделителя (mbrSeparator). Это значит, что на панели команд эта кнопка будет отображена в виде вертикальной черты.

12) Добавляются еще три кнопки. Для всех трех кнопок задается стиль mbrButtonGroup. Этот стиль объединит кнопки в зависимую группу, и пользователь сможет нажимать только одну кнопку из группы.

13) Работа с меню временно завершена. Теперь нужно установить положение фрейма на форме и очистить список.

14. Еще один фрагмент кода свяжет зависимые кнопки с процедурой установки фонового цвета в приложении. Этот код приведен в листинге 3.14.

Листинг 3.14

Private Sub MenuBar1_ButtonClick(ByVal Button As MenuBarLib.MenuBarButton)

Select Case Button.Key

Case "1"

Label1.BackColor = &H80000005

Label2.BackColor = &H80000005

Label3.BackColor = &H80000005

List1.BackColor = &H80000005

Case "2"

Label1.BackColor = &HC0FFFF

Label2.BackColor = &HC0FFFF

Label3.BackColor = &HC0FFFF

List1.BackColor = &HC0FFFF

Case "3"

Label1.BackColor = &HC0FFC0

Label2.BackColor = &HC0FFC0

Label3.BackColor = &HC0FFC0

List1.BackColor = &HC0FFC0

End Select

End Sub

В обработчик события ButtonClick передается копия объектной переменной Button, по ключу которой (Button.Key) можно понять, на какой кнопке был произведен щелчок. Далее в операторе выбора Select выбирается действие для соответствующей кнопки. В приведенном коде устанавливается фоновый цвет для компонентов, содержащих текст.

15. Еще один фрагмент кода, завершающий работу приложения при выборе команды меню Завершить работу, приведен в листинге 3.15.

Листинг 3.15

Private Sub MenuBar1_MenuClick(ByVal Menu As MenuBarLib.MenuBarMenu)

Select Case Menu.Key

Case «itExit»

App.End

End Select

End Sub

В этом случае на одно событие MenuClick устанавливается оператор выбора Select (к концу работы над проектом он будет достаточно объемным) и по ключу производится выбор выполняемой команды.

16. Нужно снова запустить приложение и проверить работу созданного меню. Нажатие на кнопки должно приводить к изменению цвета в соответствующих компонентах, выбор пункта меню Завершить работу должен приводить к завершению работы приложения. Результат должен выглядеть так, как показано на рис. 3.29.

Рис. 3.29. Созданное меню.

17. Теперь нужно добавить к проекту еще один компонент ActiveX с наименованием Microsoft CE Image List Control. Его следует разместить на форме. Как и компонент MenuBar, компонент ImageList надо инициализировать и использовать программно, так как визуальных настроек у него нет.

18. Прежде чем настраивать ImageList, надо подготовить для него изображения. Для этого нужно в любом графическом редакторе создать три рисунка. Это должны быть рисунки размером 16x16, 256 цветов, с именами white.bmp, yellow.bmp и green.bmp. В центре первого рисунка будет незакрашенный квадрат 14x14 пикселов, в центре второго – квадрат, закрашенный желтым цветом. Третий рисунок должен содержать квадрат с зеленой заливкой.

19. Эти рисунки нужно поместить в каталог проекта и добавить их в проект командой Project ? Add File. В окне, которое будет выведено на экран, нужно выбрать тип файлов All Files (*.*), взвести флажок Add As Related Document, выбрать нужный файл и нажать кнопку ОК. Эту последовательность действий нужно выполнить для каждого рисунка. Добавление файлов к проекту позволит среде автоматически копировать их на устройство и включать в состав поставочного комплекта. После того как файлы будут добавлены к проекту, окно структуры проекта должно выглядеть, как на рис. 3.30.

Рис. 3.30. Окно структуры проекта с файлами изображений.

20. Теперь можно добавить изображения к компоненту ImageList. Для этого в начало метода Form_Load() нужно добавить код, приведенный в листинге 3.16. Листинг 3.16

Dim imLst As ImageList

Set imLst = ImageList1

imLst.Add «WindowsStart Menuwhite.bmp»

imLst.Add «WindowsStart Menuyellow.bmp»

imLst.Add «WindowsStart Menugreen.bmp»

MenuBar1.ImageList = imLst.hImageList

В этом коде создается объектная переменная типа ImageList. Она связывается с компонентом ImageList1, после чего к коллекции рисунков добавляются созданные ранее изображения. Затем остается лишь связать коллекцию рисунков с компонентом MenuBar1. Должен быть указан полный путь к добавляемому рисунку от корневого каталога устройства. Поскольку для проекта в настройках его свойств был задан путь WindowsStart Menu, то для изображений нужно добавить этот путь в виде префикса к имени файла.

21. В тех фрагментах кода, где устанавливалось свойство Caption для кнопок, нужно закомментировать строки установки Caption и вместо них ввести команды присвоения изображений. Поскольку сам ImageList с компонентом MenuBar уже связывался в методе Form_Load, то связывание изображений с кнопками производится простым указанием индекса изображения в коллекции ImageList, как показано в листинге 3.17.

Листинг 3.17

Rem mnuClr1.Caption = «1»

mnuClr1.Image = 1

Rem mnuClr2.Caption = «2»

mnuClr2.Image = 2

Rem mnuClr3.Caption = «3»

mnuClr3.Image = 3

22. Теперь можно запустить проект и удостовериться, что изображения выведены на поверхность кнопок.

23. Также программа должна взять текстовый файл, считать из него фразу на русском языке и вывести в верхнее текстовое поле, считать соответствующую ей английскую фразу и вывести ее в нижнее текстовое поле, находящееся на заднем плане, а затем в случайном порядке считать английские слова в количестве в три раза большем, чем надо для составления фразы, и заполнить ими список ListBox.

24. Прежде всего нужно создать текстовый файл. Достаточно в Блокноте открыть текстовый файл, назвать его phrase.txt и сохранить в каталоге проекта. Содержимое файла приведено в листинге 3.18.

Листинг 3.18

Kak dela

Vsego horoshego

Do vstrechi

how are you

good luck

see you later

25. Этот файл нужно добавить к проекту, как это было сделано с файлами рисунков. Русские фразы написаны транслитерацией, поскольку эмулятор не русифицирован. В случае запуска данной программы на корректно русифицированном Pocket PC 2003 русские фразы можно писать кириллицей.

26. Чтобы загрузить файл, нам понадобятся еще две ActiveX библиотеки – File System и Common Dialog. Их нужно добавить в проект, а затем разместить на форме. Библиотека File System при добавлении к проекту создает компоненты File и FileSystem. Компонент FileSystem дает возможность осуществлять манипуляции с файлами и каталогами, такие как создание, удаление, переименование, перемещение, изменение атрибутов. В нашем приложении этот компонент не потребуется, на форме надо разместить только компонент File, который позволяет открыть файл, читать из него и записывать информацию в файл.

27. После размещения этих компонентов на форме нужно добавить объявления переменных в начало модуля, как это показано в листинге 3.19.

Листинг 3.19

Option Explicit

Dim intText, intInt, intStep, intCount As Integer

Dim varText, varEnText

Dim varStrng As String

Rem Объявляем переменную и связываем ее с объектом File

Dim flFile As File

Set flFile = File1

Rem Объявляем переменную и связываем ее с объектом диалога

Dim fdOpen As CommonDialog

Set fdOpen = CommonDialog1

28. Теперь необходимо создать обработчик события щелчка на пункте меню Открыть. Для этого в уже имеющийся обработчик события Private Sub MenuBar1_ MenuClick нужно добавить еще одну секцию Case. Код будет выглядеть так, как показано в листинге 3.20. Листинг 3.20

Private Sub MenuBar1_MenuClick(ByVal Menu As MenuBarLib.MenuBarMenu)

Select Case Menu.Key

Case «itExit»

App.End

Case «itOpen»

Rem 1

fdOpen.ShowOpen

Rem 2

If fdOpen.FileName <> "" Then

Rem 3

flFile.Open fdOpen.FileName, fsModeInput, 1

Rem 4

intText = 0

While Not flFile.EOF

intText = intText + 1

flFile.LineInputString

Wend

Rem 5

flFile.Close

flFile.Open fdOpen.FileName, fsModeInput, 1

Rem 6

For intCount = 1 To intText

varText = flFile.LineInputString

If intCount > intText/2 Then varEnText=varEnText +" "+varText

Next

intStep = 1

flFile.Close

Rem 7

flFile.Open fdOpen.FileName, fsModeInput, 1

For intCount = 1 To intText

varText = flFile.LineInputString

If intCount = intStep Then Label1.Caption = varText

If intCount = intStep+intText/2 Then Label2.Caption=varText

Next

Rem 8

intStep = 2

flFile.Close

Dim strAr

Dim strSt As String

Данный текст является ознакомительным фрагментом.