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

на главную

Жанры

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

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

Шрифт:

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 «\Windows\Start Menu\white.bmp»

imLst.Add «\Windows\Start Menu\yellow.bmp»

imLst.Add «\Windows\Start Menu\green.bmp»

MenuBar1.ImageList = imLst.hImageList

В этом коде создается объектная переменная типа ImageList. Она связывается с компонентом ImageList1, после чего к коллекции рисунков добавляются созданные ранее изображения. Затем остается лишь связать коллекцию рисунков с компонентом MenuBar1. Должен быть указан полный путь к добавляемому рисунку от корневого каталога устройства. Поскольку для проекта в настройках его свойств был задан путь \Windows\Start 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

Rem 9

varEnText = Trim(varEnText)

Rem 10

strAr = Split(varEnText, " ", – 1, vbTextCompare)

Rem 11

intInt = 10000

For intCount = 0 To intInt

On Error Resume Next

List1.AddItem strAr(intCount)

If Err.Number Then

Err.Clear: Exit For

End If

Next

Rem 12

Dim intCount2 As Integer

For intCount = 1 To List1.ListCount

For intCount2 = intCount + 1 To List1.ListCount

If (StrComp(List1.List(intCount), List1.List(intCount2), vbTextCompare) = 0)

Then

List1.RemoveItem (intCount2): intCount2=intCount2-1

End If

Next

Next

End If

End Select

End Sub

Будут рассмотрены те блоки кода, где установлены комментарии.

1) На экран выводится диалог открытия файла.

2) Если диалог открытия файла вернул имя файла, то происходит переход к блоку 3.

3) Открывается файл с переданным именем при помощи объекта File.

4) Инициализируется переменная intText, и в нее считывается количество строк в файле.

5) После прохождения файла до конца при помощи функции LineInputString его необходимо открыть заново.

6) Считывается «английская» часть файла одной строкой в переменную varEnText.

7) Первая русская фраза выводится в текстовое поле Label1, а соответствующая ей английская фраза – в текстовое поле Label2.

8) Счетчик фраз увеличивает свое значение.

9) Пробелы справа и слева удаляются.

10) Строка varEnText разбивается на слова, которые помещаются в массив strAr. Массив динамический, поэтому нельзя сразу сказать, сколько в нем элементов.

11) Значение intInt предполагает, что в массиве не более 10 000 элементов. Каждый элемент массива заносится в список List1 до тех пор, пока не будет достигнут конец массива. Следующий шаг вызывает исключительную ситуацию, которая перехватывается при помощи блока On Error Resume Next. Проверка значения Err.Number позволяет определить наличие исключительной ситуации, вызов Err.Clear очищает флаг ошибки, а оператор Exit For завершает цикл.

12) В последнем блоке кода из списка удаляются все повторяющиеся слова.

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

30. Щелчок стилусом на слове в списке добавляет это слово к предложению, составляемому в поле Label3. Соответствующий код приведен в листинге 3.21.

Листинг 3.21

Private Sub List1_Click

varStrng = Label3.Caption

Label3.Caption = Label3.Caption + List1.List(List1.ListIndex) + " "

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
рейтинг книги
Элита элит