Чтение онлайн

на главную

Жанры

Программирование для карманных компьютеров

Волков Владимир

Шрифт:

СОВЕТ. Три кита, на которых стоит программирование интерфейса пользователя в eVB, – методы, свойства и события. Если описание свойств и методов довольно подробно дано в справочной системе, то события (особенно их последовательность) там описаны не так подробно. Я советую вам использовать тот же подход, который мы использовали в этом упражнении, для исследования событий других компонентов, порядка и особенности их генерации при работе компонентов в том или ином режиме, и то, какие параметры передаются в событие и какие из него возвращаются обратно приложению или операционной системе.

17. Чтобы увидеть, как параметр возвращается из события в приложение, следует изменить код события QueryUnload, введя код из листинга 3.11. Листинг 3.11

Private Sub Form_QueryUnload(cancel, unloadmode)

Form1.List1.AddItem «Form2 QueryUnload»

cancel = 0

End Sub

Private Sub Form_Unload(cancel)

Form1.List1.AddItem «Form2 Unload»

End Sub

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

ВНИМАНИЕ! Несмотря на то что событие Unload генерируется при установлении параметра cancel = 0, сама форма не выгружается из памяти.

Другие встроенные компоненты

На рис. 3.23 изображена палитра встроенных компонентов eVB. Каждый из компонентов на рисунке помечен выноской. Краткое описание каждого из компонентов в соответствии с номером на выноске приведено в соответствующем списке.

Рис. 3.23. Набор встроенных компонентов eVB.

1. Shape. Компонент предназначен для вывода на форму закрашенной плоской

фигуры (круг, овал, прямоугольник, квадрат, квадрат или прямоугольник со сглаженными углами). Выбор типа фигуры осуществляется установкой свойства Shape. Благодаря наличию методов Move, Refresh и ZOrder возможно манипулирование объектом Shape во время выполнения программы. Объект Shape не может служить контейнером для других объектов. События у объекта Shape отсутствуют.

2. Line. Компонент выводит на форму отрезок прямой заданного цвета, толщины и длины. Отрезок задается координатами двух точек. Метод Move у объекта Line отсутствует, но перемещение отрезка во время выполнения возможно при помощи изменения его координат.

3. Label. Компонент обеспечивает отображение на форме многострочного текста. Сам текст задается установкой свойства Caption и может иметь в длину до 1024 символов. На отображение текста влияют свойства Autosize (компонент изменяет свой размер согласно объему введенного текста) и WordWrap (введенный текст, достигнув горизонтальной границы компонента, переносится на следующую строку по границе слова). Также возможна установка параметров шрифта при помощи изменения свойства Font и параметров выравнивания установкой значения свойства Alignment. Компонент Label реагирует на событие Change, которое возникает при программном изменении свойства Caption. Для управления расположением компонента на форме во время выполнения можно использовать методы Move, Refresh и ZOrder.

4. TextBox. Компонент обеспечивает вывод на форму однострочного или многострочного редактируемого текста. Текст присутствует в компоненте в качестве значения свойства Text. Свойство MultiLine позволяет переключаться между однострочным и многострочным режимом. В однострочном режиме длина строки ограничена 2048 символами, в многострочном режиме общий объем текста может достигать 32 Кбайт. Возможно задание параметров шрифта (свойство Font) и выравнивания текста (свойство Alignment). Если компонент находится в многострочном режиме, то наличие вертикальной и горизонтальной полос прокрутки можно задать установкой свойства ScrollBars. В компоненте Text возможно выделение фрагментов при помощи сочетания клавиш виртуальной клавиатуры или стилуса, а также вырезание, копирование, удаление и вставка из буфера. При осуществлении этих операций программным путем хорошим подспорьем в работе будут свойства SelLength (количество выделенных символов), SelStart (индекс символа, с которого начато выделение) и SelText (строка, содержащая выделенный текст). Естественно, основным предназначением этого компонента является ввод текста с виртуальной клавиатуры. Поэтому компонент реагирует на такие события клавиатуры, как нажатие и отпускание клавиш (KeyDown, KeyPress и KeyUp). К сожалению, эти три события в eVB не используются по отдельности. Причины этого досадного недоразумения излагались в комментариях к упражнению 3.5.

5. Frame. Компонент-контейнер, который позволяет объединять другие видимые компоненты в функциональные группы. Событий не имеет. Свойства компонента в особых комментариях не нуждаются. Чаще всего в компонент Frame помещают несколько компонентов OptionButton, которые при этом автоматически объединяются в группу.

6. CommandButton. Командная кнопка, главное назначение которой – генерировать событие щелчка на кнопке. Это событие с именем Click является основным для компонента CommandButton.

7. CheckBox. Компонент, обеспечивающий индикацию или выбор состояния одного из нескольких независимых параметров. Основным свойством компонента является свойство Value. Значение 0 указывает, что компонент не выбран, значение 1 указывает, что пользователь взвел флажок, а значение 2 свидетельствует о том, что компонент не активен. Основным событием компонента CheckBox является событие Click, которое возникает при изменении значения свойства Value, вне зависимости от того, программным путем меняется это значение или в результате нажатия стилусом.

8. OptionButton. Компонент, обеспечивающий выбор только одного из нескольких зависимых параметров, объединенных в группу. Если не считать функционального назначения, то свойства компонента OptionButton практически не отличаются от свойств CheckBox. Еще одно важное отличие состоит в том, что любой контейнер, в который помещаются несколько компонентов OptionButton, объединяет их в зависимую группу.

