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

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



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

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

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

образом число утверждений, которые требуются. Кроме того, иногда

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

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

повторений автоматически, в зависимости от выводов, вытекающих

из действий скрипта. Цикл выполняется с помощью

последовательности While-EndWhile.

 

Цикл While - это последовательность утверждения, которое

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

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

условие. Цикл While состоит из двух частей - утверждения While,

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

утверждения EndWhile, которое завершает цикл. Все утверждения в

границах утверждений While и EndWhile будут выполняться

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

While. Вот пример.

 

Давайте возьмем довольно обычную проблему. Вы работаете в

программе редакторе, которая нумерует строки пятью цифрами.

Поэтому первая строка нумеруется как 00001. Jaws тратит массу

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

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

While. Рассмотрим следующий скрипт:

 

Script SayEditLine()

SaveCursor ()

JAWSCursor()

RouteJAWSToPC()

JAWSHome()

While (GetCharacter () == "0")

NextCharacter ()

EndWhile

SayFromCursor()

RestoreCursor ()

EndScript

 

Использование такого скрипта для чтения номера строки устранит

для нас начальные нули. Вот как это делается. Первые четыре

строки сохраняют позицию курсора, активизируют Jaws курсор и

перемещают его к началу строки, на которой мы находимся. Затем

цикл While просматривает каждый символ в начале строки по

очереди и смотрит, не ноль ли это. Если ноль, то он просто

переходит к следующему символу и тоже его проверяет. когда он

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

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

завершается. Затем JFW продолжает обрабатывать оставшуюся часть

скрипта после цикла Whilt. Сюда входит чтение оставшейся части

строки от курсора до конца строки. Это избавляет от всех нулей.

 

Здесь нужно сделать предупреждение относительно циклов While.

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

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



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

удовлетворено. Если так сделать, цикл будет длиться вечно,

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

пока программа не будет завершена вручную. Внимательно

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

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

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

выполнили новый скрипт с циклом While, вероятнее всего,

произошло именно это. Один из способов избежать эту проблему при

разработке циклов While - включать некоторые утверждения,

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

некоторого числа повторений. Пример такого цикла показан ниже.

 

While FirstVariable < SecondVariable

Let BreakOutVariable = BreakOutVariable+1

(Rest of loop would be here.)

If (BreakOutVariable > 100) Then

Return

EndIf

EndWhile

 

Этот цикл задуман таким образом, что он будет работать до тех

пор, пока первая переменная не станет больше второй переменной.

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

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

дополнительных утверждений, призванных предотвратить такой

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

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

повторяется. Когда значение BreakOutVariable превышает 100,

утверждение If-Then в конце цикла выполнит возврат и завершит

цикл. Если вы уверены, что цикл While работает как положено, вы

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

 

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

 

Для этого домашнего задания давайте опять воспользуемся

программой Фонограф. В прошлый раз, когда мы писали скрипт для этой

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

показывает и время, которое прошло, и полное время звукового

файла. Напишите скрипт, используя утверждения If-Then и

утверждения Elif, который проверяет, что прошедшее время не

является нулем. Если это так, пусть выдается сообщение "В начале

записи". Если прошедшее время больше нуля, но меньше полного

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

частично". Если прошедшее время равно полному времени, пусть он

говорит "Проигрывание завершено" и щелкает кнопку "Искать

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

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

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

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

выдаст сообщение "ОБратная перемотка завершена". Если счетчик не

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

перемотка невозможна. Проверьте ваши батарейки". Также

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

целом и прошедшее время.

 

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

 

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

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

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

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

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

они запрограммированы в Jaws. Разница между определяемой

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

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

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

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

функции запускаются всякий раз, когда они вызываются из скрипта

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

 

Простые функции

 

Опреде-

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

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

для выполнения конкретной задачи. Это особенно полезно, когда

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

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

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

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

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

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

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

работу. Простейший тип функции не принимает никаких данных

