
- •Часть I: начало работы со скриптами
- •3.3 В Jaws for Windows появилась возможность загружать файлы
- •Void, если вам не нужно, чтобы ваша функция возвращала какое-либо
- •Insert Function Call - выводит диалог вставки функции, который
- •Insert PerformScript (вставить выполнение скрипта) - при выборе этой
- •InvisibleCursor() - активизирует невидимый курсор.
- •InvisibleCursor() ; активизируется невидимый курсор
- •InvisibleCursor () ; активизируется невидимый курсор
- •InvisibleCursor(), нажимайте Enter, чтобы вставить ее в наш скрипт.
- •Часть II
- •Include "hjglobal.Jsh"
- •IntVar на 1)
- •If (nAttributes & attrib_highlight) Then
- •Visual Basic.
- •If GetExcelVersion Then
- •If (nAttributes & attrib_highlight) then
- •1. Используйте комментарии, комментарии и еще раз комментарии!
- •InvisibleCursor() - активизирует невидимый курсор.
- •2. Диспетчер скриптов проверяет .Jsd файл на наличие строк
- •Include файлы проверяются, когда они включаются. Всегда ставьте
- •If (IsSameScript ()) Then
- •Import Macro File: используется для импорта файла макроса из ранних версий
- •If (GetAttributes() & attrib_underline) then ... (более подробное описание
- •VerbosityLevel - контролирует количество информации, произносимой jfw,
If (nAttributes & attrib_highlight) Then
На первый взгляд, это очень странное утверждение. Переменная nAttributes
является параметром, который вносит информацию об атрибуте в функцию
NewTextEvent, когда на экране появляется новый текст. Таким образом, если
этот текст выделен цветом, nAttributes будет иметь значение 01000000. Если
текст выделен жирным шрифтом, переменная будет иметь значение 00000010.
Если текст выделен курсивом и жирным шрифтом, nAttributes будет иметь
значение 00000110. Если он выделен цветом, курсивом и жирным шрифтом,
она будет иметь значение 01000110. Каждую позицию в nAttributes можно
представить в виде переключателя, который включает и выключает один из
возможных атрибутов. Ну, мы уже знаем, что ATTRIB_HIGHLIGHT имеет
значение 01000000, так что вышеприведенная строка кода говорит, что
возьмите nAttributes и сравните его, используя поразрядный оператор, с
константой Attrib_highlight. Если совпадение есть, верните назад сообщение 1
для каждого положения бита, которое совпадает. Если мы сравним, например,
текст, который является выделенным цветом, подчеркнутым и жирным
шрифтом (nAttributes = 01000110) поразрядным способом с ATTRIB_HIGHLIGHT
(01000000), то мы вернем значение 01000000. Это означает, что утверждение
If-Then возвращает значение True, или 1 для седьмой позиции справа, той,
которая указывает, является ли текст выделенным, и NewTextEvent узнала,
что текст, который появился на экране, действительно является выделенным.
Поэтому текст будет обрабатываться как выделенный текст. Тот факт, что
этот текст также выделен курсивом и жирным шрифтом также истинен, но
для данного теста это не имеет значения. Вышеприведенное утверждение
If-Then проверяет только то, является ли бит выделения истинным или 1, и
эта информация посылается в скрипт NewTextEvent.
Кроме того, есть еще один поразрядный оператор, который
выполняет операцию Или, вместо операции И. Этот оператор
обозначается единичным символом | чтобы отличить его оператора
Или, который обозначается двойным символом, ||. Когда вы
используете поразрядный оператор Или, значение True возвращается
в том случае, если любой из бит, или они оба, которые участвуют
в сравнении, равны единице. Таким образом, сравнение двух
бинарных чисел 0101 и 0010 вернет значение 0111. Аналогичным
образом, сравнение чисел 0100 и 0001 вернет значение 0101. Таким
образом, поразрядный оператор Или удовлетворяется, если любое из
чисел имеет 1 в конкретной позиции.
Hook функции
Иногда бывает необходимо перевести Jaws в измененное состояние,
когда некоторые, или все клавиши на клавиатуре выполняют
функции, которые отличаются от обычных. До некоторой степени мы
уже знакомы с этим понятием. Вы можете переключать такие
настройки, как Эхо экрана, эхо клавиатуры и состояние Home Row,
последний режим будет описан позже. Эти типы переключений
возможны потому, что Jaws имеет встроенные функции, которые
могут вызываться скриптами, чтобы переключать эти состояния
определенным образом. Однако, Jaws также содержит две функции,
которые позволяют вам изменять состояние системы сообразно вашим
нуждам. Это функции AddHook () и RemoveHook (). В общих чертах
происходит примерно следующее: если вы устанавливаете hook,
вызвав функцию AddHook () из скрипта, мы говорим, что hook
помещен. Когда вы используете функцию AddHook, вы даете ей имя
хука. Этот хук является специальной функцией, определяемой
пользователем, которую вы должны создать, и которая должна
выполняться вместо кода, обычно выполняемого скриптами Jaws.
Когда хук на месте, он вызывается прямо перед выполнением
каждого скрипта, и передает имя текущего скрипта и фрейма в
качестве двух своих параметров. Поскольку хук функция фактически
вызывается Jaws, когда он на месте, а не скриптом, эти параметры
предоставляются внутренним кодом Jaws, а не вызовом функции.
Если хук возвращает истину, скрипту разрешается выполняться.
Если хук возвращает ложь, скрипту не позволяется выполняться.
Таким образом, если хук на месте, и мы разработали хук таким
образом, что он будет возвращать ложь, пока он на месте, скрипт,
закрепленный за клавишей, которую мы нажали, работать не будет,
и мы можем заставить хук функцию сделать что-то другое. Вы
можете, если хотите, разработать хук, который будет заставлять
каждую клавишу, закрепленную за скриптом Jaws, воспроизводить "У
маленькой Мэри жила-была овечка" вместо того, чтобы выполнять
нормальные функции Jaws. Ну, сейчас в этом особой пользы нет, но
было бы здорово, если бы у вас был такой хук и вы бы его
включали всякий раз, когда вы позволяете своему другу
воспользоваться вашим компьютером! Но давайте рассмотрим более
полезную хук функцию, KeyboardHelpHook.
Как вы теперь, вероятно, знаете, вы можете включить помощь по
клавиатуре, нажав Insert+1. Когда вы это делаете, каждая клавиша
начинает воспроизводить свои функции, если она закреплена за
каким-либо скриптом Jaws, вместо того, чтобы реально выполнять
эти функции. Когда вы снова нажимаете Insert+1, клавиатура
возвращается к выполнению функций, вместо того, чтобы выдавать
описания. А вы когда-нибудь задумывались, как это сделано? А
сделано это с помощью хук функций. Давайте рассмотрим скрипт
KeyboardHelp и функцию KeyboardHelpHook чтобы посмотреть, как
выполняются эти задачи.
Script KeyboardHelp()
SayString (msg401) ; "Keyboard Help on". Сообщается, когда вы в
первый раз нажимаете Insert+1.
let nKeyboardHelpSavedTypingEcho =
GetJcfOption(OPT_TYPING_ECHO); сохраняет текущую настройку эха
клавиатуры.
SetJcfOption(OPT_TYPING_ECHO,1) ;Эхо клавиатуры символы. Помощи
по клавиатуре необходимо, чтобы эхо клавиатуры находилось в
режиме "символы".
AddHook (HK_SCRIPT, "KeyboardHelpHook") ;добавляет хук по имени KeyboardHelpHook.
TrapKeys(TRUE) ;юудучи истинной, эта функция заставляет Jaws
игнорировать любые клавиши, не закрепленные за скриптами
EndScript
Происходит следующее: озвучивается сообщение, оповещающее вас,
что помощь по клавиатуре включена, сохраняется текущее состояние
эха клавиатуры, эхо клавиатуры переводится в режим "Символы",
чтобы помощь по клавиатуре функционировала должным образом, и
устанавливается KeyboardHelpHook. Кроме того, TrapKeys
устанавливается в значении True, поэтому клавиши, не связанные
со скриптами Jaws, или фреймами, будут игнорироваться. (Вы не
можете назначить подсказку на клавишу, с которой не
ассоциировано скриптов Jaws или фреймов). Также, пожалуйста,
обратите внимание,что функция AddHook требует два параметра.
Первый, HK_SCRIPT, это константа, заданная в HJCONST.JSSH, вы
должны использовать для каждой AddHook. Второй - это имя хука,
который вы устанавливаете. Так что теперь любая клавиша,
связанная с функцией Jaws, не будет выполнять свою функцию, а
будет вызывать функцию KeyboardHelpHook, показанную ниже.
Void Function KeyboardHelpHook (string ScriptName, string FrameName)
if (ScriptName == "KeyboardHelp") then ;если мы нажимаем
Insert+1 когда хук установлен, это означает, что мы хотим
выключить помощь по клавиатуре.
SayString(msg402) ; "Keyboard Help off"
RemoveHook
(HK_SCRIPT, "KeyboardHelpHook") ;хук удаляется
TrapKeys(FALSE) ;теперь клавиши снова будут распознаваться.
SetJcfOption(OPT_TYPING_ECHO,nKeyboardHelpSavedTypingEcho) ;
восстанавливается первоначальное состояние эха клавиатуры.
return FALSE ;несмотря на то, что мы отключили хук, нам лучше
еще раз вернуть ложь, или скрипт Insert+1 запустится снова и
снова установит хук.
EndIf
Оставшаяся часть функции, как показано ниже, решает, что
говорить, в зависимости от того, привязана ли клавиша к клавише
или к скрипту, и нажата клавиша один раз или дважды. Внимательно
изучите этот код, пока не поймете его досконально. Если у вас
будут проблемы с пониманием if-then-else утверждений, прочитайте
следующий раздел о контроле переполнения, затем вернитесь назад
и изучите этот скрипт снова.
if IsSameScript () then
if ((FrameName != "") && (GetFrameDescription (FrameName) != "")) then
SayString (msg420) ; "This frame "
SayString (GetFrameDescription (FrameName))
EndIf
if (FrameName == "") then
SayString(GetScriptDescription(ScriptName))
EndIf
else
SayString (GetCurrentScriptKeyName ()) ; says key name, "INSERT+UP ARROW"
if (FrameName != "") then
SayString (msg421 + FrameName) ; "says the content of the frame "
SayString (GetFrameSynopsis (FrameName))
else
SayString (ScriptName) ; will say the name of the script, "SayLine"
SayString(GetScriptSynopsis(ScriptName))
EndIf
EndIf
return FALSE ;Prevent the script from running since we only want the help message.
EndFunction
Знакомство с написанием скриптов
с объектами Microsoft
Если вам довелось прочитать какой-нибудь скрипт для Microsoft
Word или Excel, вы, вероятно, наталкивались на очень странный
код, который не похож ни на какие блоки построения скриптов, о
которых мы говорили до сих пор. Этот код содержит такие слова,
как Selection, Range, Text, Collapse, отделенные друг от друга
точками. Если вы не знакомы с объектно-ориентированным
программированием с использованием таких языков, как Visual
Basic и C++, этот тип кода будет совершенно непонятным. Так что
же это за штука и что она делает среди скриптов Jaws? Чтобы
пояснить, нам придется ввести три новых понятия - объекты,
методы и свойства.
Объект - это самостоятельный конструкт, который обладает в себе
некоторым числом характеристик или атрибутов, которые задаются
как свойства объекта. Объект также обладает некоторым числом
техник или функций, которые могут делать так, чтобы с объектом
что-нибудь происходило, или которые позволяют объекту выполнять
некоторое действие, и они называются методами объекта. Свойства
можно использовать, чтобы возвращать информацию об объекте
обратно во внешний мир, и они также могут использоваться для
изменения качеств или атрибутов объекта. Эту информацию можно
передать другому методу или свойству для дальнейшей обработки,
или обратно в язык скриптов Jaws, чтобы использоваться для
обработки скрипта. Таким образом, объект содержит в себе все
атрибуты и свойства, равно как и все процедуры или методы,
которые можно использовать, чтобы с объектом что-нибудь
произошло, или с их помощью можно вернуть из объекта информацию.
Определенные свойства предназначены и для чтения, и для записи,
что означает, что их можно как просматривать, так и изменять
некоторым заданным способом, некоторые свойства только для
чтения, что означает, что вы можете определить, что это за
свойство, но его нельзя изменять, а некоторые свойства только
для записи, что означает, что их можно изменять, но нельзя
просматривать. Процедуры объекта являются специфичными для этого
объекта и используются только внутри объекта. Они не
используются на других объектах. Именно это мы имеем в виду,
когда говорим, что объект содержит в себе все необходимое. Он
обладает всеми устройствами, необходимыми для его изменения
всеми возможными способами, которыми ему разрешено изменяться, и
чтобы возвращать информацию о себе во внешний мир.
Так почему же мы так заботимся об этих объектах? Есть некоторые
вещи, которые пользователи любят уметь делать, как, например,
читать и перемещаться по предложениям или абзацам, а не просто
по строкам. К сожалению, в большинстве текстовых процессоров
добиться этого довольно трудно, поскольку они не предусмотрены
для навигации в такой манере. Кроме того, мы должны помнить, что
программа доступа к экрану по определению читает то, что видимо
на экране, и если часть предложения или абзаца, который мы
пытаемся прочитать, находится за экраном, обычно он не сможет
получить доступ к этой части материала без прокрутки экрана. Но
пользователь может не захотеть этого делать, поскольку,
например, он находится в процессе редактирования, и ему не
хочется перемещать курсор. Объекты предоставляют нам средства,
чтобы выполнить эту задачу, поскольку объект,представляющий
данный документ, содержит все процедуры и свойства, необходимые
для того, чтобы сообщить информацию, необходимую Jaws. Microsoft
решил выставить эти "объекты автоматизации" на всеобщее
обозрение, в некоторых своих приложениях, таких, как Office 97
Suite, и Jaws, исследуя и манипулируя этими объектами, может
выполнить некоторый спектр желательных задач, описанных выше. По
сути дела, Jaws временно становится программой доступа к
объектам, а не только программой доступа к экрану. Термин
"Объект автоматизации" ("automation object") здесь используется,
чтобы показать объект, выставленный на всеобщее обозрение, так
что другие агенты, как например Jaws, могут иметь доступ к таким
объектам. Приложения, которые не используют некоторый вид модели
объекта, описанную здесь, для своего кодирования, или не
показывают эти объекты для внешнего мира, не могут быть
доступными с помощью этой технологии. Таким образом,
использование объектов для улучшения чтения экрана ограничено
некоторыми приложениями Microsoft, или любым приложением,
которое решает показать эти объекты автоматизации(или
автоматические объекты, не знаю, как лучше. Прим. пер.).
К сожалению, в задачу данного руководства не входит
предоставление всего необходимого знания и обучение всем
необходимым методам, необходимым для использования объектов в
написании скриптов. По сути дела, для тех, кто не знаком с
объектно-ориентированным программированием, эта задача,
вероятно, потребовала бы составить руководство, более длинное
чем все данное руководство по языку скриптов. Здесь мы просто
хотим познакомить вас с предметом, чтобы объекты, процедуры и
свойства, которые появляются в скриптах Jaws, не казались вам
чем-то совсем уж таинственным, и предоставить некоторую справку,
чтобы те, кому очень уж хочется продолжить, могли изучить этот
вопрос самостоятельно.
В этом пункте стоит прочитать раздел из помощи по Microsoft
Visual Basic, который поставляется с Microsoft Office. Читатель
должен обратить внимание, что синтаксис в примерах
программирования,
использованный в этих и других извлечениях, выглядит иначе, чем
кодирование, которое можно увидеть в скриптах Jaws. Так
происходит потому, что примеры полностью являются кодом на
Visual Basic, тогда как в скриптах Jaws, можно только вызвать
процедуры и получить значение свойств. Другие операции Visual
Basic, такие, как использование ключевых слов, не допускаются.
Понимание объектов, свойств и процедур
Объекты являются фундаментальными строительными блоками в Visual
Basic. Почти все, что вы делаете в Visual Basic, включает
модификацию объектов. Каждый элемент документов Word, таблицы,
абзацы, закладки, поля и так далее, могут быть представлены
объектом в Visual Basic.
Что такое объекты и коллекции?
Объект представляет элемент Wordа, такой, как документ, абзац,
закладка или просто символ. Коллекция - это объект, который
содержит несколько других объектов, обычно одного и того же
типа; например, все объекты закладок в документе содержатся в
одном объекте коллекции. Используя процедуры и свойства, можно
модифицировать одиночный объект или всю коллекцию объектов.
Что такое свойство?
Свойство - это атрибут объекта, или аспект его поведения.
Например, свойства документа включают его имя, содержание и
статус сохранения, а также то, является ли включенным
отслеживание изменений. Чтобы изменить характеристики объекта,
вы изменяете значение свойств. Чтобы установить значение
свойства, поставьте точку после ссылки на объект, затем имя
свойства, знак равенства затем новое значение свойства.
Следующий пример включает статус отслеживания изменений в
документе под именем mydoc.doc.
Documents("MyDoc.doc").TrackRevisions = True
В этом примере Documents ссылается на коллекцию открытых
документов, а имя "MyDoc.doc" идентифицирует один документ в
коллекции. Свойство TrackRevisions задается только для этого
документа.
Некоторые свойства задавать нельзя. Раздел помощи для свойства
(property) указывает, можно ли задавать это свойство
(read-write) или его можно только просматривать (read-only).
Вы можете возвратить информацию об объекте, возвратив значение
одного из его свойств. Следующий пример возвращает имя активного
документа:
docName = ActiveDocument.Name
В этом примере ActiveDocument обращается к документу в активном
окне в Wordе. Имя этого документа присвоено переменной docName.
Обратите внимание, что раздел помощи для каждого свойства
указывает, можете ли вы задавать это свойство (read-write),
только просматривать свойство (read-only), или только задавать
(write-only). Браузер объектов в редакторе Visual Basic также
выводит статус чтения-записи в нижней строке окна браузера,
когда выбирается свойство.
Что такое процедура?
Процедура - это действие, которое может выполнить объект.
Например, точно также, как можно распечтать документ, объект
документа имеет процедуру PrintOut. Процедуры часто имеют
аргументы, которые квалифицируют, как выполняется действие.
Следующий пример распечатает первые три страницы активного
документа:
ActiveDocument.PrintOut From:=1, To:=3
В большинстве случаев процедуры являются действиями, а свойства
являются качествами. Использование процедуры приводит к тому,
что с объектом что-то происходит, тогда как использование
свойства возвращает информацию об объекте или приводит к тому,
что качество объекта изменяется.
Возвращение объекта
Большинство объектов возвращаются путем возврата одного объекта
из коллекции. Например, коллекция Documents содержит открытые
документы Word. Вы используете свойство Documents объекта
Application (объекта, находящегося на самом верху иерархии
объектов Word), чтобы возвратить коллекцию Documents.
После того, как вы получили доступ к коллекции, вы можете
возвратить одиночный объект, используя значение индекса в
скобках (это аналогично тому, как вы работаете с массивами).
Значение индекса обычно является числом или именем. Для
дополнительной информации обратитесь к возврату объекта из
коллекции.
Следующий пример использует свойство Documents для получения
доступа к коллекции Document. Число индекса используется для
того, чтобы возвратить первый документ в коллекции Documents.
Затем к объекту Document применяется процедура Close, чтобы
закрыть первый документ в коллекции Documents.
Documents(1).Close
Следующий пример использует имя (указанное как строка (string))
чтобы идентифицировать объект Document внутри коллекции
Documents.
Documents("Sales.doc").Close
Объекты коллекций часто имеют процедуры и свойства, с помощью
которых можно модифицировать всю коллекцию объектов. Объект
Documents имеет процедуру Save, которая сохраняет все документы
в коллекции. Следующий пример сохраняет открытые документы,
применяя процедуру Save:
Documents.Save
Объекту Document также доступна процедура Save, для сохранения
только одного документа. Следующий пример сохраняет документ
под именем report.doc.
Documents.Save
Надеемся, что вам становится ясно, что манипулирование этими
типами объектов является фундаментальным в действиях, которые
происходят в приложениях Microsoft Office, и что манипулируя
этими объектами Jaws может получить желанную информацию из
модели объекта. На самом деле, если вы затратите время, чтобы
научиться писать макросы в Word (что делается просто в подменю
Макро в меню Сервис), вы увидите нечто крайне интересное. (вы
можете получить информацию о том, как писать макро из системы
помощи Windows, если нажмете F1 находясь в Word). Войдите в меню
Указатель и наберите слово Макро. Вам будет представлено
несколько тем, включая создание макросов). Попробуйте написать
макрос, когда будете делать какую-нибудь типичную операцию, как
открытие документа, сохранение документа, или выбор, а затем
удаление какого-либо текста. Затем, после того, как запись макро
будет выключена, вернитесь в подменю Макросы и нажмите Enter на
первой опции, Макросы, или Alt+F8. Вы откроете список
существующих макросов и вам будет предложено их отредактировать.
Выберите опцию "Правка", и вы окажетесь в редакторе Visual Basic
вам будет показана копия вашего макроса. Вы обратите внимание,
что код выглядит так, как объектно-ориентированное
программирование, которое мы только что обсуждали. Это означает,
что все, что вы делаете, работая в этом приложении, делается
посредством доступа к объектам и работы с их процедурами и
свойствами. Таким образом, изучение макросов, которые вы
записали, является одним из способов изучить, как манипулировать
объектами в приложениях Office. Есть еще один полезный способ,
который вы можете использовать, находясь в редакторе Visual
Basic. Если вы нажмете F1 когда курсор вставки будет находиться
на процедуре или свойстве программного кода, появится экран
помощи, который объясняет термин и как он используется. Если у
вас этой помощи нет, это может означать, что помощь по Visual
Basic на вашей системе не установлена. Вы можете установить ее с
установочного диска Microsoft Office, вставив диск в дисковод, а
затем вызвав диалог "Выполнить" главного меню и набрать X/setup,
где X - буква вашего дисковода для компакт-дисков. Когда
появится диалог установки, щелкните кнопку "Добавить/Удалить".
Затем, когда появится список вариантов, выберите одно из
приложений Office, например Word, и перейдите к кнопке "изменить
параметры". Щелкните ее. Вы окажетесь еще в одном списке
вариантов. Выберите пункт "Помощь" и перейдите к кнопке
"изменить настройки" снова. Щелкните ее. Вы попадете в третий
список: выберите опцию "Справка по Visual Basic", а затем
перейдите к кнопке OK и щелкните ее. Щелкайте кнопку OK, пока не
вернетесь на самый верхний уровень списка. Повторяйте процедуру,
пока не установите систему помощи для Visual Basic в каждом
приложении, которое вас интересует. Затем нажмите OK на верхнем
уровне, чтобы закончить установку. Вы можете в любое время
вернуться в редактор Visual Basic, выбрав его в подменю Макро в
меню Сервис, или нажав Alt+F11.
Теперь давайте бросим взгляд на один из скриптов Jaws, который
использует объекты для выполнения своей задачи. В версии 3.2
нажатие клавиши Ctrl и плюса на цифровой клавиатуре, если вы
находитесь в Microsoft Word 8, читает текущий абзац.
Script SayParagraph ()
SaveCursor ()
PCCursor ()
if (GetLine () == "") then
SayString (msge18); "Blank"
else
SayString (GetParagraphContent ())
EndIf
EndScript
Выглядит как совершенно обычный скрипт, который вызывает
определенную пользователем функцию GetParagraphContent ().
Давайте посмотрим на эту функцию.
String Function GetParagraphContent ()
var
object o
let o = oWord.Selection.Paragraphs(1).Range;
return (o.Text);
EndFunction
Из первой строки функции видно, что она возвращает строку и не
нуждается ни в каких параметрах. Вторая строка начинает
объявление наших локальных переменных, а на третьей строке мы
объявляем переменную типа Object под именем o. А затем
начинается смешное. В четвертой строке написано:
let o = oWord.Selection.Paragraphs(1).Range;
Прежде чем мы проанализируем эту строку, мы хотели бы упомянуть о
точках с запятой, которые появляются на концах некоторых строк. Они означают то,
что означали всегда, что все, что написано после них, является комментарием.
Некоторые программисты добавляют эти точки с запятой, чтобы показать
окончание действительного кода в строке, даже если они не помещают после
точки с запятой никаких комментариев. Теперь давайте проанализируем эту
строку слева направо. Слева от знака равенства мы говорим, что собираемся
присвоить некоторое значение переменной o. Первое, что написано справа от
знака равенства, это нечто, называющее себя oWord. oWord - это глобальная
переменная, которая была объявлена в заголовочном файле WINWORD.JSH, и
это переменная типа Object, которая хранит объект application (приложение), а
приложением является Microsoft Word. oWord определена в функции
AutoStartEvent в начале файла скрипта. Вспомните, что эта функция события
отрабатывает автоматически всякий раз, когда загружается Word или когда он
получает фокус системы. Код в функции AutoStartEvent, написанный
программистами из Henter-Joyce, устанавливает указатель на Word, поэтому
Jaws будет знать, где искать объекты приложения. Если бы на этой строке не
было ничего, кроме Let o = oWord, мы бы задали переменную o равной
глобальной переменной типа Object oWord, объекту приложения в целом. Это
не дало бы нам ничего хорошего, если все, что мы хотели сделать, это
прочитать текущий абзац. Поэтому мы намерены найти какой-то способ
извлечь текстуальную информацию этого абзаца из объекта приложения в
целом.
Следующий пункт - это знак точки. Он используется, чтобы разделить
переменные, процедуры и свойства. Затем идет Selection. Это свойство
Selection, и, по сути дела, оно возвращает объект Selection, который содержит
информацию о том, что в данный момент выделено в документе. Если вы
выделили в документе какой-то текст, этот текст будет возвращаться в
объекте Selection. Если ничего не выделено, объект Selection сколлапсируется в
простую точку в курсоре вставки. Вот некоторая информация об объекте
Selection, которая выдается в справочной системе по Visual Basic.
Объект Selection
Представляет выделение в панели окна. Selection может либо охватывать
некоторую область в документе, или сколлапсироваться в курсор вставки.
Обратите внимание, что в панели окна может быть только один объект
Selection, и только один объект Selection может быть активным.
Использование объекта Selection
Используйте свойство Selection, чтобы возвратить объект
Selection.
Все это имеет смысл, если мы подумаем о том, что мы знаем о
выделении текста. Мы знаем, что можно выделить только один блок
текста в данном документе. Таким образом понятно, что может быть
только один объект Selection. Если ничего не выделено, тогда
выделение и объект Selection должны будут сколлапсироваться в
одну точку, курсор вставки.
Также стоит уделить особое внимание последней строке на
последнюю строку вышеприведенной цитаты, "используйте свойство
Selection чтобы возвратить объект Selection". Если свойство
возвращает объект, то этот объект будет иметь то же самое имя,
что и свойство, которое его возвращает. Пожалуйста, имейте это в
виду, потому что альтернативой является полная путаница.
Свойство возвращает объект с тем же именем, но стартовое
свойство не является свойством нововозвращенного объекта. Это
истинно даже несмотря на то, что они имеют одно и то же имя.
Свойство принадлежит предыдущему объекту, тому, с которым
производились операции, а не наново созданному объекту. Новый
объект имеет свой собственный набор процедур и свойств, и они не
включают тот, который создал его.
Итак, давайте еще раз рассмотрим все, что мы имеем. Мы имеем
объект Приложение Word в целом, представленный переменной oWord,
а свойство Selection возвратило объект Selection, который
содержит информацию о том, что в данный момент выделено в
текущем документе.
Далее следует свойство Paragraph. Использование этого свойства
возвращает объект Paragraph. Этот объект содержит информацию об
абзаце, указанном в индексном номере в скобках, который
содержится в объекте Selection, который был возвращен свойством
Selection слева. Вот еще одно извлечение из системы помощи по