9. ComboBox. Выпадающий список, обеспечивающий выбор одной из строк списка, или ввод нужного значения непосредственно в строку редактирования. Основным свойством компонента является набор значений. Этот набор можно ввести в режиме дизайна, нажав кнопку, которая появляется в поле значений при выборе свойства Custom. В окне редактора свойств для каждого элемента списка можно ввести строковое значение (ListData) или целочисленное значение (ItemData). Список выводится только во время выполнения программы, причем в списке отображается только набор строк ListData, а набор значений ItemData служит для связи списка с другими объектами. Свойство Style позволяет разрешить или запретить непосредственный ввод значений в строку редактирования. Редактирование текста в строке производится при помощи тех же свойств (SelLength, SelStart, SelText), что и в компоненте TextBox. Доступ к элементам списка в момент выполнения программы осуществляется при помощи дополнительных свойств. Свойство List возвращает строку, соответствующую указанному индексу. Свойство ListCount возвращает количество элементов в списке. Свойство ListIndex возвращает индекс выбранного элемента списка. Свойство NewIndex возвращает индекс последнего добавленного элемента списка, а свойство TopIndex возвращает индекс первого видимого элемента в прокручиваемом списке. При последовательном изменении значения этого свойства можно программным путем осуществлять прокрутку списка. Наконец, свойство Sorted при установке значения true вынуждает компонент отображать элементы списка отсортированными в алфавитном порядке. Для манипуляций элементами списка во время выполнения программы необходимо использовать методы AddItem и RemoveItem, которые добавляют и удаляют элементы списка с указанным индексом. Метод Clear позволяет очистить список.

События компонента ComboBox не радуют нас разнообразием. Событие Change наступает при программном или пользовательском редактировании строки ввода. Событие Click наступает при выборе элемента списка. При прокрутке списка наступает событие Scroll.

10. ListBox. Поскольку компонент ComboBox является комбинацией компонентов TextBox и ListBox, то все, относящееся к нему, будет верно и для компонента ListBox. Компонент ListBox отличается только реализацией. Он постоянно присутствует на форме в виде прямоугольной области, в которой размещен прокручиваемый список. Небольшое отличие состоит в том, что в компоненте ListBox возможно осуществлять выбор сразу нескольких элементов списка. Для этого необходимо установить свойству MultiSelect значение 1 для последовательного выделения элементов или значение 2 для произвольного выделения нескольких элементов списка одновременно.

11. HScrollBar. Компонент реализует горизонтальную полосу прокрутки. Используется для установки или для индикации значения, которое может плавно изменяться в широких пределах. Свойство Max позволяет задавать максимальное значение, которое может принимать свойство Value. Оно соответствует крайнему правому положению движка компонента. Свойство Min устанавливает минимальное значение, которое может принимать свойство Value. Свойство Value хранит значение, соответствующее текущему положению движка полосы прокрутки. Свойство LargeChange содержит значение смещения, которое соответствует большому шагу движка, при щелчке стилусом на полосе прокрутки. Свойство SmallChange соответствует малому шагу движка при нажатии стилусом на кнопке со стрелкой на полосе прокрутки. Кроме этого, для передачи значений от компонента Scrollbar в настраиваемое свойство используют события Scroll (происходит при перемещении движка) и Change (происходит при перемещении движка или изменении свойства Value программным путем).

12. VScrollBar. Компонент реализует вертикальную полосу прокрутки. В остальном компонент соответствует HScrollBar.

13. Timer. Единственным назначением этого компонента является генерация события Timer с интервалом, который устанавливается свойством Interval. Свойство Interval может быть установлено в пределах от 1 до 65 535. Когда надо приостановить работу таймера, следует установить его свойство Enabled в false.

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

Вся эта функциональность, безусловно, есть. Но реализована она в виде компонентов ActiveX. Компоненты ActiveX вынесены в отдельную группу, поскольку в самой среде eVB создать их невозможно. Visual Basic не умеет полноценно работать с COM-технологиями, но зато умеет эффективно использовать плоды их работы, то есть созданные ранее компоненты ActiveX.

Использование компонентов 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 СЕ Files\wce300\Pocket PC 2002\target\arm или в каталоге C: \Windows СЕ Files\wce300\Pocket PC 2002\target\x86. В каталоге arm находится программа для работы на компьютере, а в каталоге х8б – для работы на эмуляторе. Эту программу также необходимо скопировать на целевое устройство. Библиотеки компонентов также находятся в двух подкаталогах arm и х8б каталога C: \Program File\Windows СЕ Files\wce300\Pocket PC 2002\controls.

? После того, как программа 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

Поделиться:
Популярные книги

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Наследница Драконов

Суббота Светлана
2. Наследница Драконов
Любовные романы:
современные любовные романы
любовно-фантастические романы
6.81
рейтинг книги
Наследница Драконов

Кровь Василиска

Тайниковский
1. Кровь Василиска
Фантастика:
фэнтези
попаданцы
аниме
4.25
рейтинг книги
Кровь Василиска

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Мастер 7

Чащин Валерий
7. Мастер
Фантастика:
фэнтези
боевая фантастика
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Мастер 7

Темный Лекарь 2

Токсик Саша
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 2

Восход. Солнцев. Книга IX

Скабер Артемий
9. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга IX

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Кукловод

Злобин Михаил
2. О чем молчат могилы
Фантастика:
боевая фантастика
8.50
рейтинг книги
Кукловод

Бремя империи

Афанасьев Александр
Бремя империи - 1.
Фантастика:
альтернативная история
9.34
рейтинг книги
Бремя империи

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит