Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Все, что вы хотели знать о написании скриптов для JFW, 12 страница



символ.

PriorWord() - перемещает активный курсор к предыдущему слову.

PriorLine() - перемещает активный курсор на предыдущую строку.

NextCharacter() - перемещает активный курсор к следующему

символу.

NextWord() - перемещает активный курсор к следующему слову.

NextLine() - перемещает активный курсор на следующую строку.

JAWSHome() - перемещает активный курсор в начало строки.

JAWSEnd() - перемещает активный курсор в конец строки.

JAWSPageUp() - перемещает активный курсор к верхнему краю окна

JAWSPageDown() - перемещает активный курсор к нижнему краю окна.

MoveTo - перемещает невидимый или Jaws курсор в координаты окна,

указанные пользователем.

MoveToControl - перемещает активный курсор к конкретному органу

управления в окне. Если при вызове этой функции активным

является PC курсор, автоматически включается Jaws курсор. В

противном случае используется активный курсор.

MoveToFrame - перемещает активный курсор в левый верхний угол

указанного фрейма. Если при вызове этой функции активным

является PC курсор, автоматически включается Jaws курсор,

который и перемещается в новую позицию. В противном случае

используется активный курсор.

MoveToGraphic - перемещает Jaws курсор, невидимый курсор или

брайлевский курсор в указанном направлении, чтобы найти

графический символ в активном окне.

MoveToWindow - перемещает активный курсор в указанное окно. Если

окно содержит текст, курсор позиционируется на первый символ, в

противном случае он позиционируется в центре окна. Если при

вызове этой функции активным является PC курсор, то

активизируется Jaws курсор, который и перемещается в новую

позицию.

PriorChunk - перемещает активный курсор к предыдущей цепочке

текста. Цепочка текста - это раздел или блок текста, который

пишется на экране за один раз.

NextChunk - перемещает активный курсор к следующей цепочке

текста. Цепочка - это раздел или блок текста, который пишется на

экране за один раз.

 

Обратите внимание, что если вша задача состоит в том, чтобы

прочитать что-нибудь на экране, то после функций перемещения

обычно следуют какие-нибудь Say функции. Вот пример сохранения

текущего курсора, переключения курсора, перемещения курсора

прочтения некоторого текста и п следующего возвращения в

первоначальную позицию с первоначальным курсором.

 

Script ReadBottomLine()

Var;Объявляем наши локальные переменные

Int TheTypeCode;У нас есть переменная типа Integer TheTypeCode

Let TheTypeCode = GetWindowSubtypeCode (GetCurrentWindow());узнаем, в каком типе окна мы находимся и присваиваем его переменной TheTypeCode



SaveCursor(); сохраняем текущий курсор и его позицию.

InvisibleCursor(); Переключаемся на невидимый курсор.

RouteInvisibleToPC(); Перемещаем невидимый курсор к PC курсору.or

If (TheTypeCode == WT_MENU) Then; Если мы в меню

MoveToWindow (GetAppMainWindow (GetCurrentWindow())); Перефокусироваться на главное окно

JAWSPageDown (); Перейти в нижний край

JAWSHome(); перейти в самую левую позицию.

NextWord(); Перейти на слово вправо.

SayChunk(); Озвучивает цепочку текста, которая была написана на экране вместе с

Else

JAWSPageDown(); Перейти в нижний край

SayLine(); Прочитать строку

EndIf

RestoreCursor(); Вернуться к первоначальному курсору и восстановить его позицию.

EndScript

 

Этот скрипт озвучивает нижнюю строку окна. Обычно там находится

строка состояния. PC курсор в это место попасть не может,

поэтому мы должны переключиться на невидимый курсор и прочитать

строку с его помощью. Обратите внимание, что перед тем, как

предпринять это действие, используется функция SaveCursor, а

после - функция RestoreCursor. Таким образом, после чтения

строки состояния все стало точно так же, как было перед этим.

Этот скрипт использует код подтипа окна, чтобы определить, в

каком типе окна мы находимся, и, какое утверждение скрипта надо

использовать чтобы прочитать то, что нам нужно.

 

Посылка нажатий клавиш

 

Если вам нужно послать нажатие клавиши или комбинации клавиш из

скрипта (то есть, если вы хотите, чтобы скрипт ввел эти клавиши,

точно также, как если бы вы сами ввели их с клавиатуры),

поместите название клавиши в фигурные скобки. Например,

{CONTROL+H} пошлет в систему Ctrl+H. Этот способ также можно