(параметров) и не возвращает никаких данных (возвратов) в

вызывающий скрипт. Давайте рассмотрим пример определяемой

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

Microsoft Excel, EXCEL.JSS. Этот скрипт называется NextSheet, и

в его задачу входит переместить фокус к следующей таблице. Вот

код из скрипта:

 

Script NextSheet()

;переходит в следующую таблицу и читает номер

{CONTROL+PPAGE DOWN}

Delay (1)

SayWindowPromptAndText()

EndScript

 

Обратите внимание, что скрипт вызывает функцию, которая называется

SayWindowPromptAndText. Вы не найдете этой функции среди встроенных

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

написана программистами из Henter-Joyce и включена в EXCEL.JSS. Ниже

приводится код для SayWindowPromptAndText.

 

Function SayWindowPromptAndText ()

SaveCursor ()

InvisibleCursor ()

RouteInvisibleToPC ()

If (FindLastAttribute (ATTRIB_BOLD)) Then

SayChunk ()

Else

SayString (msg121);"bolded sheet tab not found"

EndIf

EndFunction

 

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

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

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

нашем первом скрипте. Как и прежде, мы поместим эту функцию в файл

скриптов для редактора "Блокнот" (Notepad).

 

1. Откройте Блокнот через главное меню/Программы/Стандартные.

2. Откройте диспетчер скриптов, нажав Insert+0 или Insert+F2, после чего s и

Enter. Jaws сообщит вам, что вы находитесь в файле notepad.jss, исходном

файле скриптов для Блокнота.

3. В меню Скрипт выберите пункт Новый скрипт, или нажмите

клавишу-ускоритель, CTRL+E.

4. Появляется диалог нового скрипта, и теперь мы можем назвать нашу

функцию и написать ее документацию. Когда появляется диалог нового

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

(СказатьИмя). Убедитесь, что буквы S и N являются большими и не делайте

пробелов.

5. Дважды нажмите Tab, чтобы переместиться к полю Synopsis. Наберите

слова "Say our name". (пропустив блок проверки Can be attached to key

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

скриптов, что мы создаем функцию, а не скрипт).

6. Нажмите Tab, чтобы переместиться в поле Description (Описание) и

наберите слова "The name of the person who wrote this function." (Имя

человека, написавшего эту функцию).

7. Нажмите Tab, чтобы переместиться в поле Категория, и наберите Test. Поле

Категория - это комбобокс, в котором вы можете либо вписать название

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

8. Нажмите Tab, чтобы переместиться в поле Function returns (Возвраты

функции) и спуститесь к значению Void. Мы выбираем Void, потому что

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

9. Больше нам никаких полей заполнять не нужно, поэтому клавишей Tab

перемещайтесь к кнопке OK, и нажимайте клавишу Enter, чтобы закрыть

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

10. Теперь мы снова находимся в главной текстовой области диспетчера

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

"Void Function SayName ()", а в последней строке написано "EndFunction".

Мы помещены между двумя этими строками. Клавишей "Стрелка вверх"

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

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

11. Для этой функции вам понадобится только одна строка, и это будет та же

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

строка будет SayString ("My name is XXX"), где XXX - ваше имя. Чтобы

вставить эту строку в вашу функцию, нажмите CTRL+I, чтобы открыть диалог

Insert function (вставить функцию). Затем наберите s,a и y. Вы должны

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

выделена. Нажмите Enter, чтобы принять эту функцию.

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

Наберите "My name is XXX", и не забудьте включить кавычки. После того,

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

функция теперь закончена.

13. Теперь на вашей странице должно быть три строки, в точности так, как

они выглядят ниже. Помните, что близко - значит недостаточно хорошо,

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

Кроме того, несколько пустых строк роли не играют. Jaws игнорирует пустые

строки в функциях.

Void Function SayName()

SayString ("My name is XXX")

EndFunction

14. Теперь мы должны сохранить и скомпилировать файл скриптов для

