Владимир Волков - Программирование для карманных компьютеров
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.21Private Sub List1_Click()
varStrng = Label3.Caption
Label3.Caption = Label3.Caption + List1.List(List1.ListIndex) + " "
End SubПри этом предыдущее содержимое Label3 запоминается в переменной varStrng.
31. Кнопка Сброс просто присваивает свойству Caption компонента Label3 пустую строку, как это показано в листинге 3.22.
Листинг 3.22Private Sub Command2_Click()
Label3.Caption = ""
End Sub32. Кнопка ? отменяет ввод последнего слова при помощи кода, приведенного в листинге 3.23. Листинг 3.23
Private Sub Command3_Click()
Label3.Caption = varStrng
End Sub33. Нажатие Рё отпускание стилуса проверяются РЅР° РєРЅРѕРїРєРµ Подсказка. РџСЂРё нажатии стилусом Label2 выводится поверх Label3, Р° РїСЂРё отпускании СЃРЅРѕРІР° перемещается РЅР° задний план. Рто реализуется РїСЂРё помощи РєРѕРґР°, приведенного РІ листинге 3.24. Листинг 3.24
Private Sub Command4_MouseDown(button, shift, x, y)
Label2.ZOrder vbBringToFront
End Sub
Private Sub Command4_MouseUp(button, shift, x, y)
Label2.ZOrder vbSendToBack
End Sub34. Обработка щелчка РЅР° РєРЅРѕРїРєРµ Принять отличается некоторой сложностью. Надо РЅРµ только проверить правильность набора фразы Рё сообщить РѕР± этом пользователю, РЅРѕ Рё перейти Рє следующей фразе, если предыдущая была набрана удачно. Рто реализуется РїСЂРё помощи РєРѕРґР°, приведенного РІ листинге 3.25. Листинг 3.25
Private Sub Command1_Click()
If intText <> 0 Then
If StrComp(Trim(Label2.Caption), Trim(Label3.Caption), vbTextCompare) = 0 Then
MsgBox «Ай, малодец! Получилось! Следующая фраза», vbOKOnly
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
flFile.Close
Label3.Caption = ""
If intStep > intText / 2 Then
MsgBox «Вы закончили упражнение», vbOKOnly
App.End
End If
intStep = intStep + 1
Else
MsgBox «He получилось, попробуйте еще раз», vbOKOnly
End If
End If
End Sub35. На этом этапе приложение уже работает практически полностью. Осталось разобраться с командой меню Редактирование шрифта и его подменю. Весь код реакций на выбор одного из пунктов подменю команды Редактирование шрифта будет помещен в событие MenuBarl_MenuClick и будет обрабатываться при помощи конструкций Case, как это показано в листинге 3.26. Листинг 3.26
Case В«itBoldВ»
If mnuFile.Items.Item(1). SubItems(1). Caption = «Полужирный» Then
Label1.FontBold = True
Label2.FontBold = True
Label3.FontBold = True
List1.FontBold = True
mnuFile.Items.Item(1). SubItems(1). Caption = «*Полужирный»
Else
Label1.FontBold = False
Label2.FontBold = False
Label3.FontBold = False
List1.FontBold = False
mnuFile.Items.Item(1). SubItems(1). Caption = «Полужирный»
End If
Case В«itItalВ»
If mnuFile.Items.Item(1). SubItems(2). Caption = «Наклонный» Then
Label1.FontItalic = True
Label2.FontItalic = True
Label3.FontItalic = True
List1.FontItalic = True
mnuFile.Items.Item(1). SubItems(2). Caption = «*Наклонный»
Else
Label1.FontItalic = False
Label2.FontItalic = False
Label3.FontItalic = False
List1.FontItalic = False
mnuFile.Items.Item(1). SubItems(2). Caption = «Наклонный»
End If
Case В«it8В»
If mnuFile.Items.Item(1). SubItems(3). SubItems(1). Caption = В«8В» Then
Label1.FontSize = 8
Label2.FontSize = 8
Label3.FontSize = 8
List1.FontSize = 8
mnuFile.Items.Item(1). SubItems(3). SubItems(1). Caption = В«*8В»
mnuFile.Items.Item(1). SubItems(3). SubItems(2). Caption = В«10В»
mnuFile.Items.Item(1). SubItems(3). SubItems(3). Caption = В«12В»
End If
Case В«it10В»
If mnuFile.Items.Item(1). SubItems(3). SubItems(2). Caption = В«10В» Then
Label1.FontSize = 10
Label2.FontSize = 10
Label3.FontSize = 10
List1.FontSize = 10
mnuFile.Items.Item(1). SubItems(3). SubItems(1). Caption = "8"
mnuFile.Items.Item(1). SubItems(3). SubItems(2). Caption = В«*10В»
mnuFile.Items.Item(1). SubItems(3). SubItems(3). Caption = В«12В»
End If
Case В«it12В»
If mnuFile.Items.Item(1). SubItems(3). SubItems(3). Caption = В«12В» Then
Label1.FontSize = 12
Label2.FontSize = 12
Label3.FontSize = 12
List1.FontSize = 12
mnuFile.Items.Item(1). SubItems(3). SubItems(1). Caption = "8"
mnuFile.Items.Item(1). SubItems(3). SubItems(2). Caption = В«10В»
mnuFile.Items.Item(1). SubItems(3). SubItems(3). Caption = В«*12В»
End If36. На этом можно закончить работу над кодом приложения. Оно полнофункционально, хотя далеко от совершенства. Можно было бы сделать еще достаточно много. Нужно вынести в подпрограммы повторяющийся код, сами подпрограммы следует вынести в отдельный модуль. Можно развивать функциональность, вести подсчет статистики, добавить редактор файлов. Можно развивать дизайн и добавить окно-заставку при запуске, справочную систему и окно О программе. Все это, если у вас будет желание, вы можете проделать сами, ведь надо же на чем-то тренироваться самостоятельно.