использовать, чтобы посылть буквенно-цифровые символы. Таким

образом, {h} пошлет в приложение, с которым вы работаете, букву

H. Каждая буква, которую вы намерены послать, должна иметь свой

собственный набор фигурных скобок. Если вам нужно послать

больше, чем пару символов, вы можете воспользоваться функцией

TypeString, которая сразу пошлет всю строку символов в

приложение.

 

Синхронизация документации

 

После того, как вы внесли какие-либо изменения в файл скриптов,

особенно редактирование, которое включает добавление или

удаление скриптов, путем вставки их откуда-то еще, или путем их

выделения и удаления, было бы неплохо синхронизировать

документацию. Каждый скрипт должен иметь соответствующую ему

строку документации в файле с тем же именем и с расширением

.JSD. У вас, конечно, запрашивалась эта информация, когда вы

создавали новый скрипт. Но при редактировании могут появиться

скрипты, у которых нет документации, или документация для

скриптов, которые больше не существуют. Вот почему в меню Файл

диспетчера скриптов имеется пункт Синхронизировать документацию.

Ниже приведены шаги, которые предпринимает диспетчер скриптов,

когда вы выбираете этот пункт меню.

 

1. Диспетчер скриптов просматривает в файле >JSD строки для

каждого скрипта в >JSS файле и добавляет пустые строки для

каждого скрипта, у которого отсутствует документация. (вы должны

просмотреть все скрипты, которые, как вам кажется, имеют пустые

строки, и ввести соответствующий синопсис и описание после

процесса синхронизации). Вы заметите, когда появится диалог

документации, что если в файле скриптов вашего приложения есть

скрипт с тем же именем, что и в файле скриптов по умолчанию,

документация из скрипта по умолчанию была помещена в поля для

вашего скрипта. Вам может понадобиься модифицировать эту

документацию, чтобы привести в соответствие с тем, как ваш

скрипт или функция работают в данном приложении.

2. Диспетчер скриптов проверяет.JSD файл на наличие строк

документации, которым больше не соответствует никаких скриптов в

.JSSS файле и спрашивает, хотите ли вы удалить строки

документации.

 

Команда синхронизации также очень полезна, когда вы вставляете

скрипт в файл скриптов из другого файла скриптов. Процесс будет

использовать те же методы, которые были описаны выше, чтобы

вставить пустые строки в файл документации для вставленных

скриптов. В эти строки необходимо будет вписать соответствующую

информацию.

 

Использование процесса синхронизации гарантирует, что ваши

скрипты и документация к ним всегда будут текущими. Помните, что

Jaws использует синопсис и описание для помощи по клавиатуре,

когда пользователь нажимает соответствующие клавиши для вашего

скрипта. Поэтому надлежащее внимание к документации поможет всем

пользователям ваших скриптов.

 

Отладка

 

Об отладке программ написаны целые тома. Самое важное, что нужно

запомнить, это то, что здесь требуется совершенно другой склад

ума, чем для обычной диагностики. Диагностика проблемы обычно

начинается с утверждения, что нечто, с чем вы работаете, однажды

работало, а теперь испортилось. Следовательно, если вы просто

проследите логику от начала до конца, вы найдете испорченную

часть. Отладка чего-то, что еще не работало, означает, что вы

даже не можете предположить, что сам ход правилен. А как это

относится к отладке наших файлов скриптов? Ну, это просто. Не

предполагайте, что только потому, что вы задумали, что все

пойдет именно так, так оно и пойдет. Jaws может не всегда думать

в точности так, как вы, или, да простят меня небеса, вы можете

пропустить какие-нибудь жизненно важные утверждения. Один из

самых полезных методов обнаружения логических ошибок заключается

в том, чтобы просматривать скрипт строка за строкой, представив,

что вы - компьютер. Делайте в точности то, что велит делать

скрипт, а не то, что, как вам кажется, вы получили сделать

компьютеру. К своему удивлению, вы можете заметить, что на самом

деле вы дали инструкции, которая совершенно отлична от той,

которую вы намеревались дать. Исправьте все ошибки, которые вы

заметили, а затем продолжайте просматривать скрипт, проверяя

каждое утверждение на тот предмет, в действительности ли оно

выполняет то, что вы задумали. Вот некоторые другие инструменты,

которые могут вам помочь в ваших усилиях по отладке скриптов.

 

Компилятор скриптов Jaws

 

Первая большая помощь - сам компилятор скриптов. Он проверяет

синтаксис ваших утверждений и убеждается в том, что вы правильно