Блокнота. Нажмите CTRL+S, и вы должны услышать "Compile Complete"

(Компиляция завершена). Если что-то не так, вернитесь и вновь проследите все

шаги и попробуйте снова.

 

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

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

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

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

 

Script SpeakName ()

SayName ()

EndScript

 

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

имя. Теперь может показаться немного глупо, проходить через все эти

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

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

оно и так. Однако, функции могут быть длинными и сложными. В случаях

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

раз, а потом вызывать его всякий раз, когда он нам понадобится. Иначе нам

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

он понадобится.

 

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

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

потому что он не требует никаких параметров и не возвращает никаких

значений в вызывающий скрипт. Однако, определяемые пользователем

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

функций.

 

Функции, которые требуют параметры

 

Первый пример - это функция, которая принимает параметры. Помните, что

параметр - это не что иное, как фрагмент информации, который вы передаете

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

почему мы передаем эту информацию во время работы, а не включаем ее как

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

каждом вызове функции. Помните, что параметр объявляется как переменная,

но помещается между скобками, следующими после имени функции, а не

после слова "var" около начала скрипта.

 

Function ScriptAndAppNames (string sFileName)

If (GetVerbosity() == beginner) Then

SayString(sFileName + " settings are loaded")

else

SayString (sFileName+" Settings")

EndIf

If(GetVerbosity() == beginner) Then

SayString ("The application currently being used is the ")

EndIf

SayString (GetAppFileName ())

SpellString (GetAppFileName ())

EndFunction

 

Вы можете подумать, что строковый параметр, sFileName, является

дверью, через которую мы можем передать имя текущего файла

скриптов в функцию, когда она вызывается. Параметр sFileName не

равен filename, он более похож на переменную, которая будет

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

в функцию, которая будет его использовать. Это вызывающее

утверждение будет сформулировано следующим образом:

 

ScriptAndAppNames ("ApplicationName")

 

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

хотите передать в функцию. Этот вызов функции говорит, что

строка (string) "ApplicationName", должна быть передана в

функцию, ScriptAndAppNames, через параметр sFileName. Тогда

функция будет "знать" эту информацию. Следовательно, она может

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

утверждениях типа SayString. Здесь информация о параметре

соединяется с фиксированным текстом, чтобы завершить сообщения,

которые будут озвучены во время выполнения.

 

Давайте возьмем функцию, которую мы написали прежде, SayName, и

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

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

функции. Выполните шаги, приведенные ниже.

 

1. Откройте блокнот, через главное меню/программы/стандартные.

2. Откройте диспетчер скриптов, нажав Insert+0, или нажав

Insert+F2, а затем s, а затем Enter. Jaws сообщит вам, что вы

находитесь в NOTEPAD.JSS, исходном файле скриптов для Блокнота.

Выберите New Script из меню Script, или нажмите

клавишу-ускоритель, CTRL+E.

3. Появляется диалог нового скрипта, и теперь мы можем

назвать нашу функцию и написать ее документацию. Когда

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

ScriptName (Имя скрипта). Наберите SayName. Убедитесь, что буквы

S и N являются большими, и не вставляйте пробелы между словами.

4. Дважды нажмите клавишу Tab, чтобы переместиться к полю

Synopsis. Наберите слова "Say our Name". (Пропустив блок

проверки Can be Attached to key, и не включив его, мы сообщили

диспетчеру скриптов, что создаем функцию, а не скрипт).

5. Нажмите Tab, чтобы переместиться в поле Description и

наберите слова "The name of the person who wrote this function.".

6. Нажмите Tab, чтобы переместиться в поле Категория, и наберите

слово Test. Поле Категория - это комбобокс, и категорию можно

либо вписать, либо выбрать из уже имеющихся.

7. Нажмите Enter, чтобы переместиться в поле Function Returns

(Возвраты функции) и выберите Void. Мы выбираем Void, потому что