завершили каждую последовательность. Когда вы пытаетесь

скомпилировать скрипт с ошибкой, он выдает сообщение об ошибке.

Те из вас, кто в прошлом писал макросы для Jaws, заметят, ошибки

компилятора для скриптов стали более описательными. Уберите

диалог об ошибке, и курсор будет помещен в скрипт рядом с

ошибкой, или туда, где, по мнению компилятора, находится ошибка.

Вы должны понимать, что компилятор может не всегда точно знать,

где ошибка. Если вы используете несколько утверждений If-Then,

которые, например, вложены, и вы забыли написать нужное

количество утверждений EndIf, компилятор покажет ошибку, но

курсор не обязательно будет поставлен именно туда, куда нужно

вставить недостающее утверждение EndIf. Курсор может находиться

на расстоянии нескольких строк от этого места. Компилятор только

может вам сказать, что ваши циклы If-Then не сформулированы

должным образом, и что после оператора If должен следовать

оператор EndIf. Вам придется самим узнавать, куда нужно вставить

недостающее утверждение.

 

Include файлы проверяются, когда они включаются. Всегда ставьте

оператор Include в своем файле скриптов прежде, чем вы

воспользуетесь чем-нибудь из включенного файла. Например, вы

должны включить HJCONST.JSH прежде чем воспользуетесь

какой-нибудь константой оттуда. Конечно, если вы располагаете

свой файл скриптов как положено, все включения будут примерно в

начале файла скриптов.

 

Ошибочная деятельность

 

Под ошибочной активностью мы будем подразумевать, что скрипт

работает (то есть, он был скомпилирован должным образом), но

работает не так, как предполагалось. Если ваш скрипт файл

компилируется без ошибок, пора проверить его в предполагаемой

среде. Перед тестированием нет необходимости перезапускать Jaws,

если только вы не модифицировали файл скриптов по умолчанию.

Просто переключитесь на приложение и тестируйте. Вот несколько

советов, которые могут облегчить процесс тестирования

 

Фрагменты: когда это возможно, компилируйте фрагменты отдельно и

тестируйте, чтобы посмотреть, работают ли они сами по себе.:

 

Сообщения: в ключевых точках вашего кода можно вставлять

сообщения, чтобы Jaws сообщал, что он делает. ВЫ можете вставить

сообщения SayString в ключевых точках скрипта чтобы посмотреть,

действительно ли они выполняются, когда вы предполагаете это.

Ряд таких сообщений, которые выдают несколько различные

сообщения, могут быть весьма информативными в том, чтобы помочь

вам расшифровать, если код выполняется в том порядке, в каком вы

задумали, и ветвление происходит корректно. Например, сообщения

SayString в каждой ноге утверждения If-Then проинформируют вас,

какая нога выполняется. Вы также можете использовать функцию

SayInteger, чтобы она информировала вас о значениях

целочисленных переменных и о том, как эти значения изменяются в

ходе выполнения скрипта. Вы можете обнаружить, что эти

переменные имеют не те значения, которые вы ожидали, в некоторых

точках выполнения скрипта. Функция SayInteger также может

оказаться полезной в том, чтобы помочь вам отслеживать значения

целочисленных переменных во время выполнения цикла While.

 

Многие ошибки выполнения можно проследить до сбоя, чтобы

сохранить и восстановить состояния, должным образом. Это

относится к состояниям курсора, состояниям эха экрана,

состояниям подробности и т.д. Всегда, когда вам нужно изменить

состояние для ваших задач, убедитесь, что вы возвращаетесь в

первоначальное состояние. Например, изменение эха экрана на

"Все", так чтобы вы могли всегда слышать подсказку, это конечно

здорово, но не оставляйте систему в таком состоянии поскольку

это может запутать пользователя.

 

Отладочные скрипты: вы можете создавать отладочные скрипты,

которые будут сообщать всю необходимую информацию, такую, как

активный курсор, что содержится в переменных и различные

свойства окон. Вот пара скриптов, которые вы можете скопировать

и вставить в свой файл скриптов и модифицировать их,чтобы они

сообщали необходимую информацию.

 

Script SayVars

SayString(MyVariable); Наберите имя своей переменной e

; Скопируйте предыдущую строку для каждой своей переменной

EndScript

 

Script WindowInfo

SayString(GetWindowClass (GetFocus ())); Класс окна с фокусом

SayString (GetWindowClass (GetParent (GetFocus ()))); Класс окна для родительского окна

UtilitySayInfoAccess(); Название элемента управления

EndScript

 

Взаимодействие ваших скриптов с функциями событий: вы должны

иметь в виду, что у Jaws имеются функции событий, которые

представлены в файле скриптов по умолчанию, которые могут

срабатывать автоматически во время работы приложения. Эти

функции событий могут взаимодействовать неожиданным образом со

скриптами, которые вы пишете. Например, вы можете поместить

функции чтения в свой скрипт, чтобы прочитать определенные части

экрана в определенных ситуациях, только для того, чтобы узнать,

что информация озвучивается дважды. Вероятно, это означает, что

одна из функций событий, как, например, функция NewTextEvent или

функция событий FocusedChanged была вызвана, чтобы озвучить

текст автоматически, а ваш скрипт озвучивает этот текст во

второй раз. Вы не найдете решение этой проблемы, просто

анализируя свой скрипт, поскольку это не ваш скрипт озвучивает

информацию дважды. Вот почему вам так важно четко понимать, что

делают функции событий и когда они будут вызваны приложением.

 

Домашнее задание # 10

 

Приведенный скрипт содержит ошибки на каждой строке. Найдите

ошибки и перепишите скрипт правильно.

 

Script SayDefaultButton (Int Button)

vars

string DefaultButtonName,

if (DialogActive ())

let DefaultButtonName == GetDefaultButtonName

if (DefaultButtonName!= " ") then

if (GetVerbosity () = 0) then

SayString ("msg70");"default button is"

EndIf ()

SayString (DefaultButtonName))

Else ()

SayString (msg444): "Can not determine default button in this dialog box "

End If

Else ()