наша функция не возвращает никакой информации в вызывающий

скрипт.

8. Нажмите CTRL+Tab, чтобы переместиться в поле Parameters

(Параметры). Вы окажетесь в поле Existing Parameters

(существующие параметры). Это поле пусто, поскольку еще не

существует никаких параметров.

9. Клавишей Tab переместитесь в поле редактирования New

Parameter (Новый параметр) и наберите "UserName".

10. Нажмите клавишу Tab дважды, пока не попадете в поле

редактирования Description (описание) и наберите "The name of the user".

11. Клавишей Tab переместитесь в список допустимых типов и

выберите String.

12. Клавишей Tab переместитесь к кнопке Add (добавить) и нажмите

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

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

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

переместитесь к кнопке OK и нажмите Enter.

13. Теперь мы снова находимся в главной текстовой области

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

строке написано "Void Function SayName (String UserName)", а в

последней строке написано "EndFunction". Мы находимся между

двумя этими строками. Клавишами-стрелками поднимитесь на первую

пустую строку после первой строки и вы готовы к тому, чтобы

написать тело функции.

14. Для этой функции вам понадобится только одна строка, но она

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

нашего первого скрипта и функции SayName, которую мы писали

прежде. Эта строка будет SayString ("My name is " + UserName),

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

функцию. Чтобы вставить эту строку в функцию, нажмите Ctrl+I,

чтобы открыть диалог "Вставить функцию". Затем наберите s, a и

y. Вы должны услышать, как Jaws скажет SayString, имя встроенной

функции, которая была выбрана. Нажмите Enter, чтобы принять эту

функцию.

15. Теперь вам будет предложено ввести строку, которую нужно

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

Наберите "My name +UserName", и не забудьте про кавычки. После

того, как вы нажмете Enter, вы вернетесь в область

редактирования, где ваша функция теперь готова.

16. Теперь у вас на экране должны присутствовать три строки, в

точности такие, как на этой странице. Помните, что близко - это

не очень-то хорошо, поскольку компьютеры ожидают от нас, что мы

будем точными и совершенными. Кроме того, несколько пустых строк

значения не имеют. Jaws игнорирует пустые строки в функциях.

Void Function SayName(String UserName)

SayString ("My name is " + UserName)

EndFunction

17. Теперь нам нужно сохранитть и скомпилировать файл скриптов

для NotePad. Нажмите Ctrl+S, и вы должны услышать "Compile

complete". Если это не так, вернитесь и вновь проделайте все

вышеописанные шаги и попытайтесь еще раз.

 

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

что и наша предыдущая функция. Однако, имя, которое нужно

озвучить, не закодировано в функцию, оно передается как

параметр. Эту функцию можно вызывать всякий раз, когда нам нужно

озвучить наше имя. Чтобы вызвать функцию, мы будем использовать

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

 

Script SpeakName ()

SayName ("XXX")

EndScript

 

Когда вызывается функция SayName, строка "XXX", которая представляет

наше имя, передается в функцию через параметр UserName. Теперь у функции

есть эти данные и она может озвучить его как часть сообщения SayString.

 

Функции, которые предоставляют возвраты

 

Теперь давайте рассмотрим функцию, которая предоставляет возврат. Возврат -

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

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

информация затем может быть использована вызывающим скриптом или

функцией. Обратите внимание, что тип возвращаемой информации (то есть,

string, Int, Object, handle, или Void) объявляется перед именем функции.

Следующая функция взята из EXCEL.JSS, файла скриптов для Microsoft Excel.

 

Int Function GetExcelVersion()

var

handle WinHandle

let WinHandle = GetAppMainWindow (GetFocus())

let WinHandle = GetFirstChild (WinHandle)

if (GetWindowClass (WinHandle) == "Excel4") then

return TRUE;This is Excel 97

else

return FALSE; this is Excel95 or earlier

EndIf

EndFunction

 