SayString (msg71;"not in a dialog box"

EndIf ()

End Script

(cont)

 

Стратегия атаки на новые приложения

 

Когда вы впервые открываете новое приложение, особенно то,

которое не является дружественным к речевому доступу, может

оказаться весьма затруднительным решить, как изучить

расположение приложения и как приспособить его для лучшего

доступа. Это руководство познакомило вас с инструментами

создания скриптов, которые помогут вам проделать это. Одна

стратегия подхода к таким приложениям показана в приложении E.

Там вы найдете некоторые идеи о том, как подходить к проблеме

анализа и создания скриптов для нового приложения, в комбинации

с использованием других возможностей Jaws, таких, например, как

использование фреймов.

 

Рекомендации для создания дистрибутивных файлов скриптов

 

Мы уже порекомендовали кучу правил для соблюдения, когда

создавали файлы скриптов, такие, как использование подробных

комментариев и тщательное заполнение форм документации к

скриптам. Конечно, это только рекомендации, и никто не может

принудить вас соблюдать эти правила. Однако, если вы намерены

передавать свои файлы скриптов в Henter-Joyce для возможного

включения в будущие версии Jaws, необходимо соблюдать несколько

обязательных правил. Эти правила приведены ниже.

 

Имена переменных: используйте осмысленные имена переменных,

после которых вставляйте комментарий, когда имя является

недостаточно описательным.

Комментарии: вставляйте комментарии сразу же после начала

каждого скрипта или функции, описывающие его назначение.

Комментарии также необходимо вставлять в сложные утверждения,

где задача не всегда очевидна, такие, как сложные утверждения

типа If-Then-Else.

Сообщения: все озвучиваемые или брайлевские сообщения должны

помещаться в файл сообщений для текущего приложения, где скрипт

может к ним обращаться. Эти сообщения никогда не должны

помещаться в кавычках после SayString в самом.JSS файле.

Соблюдение этого правила делает перевод сообщений на другие

языки куда проще.

Документация к скриптам: заполняйте поля Синопсис и Описание

(Description) в диалоге "Новый скрипт". Они должны заполняться

точно и полностью, поскольку они используются в помощи по

клавиатуре, вызываемой по Insert+F1. Например, в скрипте

SayTextAndAttributes, вы найдете следующий синопсис и описание.

Синопсис: озвучивает изменения в атрибутах, когда читает текст в

активном окне. Описание: читает видимый текст в активном окне не

перемещая курсор. Когда попадаются изменения атрибутов, ОНИ

СООБЩАЮТСЯ.

Убедитесь, что ваш файл скриптов включает настроенные версии

скриптов HotKeyHelp, ScriptFileName, и, если необходимо,

ScreenSensitiveHelp.

 

Преобразование файлов макросов

 

Диспетчер скриптов можно использовать, чтобы преобразовать файлы

макросов, которые вы создавали для версий Jaws старше 3.0. Далее

приводятся шаги, которые предпринимает диспетчер скриптов, чтобы

переконвертировать файлы макросов в файлы скриптов.

1. Сначала диспетчер скриптов потребует от вас некоторого ввода.

Когда в меню Файл вы выбираете пункт Импортировать макрофайл, вы

должны будете ввести имя файла макросов. Диспетчер скриптов

использует эту информацию для определения пути и имени файла,

который получится в результате. Вы также должны будете выбрать

среду, для которой создавался макрофайл: Desktop, Laptop или оба

сразу.

2. Диспетчер скриптов создаст пустой файл скриптов, основываясь

целевом пути и имени файла.

3. Файлы включения обрабатываются следующим образом: файл

сообщений копируется в целевую директорию, переименовывается,

получая расширение.JSM, и в.JSS файл добавляется оператор

Inckude.

Макросы в Inckude файлах перемещаются в.JSS файл и

конвертируются. Процедура конвертирования следующая: Если есть

раздел определения глобальных переменных или констант в Inckude

файле, создается.JSH файл и все это переносится туда. В.JSS

файл добавляется оператор Inckude для этого файла

Макросы конвертируются следующим образом: если соответствующая

клавиша обнаруживается в файле раскладки клавиатуры по

умолчанию, основываясь на выбранной среде, скрипту присваивается

соответствующее имя.

Если соответствующая клавиша будет найдена в разделе "Старые

клавиши" файла раскладки клавиатуры по умолчанию, макрос

конвертируется в функцию Jaws с соответствующим именем.

Если соответствия не найдено, скрипту присваивается имя имени

файла, после которого идет номер.

Создается файл раскладки клавиатуры, с присвоениями, основанными

на первоначальных нажатиях клавиш. Макросам, которые

конвертированы в определяемые пользователем функции, клавишных

команд не присваивается, но после имени функции помещается

комментарий, с первоначальным макронажатием клавиши.

Каждое PerformMacro конвертируется в PerformScript, если только

вызванный макрос не был переконвертирован в функцию Jaws. В этом

случае PerformMacro конвертируется в вызов функции

Файл скриптов, который получается в результате, открывается в

диспетчере скриптов.

Предыдущая версия Jaws требовала пробелов между кавычками для

обозначения нулевого значения. В текущей версии нулевые значения

обозначаются просто двумя кавычами без пробелов. Если ваш файл

макросов содержал такие тесты на нулевое значение, вам придется

убирать пробелы между кавычками вручную.

Последнее, что вы должны сделать, это просмотреть скрипты,

изменить имена, если это необходимо, и написать документацию для

каждого скрипта. Если у вас были макросы, служившие в качестве

функций, сконвертируйте их в определяемые пользователем функции.

Затем скомпилируйте новый файл скриптов. Примечание: если вы

вносите обширные изменения в скрипты и функции, вы можете

пожелать компилировать после каждого изменения.

 

Благодарности

 

Я хотел бы выразить мою искреннюю благодарность Глену Гордону,

Майку Педерсену, Джозефу Данну, Син Мерфи, Глену Сепку, Джеймсу

Пазуоли, Лесу Криглеру и дасти Ворхису за их страшно полезную

техническую информацию, идеи и рекомендации. Я также хотел бы

поблагодарить Фрэнка Дипалермо который написал первые

руководства по макросам и скриптам, которые послужили отправной

точкой для этого проекта.

 

Приложение A

 

Ответы на домашние задания

 

Ответ на домашнее задание # 1

 

Script LastFourFiles ()

SpeechOff ()

{Alt+F}

Pause ()

NextLine ()

NextLine ()

NextLine ()

NextLine ()

NextLine ()

NextLine ()

NextLine ()

SpeechOn ()

SayLine ()

NextLine ()

SayLine ()

NextLine ()

SayLine ()

NextLine ()

SayLine ()

SpeechOff ()

{escape}

{escape}

Pause ()

SpeechOn ()

EndScript

 

Ответ на домашнее задание # 2

 

Script SpeakWindowState ()

JAWSCursor ()

SaveCursor ()

RouteJAWSToPC ()

JAWSPageUp ()

JAWSEnd ()

PriorWord ()

SayWord ()

RestoreCursor ()

PCCursor ()

EndScript

 

Обратите внимание, что в этом примере мы активизировали Jaws

курсор, прежде чем использовать функцию SaveCursor. Поскольку

Jaws курсор является активным курсором, когда выполняется

функция SaveCursor, функция RestoreCursor вернет в

первоначальное положение именно Jaws курсор. Функция PCCursor ()

в конце снова включит PC курсор. Это необходимо, поскольку

скрипт, когда работал, включил Jaws курсор.

 

Ниже приводится ответ на "Отлично"5

 

Script SpeakWindowState ()

InvisibleCursor ()

SaveCursor ()

RouteInvisibleToPC ()

JAWSPageUp ()

JAWSEnd ()

PriorWord ()

If GetWord () == "Restore Symbol" Then

SayString ("Maximized")

ElIf GetWord () == "Maximize Symbol" Then

SayString ("Restored")

Else

SayString ("Couldn't find the symbol")

EndIf

RestoreCursor ()

PCCursor ()

EndScript

 

Ответ к домашнему заданию # 3

 

Script PlaybackPosition ()

SaveCursor ()

RouteInvisibleToPC ()

InvisibleCursor ()

JAWSPageUp ()

NextLine ()

NextLine ()

NextLine ()

JAWSHome ()

SayString ("Current time is")

SayWord ()

SayString ("seconds out of")

NextWord ()

NextWord ()

SayWord ()

SayString ("seconds")

RestoreCursor ()

EndScript

 

Ответ к домашнему заданию # 4

 

Include "JAWSWINS.JSH"

Include "JAWSWINS.JMH"

Include "HJCONST.JSH"

Include "HJGLOBAL.JSH"

 

Ответ к домашнему заданию # 5

 

Script CheckAndReset ()

Var

String TotalTime;Хранит полное время звучания звукового файла

SaveCursor ()

RouteInvisibleToPC ()

InvisibleCursor ()

JAWSPageUp ()

NextLine ()

NextLine ()

NextLine ()

JAWSEnd ()

PriorWord ()

Let TotalTime = GetWord ()

JAWSHome ()

If GetWord () == "0.00" Then

SayString ("At the beginning of the recording")

ElIf GetWord ()!= "0.00" && GetWord () < TotalTime Then

SayString ("Playback only partially complete")

ElIf GetWord () == TotalTime Then

SayString ("Playback is complete.")

JAWSCursor ()

RouteJAWSToPC ()

JAWSHome ()

Pause ()

LeftMouseButton ()

Pause ()

InvisibleCursor ()

If GetWord () == "0.00" Then

SayString ("Rewind complete")

Else

SayString ("Rewind failed. Please check your batteries.")

EndIf

EndIf

EndScript

 

Обратите внимание, что Jaws может произносить некоторые

дополнительные фразы, такие как "Seek to Start" или "Seek to

End" когда он выполняет перемотку. Все правильно.

 

Ответ к домашнему заданию # 6

 

String Function SayAllCaps (string CurrentWord)

If CurrentWord < "a" || CurrentWord > "zzzzz" Then

Return ""

EndIf

If (StringContains (CurrentWord, "a")) || (StringContains (CurrentWord, "b"))

|| (StringContains (CurrentWord, "c")) || (StringContains (CurrentWord, "d"))

|| (StringContains (CurrentWord, "e")) || (StringContains (CurrentWord, "f"))

|| (StringContains (CurrentWord, "g")) || (StringContains (CurrentWord, "h"))

|| (StringContains (CurrentWord, "i")) || (StringContains (CurrentWord, "j"))

|| (StringContains (CurrentWord, "k")) || (StringContains (CurrentWord, "l"))

|| (StringContains (CurrentWord, "m")) || (StringContains (CurrentWord, "n"))

|| (StringContains (CurrentWord, "o")) || (StringContains (CurrentWord, "p"))

|| (StringContains (CurrentWord, "q")) || (StringContains (CurrentWord, "r"))

|| (StringContains (CurrentWord, "s")) || (StringContains (CurrentWord, "t"))

|| (StringContains (CurrentWord, "u")) || (StringContains (CurrentWord, "v"))

|| (StringContains (CurrentWord, "w")) || (StringContains (CurrentWord, "x"))

|| (StringContains (CurrentWord, "y")) || (StringContains (CurrentWord, "z"))

|| (StringContains (CurrentWord, "1")) || (StringContains (CurrentWord, "2"))

|| (StringContains (CurrentWord, "3")) || (StringContains (CurrentWord, "4"))


Дата добавления: 2015-11-04; просмотров: 21 | Нарушение авторских прав







mybiblioteka.su - 2015-2024 год. (0.104 сек.)







<== предыдущая лекция | следующая лекция ==>