Вы, вероятно, догадались, что задача этой функции состоит в том, чтобы

определить, находимся мы в Excel 97 или нет. А происходит следующее:

функция выполняет тест, чтобы узнать, находимся ли мы в Excel 97. Если да,

функция возвращает, или посылает обратно, значение True, Истина, обратно в

вызывающий скрипт. Если нет, возвращается значение False, или ложь. Под

возвратом этого значения мы просто имеем в виду, что мы информируем

вызывающий скрипт о результатах определения. Вызывающий скрипт может

потом продолжать и делать что-то другое, в зависимости от того, является

значение True или False, то есть, то есть, находимся ли мы в

действительности в Excel 97 или нет. Вот пример того, как можно вызвать

эту функцию таким образом, чтобы возвращенную информацию можно было

использовать для принятия решения.

 

If GetExcelVersion== true Then

(Block of statements we want to execute if we're in Excel 97)

Else

(Block of statements we want to execute if we're not in Excel 97)

EndIf

 

Другими словами, если GetExcelVersion является истинной, то есть, возвращает

True после своего вызова, то мы выполним один набор утверждений. Если она

не является истинной, то есть возвращает после своего вызова False, то мы

выполним другой набор.

 

Кстати, вам пора выучить сокращение, которое авторы скриптов часто

используют в таких ситуациях, как эта. Следующее утверждение немного

короче, чем If GetExcelVersion== true Then, но оно означает абсолютно то же

самое.

 

If GetExcelVersion Then

 

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

"== true". Оно опускается для удобства, но каждый должен понимать, что

"== true" или "== 1" (которые, как мы теперь знаем, являются эквивалентными

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

 

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

 

Jaws произносит большие буквы, озвучивая их с другой высотой тона.

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

написанными заглавными буквами, сообщение "Все большие" ("all caps"), когда

они произносятся по буквам. Напишите функцию под именем SayAllCaps,

которая будет выполнять следующее:

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

курсор, и это слово и нужно будет проверять. Используйте CurrentWord в

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

вызывающего скрипта.

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

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

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

между ними. Если она найдет, что все буквы являются заглавными, она

должна будет возвратить строку "all caps".

 

Совет: это довольно сложная работа, поэтому мы собираемся дать вам

подсказку. Вы должны будете использовать встроенную функцию,

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

буквы. (это единственная встроенная функция Jaws, которая является

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

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

поскольку дальнейшего тестирования не требуется. Если букв в нижнем

регистре найдено не будет, она должна возвратить строку "all caps". Функция

также должна возвращать нулевую строку, если встретится какое-либо число,

чтобы предотвратить появление сообщения "all caps" на каждой встретившейся

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

выдавать сообщение "All Caps", если курсор находится на пустой строке, или

на знаке препинания, или на любом другом неалфавитном символе. Чтобы

выполнить эту задачу, вы должны знать, что все такие неалфавитные символы

имеют значение меньшее, чем буква A или большее, чем буква Z. Вы должны

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

этому критерию и возвращать нулевую строку, если удовлетворяет.

 

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

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

называется SayWord, который можно найти в DEFAULT.JSS. Вы должны

модифицировать этот скрипт, чтобы он вызывал функцию SayAllCaps в

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

комбинацию клавиш Insert+5 на цифровой клавиатуре. Скрипт SayWord имеет

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

чтобы проверить, не нажали ли вы Insert+5 на цифровой клавиатуре дважды

быстро. Если быстро нажать эту комбинацию клавиш дважды, Jaws получить

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

свой вызов функции SayAllCaps в функцию в нужное место и вызовите ее

с таким расчетом, чтобы она озвучивала строку, возвращенную функцией,

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

нашла, что не все слово написано в верхнем регистре, она вернет нулевую

строку, и таким образом, не скажет ничего. Если функция обнаружила, что

все слово написано в верхнем регистре, она возвратит строку "All Caps",

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


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







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







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