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

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



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

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

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

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

NextParagraph - перемещает активный курсор к началу следующего абзаца.

Если активным является PC курсор, а начало следующего абзаца уже

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

видимым.

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

предложения. Если активным является PC курсор, а начала следующего

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

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

PriorParagraph - перемещает активный курсор к началу предыдущего абзаца.

Если активным является PC курсор, а начала предыдущего абзаца уже не

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

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

предложения. Если активным является PC курсор, а начала предыдущего

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

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

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

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

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

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

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

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

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

управления внутри окна.

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

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

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

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

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

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

символ в активном окне.

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

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

случае, он устанавливается в центре окна. Если активным является PC курсор,

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

перемещается в новую позицию.

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



Порция текста - это раздел, или блок текста, который записывается на экране

за один раз.

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

Порцией текста называется раздел или блок текста, который записывается на

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

 

Обратите внимание, что если вашей целью является прочесть что-нибудь на

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

чтения (Say). Пример этого показан ниже.

 

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

SayLine (); читается строка, на которую поместился курсор.

 

Создание скриптов чтения

 

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

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

необходимые шаги:

Сначала, сохраним состояние текущего активного курсора, если это

необходимо.

Теперь переместим активный курсор к конкретной позиции в окне.

Выберем соответствующую функцию чтения.

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

воспользовались функцией SaveCursor.

 

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

чтобы прочитать нижнюю строку окна. В конце каждой строки имеется

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

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

более подробно). В первом скрипте мы переключимся на JAWS курсор,

прочитаем нижнюю строку, а затем оставим JAWS курсор активным в

нижней строке окна.

 

Script ReadBottomLine(); начинает скрипт и присваивает ему имя, ReadBottomLine

JAWSCursor(); активизируем JAWS курсор

RouteJAWSToPC(); переместить JAWS курсор к PC курсору, чтобы быть

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

каком-то другом окне на экране.

JAWSPageDown(); перемещаем JAWS курсор в нижнюю строку окна

JAWSHome(); перемещаем JAWS курсор в начало нижней строки окна

SayLine(); озвучиваем нижнюю строку окна

EndScript; конец скрипта

 

Следующий вариант использует функции сохранения и восстановления

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

 

Script ReadBottomLine(); начинает скрипт и присваивает ему имя, ReadBottomLine

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

InvisibleCursor(); активизируется невидимый курсор

RouteInvisibleToPC(); перемещает невидимый курсор к PC курсору, чтобы он

был в нужном окне

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

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

SayLine(); озвучиваем нижнюю строку окна

RestoreCursor(); восстанавливаем курсор, который мы сохранили, и его позицию

EndScript; конец скрипта

 

Посмотрите, как все это работает! Вы могли бы использовать этот скрипт,

чтобы читать строку состояния в Microsoft Word. В строке состояния

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

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

бы подставить функцию SayWord(), после чего NextWord(), и еще одну

функцию SayWord(), вместо функции SayLine(). Тогда вы услышите только

слова: страница и номер.

 

Есть важная тонкость в функциях SaveCursor и RestoreCursor, и эту тонкость

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

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

SaveCursor. Кроме того, если активными являются JAWS курсор или

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

также сохраняется, а затем восстанавливается функцией RestoreCursor.

Курсоры, которые активизируются и перемещаются после того, как была

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

первоначальном типе или позициях. Таким образом, в вышеприведенном

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

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

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

RestoreCursor в одном скрипте. Эти утверждения будут "вкладываться", во

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

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

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

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

SaveCursor, то сохранена будет позиция второго курсора, когда SaveCursor

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

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

вы выполняете два утверждения SaveCursor, а затем выполняете RestoreCursor,

сначала будет восстановлен второй сохраненный курсор. Чтобы вернуть

первый SaveCursor, вы должны выполнить RestoreCursor во второй раз.

Следующий пример иллюстрирует вложение вызовов функции SaveCursor:

 

Script ReadBottomLine (); начинает скрипт и присваивает ему имя

ReadBottomLine

SaveCursor (); мы не знаем, какой курсор был активным, но мы сохраняем

его и его положение

InvisibleCursor (); активизируется невидимый курсор

SaveCursor (); сохраняет невидимый курсор и его положение

RouteInvisibleToPC (); перемещает невидимый курсор к PC курсору, так чтобы

тот находился в нужном окне

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

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

SayLine (); озвучивается нижняя строка окна

RestoreCursor (); восстанавливается невидимый курсор и позиция, которую мы

сохранили

RestoreCursor (); восстанавливается первоначальный курсор пользователя и

положение, которое мы сохранили

EndScript; конец скрипта

 

Наконец, если вы используете SaveCursor () в скрипте, Jaws автоматически

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

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

пользуетесь функцией SaveCursor () в скрипте. Если вы использовали

несколько утверждений SaveCursor (), Jaws автоматически вернет их на свои

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

забудете поместить все положенные утверждения RestoreCursor ().

 

Соединяем все вместе

 

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

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

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

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

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

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

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

выполняйте все шаги:

Запустите диспетчер скриптов, выбрав его в меню Jaws Utilities.

Нажмите Insert+Q чтобы убедиться, что настройки диспетчера скриптов

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

для диспетчера скриптов - jscript.exe. Это, конечно, означает, что текущим

файлом, контролирующим Jaws, является jscript.jss.

Чтобы загрузить этот файл, чтобы вы могли его отредактировать, войдите в

меню "Файл", нажав ALT+F, нажимайте стрелку вниз, пока не дойдете до

пункта "open" и нажмите Enter. В поле редактирования, введите имя файла

jscript.jss и нажмите Enter.

Наконец, нажмите Ctrl+End чтобы поместить курсор в конец файла скриптов,

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

 

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

посмотреть, что мы хотим узнать от нашего скрипта.

 

Диспетчер скриптов имеет строку состояния в нижней строке окна, которая

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

файле. Мы хотим, чтобы наш скрипт сообщал нам только номер текущей

строки.

 

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

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

вручную.

 

Сначала активизируйте Jaws курсор.

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

Home, чтобы встать в начало строки.

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

слово, и вы услышите слово "for". Воспользуйтесь командой "Следующее

слово" (Insert+^ на цифровой клавиатуре), чтобы прочесть строку слово за

словом. Теперь вы знаете, что пятое слово на этой строке является номером

текущей строки. Теперь мы знаем, что должен делать наш скрипт: он должен

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

слово. Ладно, активизируйте снова PC курсор, и мы начнем.

 

В меню Script (скрипт) выберите New script (Новый скрипт). Появится диалог

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

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

поле имени скрипта. Наберите SayLineNumber. Буквы S,L и N должны быть

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

 

Нажмите Tab, чтобы переместиться к блоку проверки Can be attached to key

(может быть закреплен за клавишей) и нажмите пробел, чтобы включить его.

Позже мы закрепим наш скрипт за клавишей.

 

Нажмите Tab, чтобы переместиться к полю Synopsis и наберите "читает номер

текущей строки"

 

Нажмите Tab, чтобы переместиться к полю Description?описание% и наберите

"строку, которая содержит PC курсор".

 

Нажмите Tab, чтобы переместиться в поле "Category" (категория) и наберите

"Say", потому что наш скрипт будет что-то говорить.

 

Нажмите Tab, чтобы переместиться в поле Assign To (закреплен за) и

нажмите Shift+Ctrl+L, чтобы закрепить эту комбинацию клавиш за скриптом

SayLineNumber.

 

Больше нам никаких полей заполнять не надо, поэтому нажмите Enter, чтобы

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

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

 

Теперь у нас есть скрипт с утверждением begin с именем скрипта и

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

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

пустых строк. Нажимайте клавишу "Стрелка вверх", пока не окажетесь на

первой пустой строке скрипта.

 

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

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

скриптов Insert Function (Вставить функцию).

 

Выберите Insert Function Call (вставить вызов функции) в меню Скрипт или

воспользуйтесь горячей клавишей Ctrl+I. Появляется диалог вставки функции

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

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

помощью клавиши Tab можно переместиться в этот список и с помощью

клавиш-стрелок найти ту, которая вам нужна, но это не очень-то эффективно,

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

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

 

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

курсора и его положения. Функция будет SaveCursor(), но нам нужно будет

нажать только букву S, после чего инструмент Insert Function начнет искать

сразу же, как только вы начнете набирать. SaveCursor() - это первая функция,

которая начинается с буквы S. Обратите внимание, что как только фокус

переместился к SaveCursor(), было прочитано сообщение-подсказка,

объясняющая, как используется эта функция. Нажмите Enter, и функция

поместится в наш скрипт. Просто, не правда ли?

 

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

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

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

пользоваться Jaws курсором. Нажмите Enter, чтобы вставить новую строку, а

затем снова CTRL+I.

 

На этот раз нам нужна функция InvisibleCursor(). На этот раз нам придется

набрать две буквы, поскольку InvisibleCursor() - это не первая функция,

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

услышать, какая функция высвечивается. Как только вы услышите

InvisibleCursor(), нажимайте Enter, чтобы вставить ее в наш скрипт.

 

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

функции, в таком порядке:RouteInvisibleToPC (), JAWSPageDown(),

JAWSHome(), NextWord() 5 раз, SayWord() и RestoreCursor().

Нажмите CTRL+S, чтобы скомпилировать файл скриптов. Если вы не сделали

ни одной ошибки, вы услышите сообщение "compile complete" (компиляция

завершена). Если вы этого не услышали, повторите предыдущие процедуры,

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

диспетчер скриптов поместит курсор примерно в то место, где, по его мнению,

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

 

Теперь проверьте свою работу, нажав Ctrl+Shift+L, чтобы услышать номер

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

целой строки, вместо отдельного слова. Затем добавьте сообщение "Строка

номер" перед тем, как будет фактически озвучен номер строки. Когда вы

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

"Создание сложных файлов скриптов", или перескакивайте и напишите

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

 

Домашнее задание № 2.

 

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

окон имеют три состояния: свернутое, распахнутое и восстановленное. В

правом верхнем углу большинства окон есть три кнопки. Первая - свернуть, а

последняя - закрыть. Средняя может быть либо "распахнуть", либо

"Восстановить", в зависимости от текущего состояния окна. Переместившись к

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

произносится "Restore Symbol", (Символ восстановить), то окно распахнуто.

Если озвучивается "Maximize Symbol" (символ Распахнуть), то окно является

восстановленным. Ваше задание - написать скрипт для файла скриптов по

умолчанию default.jss, который будет читать эту кнопку. Конечно, чтобы

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

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

прекрасным примером. После того, как вы напишете этот скрипт, вы сможете

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

хотим, чтобы в этом задании вы использовали Jaws курсор, и вы должны

убедиться, что Jaws курсор возвращет на прежнюю позицию к тому времени,

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

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

когда скрипт выполнен.

 

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

скриптов из меню утилит окна Jaws, а затем загрузить default.jss.

Альтернативным способом проделать это является нажатие CTRL+SHIFT+0 на

основной клавиатуре. Автоматически откроется диспетчер скриптов и

загрузится файл default.jss. Добавьте свой скрипт в конец этого файла.

 

Один возможный ответ можно посмотреть в главе?, но не делайте этого,

пока не попытаетесь сами написаать этот скрипт.

 

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

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

более разумным. Вместо того, чтобы просто читать символы Maximize и

Restore, используйте If-Then, ElIf, Else, GetWord, и функции SayString чтобы

решить, каково состояние окна и какое сообщение нужно читать. Если окно

показывает символ "Восстановить", пусть скрипт говорит "распахнуто", а если

показан символ "Восстановить", пусть скрипт говорит "Восстановлено". Если ни

одного из этих двух символов найдено не будет, пусть он скажет "НЕ могу

найти символы". Намек - графика, имеющая ярлыки, такая, как символы

восстановления или распахивания, может интерпретироваться как текст, и ее

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

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

 

Домашнее задание №3

 

И просто для смеха, вот вам третье домашнее задание. Windows поставляется

с программой звукозаписи, которая называется Фонограф. Обычно эту

программу можно найти в папке Multimedia папки "дополнительные

возможности" в главном меню. Откройте ее, и поизучайте ее окно с помощью

Jaws курсора, если вы не знакомы с этой программой. Вы обнаружите

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

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

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

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

воспользовавшись диалогом "Открыть" в меню "Файл". (вы найдете много.wav

файлов в папке C:\WINDOWS\MEDIA. Щелкните кнопку Play, чтобы начать

проигрывание, затем щелкните кнопку Stop до того, как файл будет проигран

до конца. (если вы предпочитаете пользоваться клавиатурой для этих

процедур, горячими клавишами для этих функций являются CTRL+P и

CTRL+S соответственно). Если вы теперь посмотрите на счетчик прошедшего

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

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

написаали скрипт для файла скриптов этого приложения (SNDREC32.JSS),

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

Сообщение должно быть в форме "текущее время X секундс, из Y секунд".

Значения X и Y нужно бтать с дисплея счетчика фонографа, а остальная

часть сообщения должна быть создана с помощью утверждений SayString. Для

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

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

 

Часть II

 

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

 

Структура программ Windows

 

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

class) и ручка окна (handle) в дискуссиях о том, как структурированы

программы Windows. Что же означают эти термины? В этом разделе мы

объясним иерархию окон, идентификацию и структуру, так что вы сможете

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

объекты.

 

Вопрос первый: что такое окно? Ну, это кажется простым. Программы

работают в окнах. Даже Jaws имеет свое окно. Это верно. Окно Jaws - это

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

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

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

программах, это правило не всегда соблюдается. Программист может создать

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

окнами. Доступ к таким программам осуществлять труднее всего, поскольку

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

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

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

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

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

правда ли? Давайте посмотрим, сможем ли мы с этим разобраться.

 

Иерархия

 

Большинство людей, работающих в среде Windows, что же в действительности

означает слово "окно" в отношении этой среды. Они, конечно, понимают, что

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

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

окном текстовую область своего текстового редактора, но окно - это нечто

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

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

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

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

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

случайным, с их помощью осуществляется взаимодействие со специальной

иерархией, которая позволяет операционной системе Windows и программисту,

который в ней работает, отслеживать все эти окна. Все это станет более

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

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

Рабочий стол вашего компьютера является родительским окном для всех окон

приложений. Это означает, что окно Jaws, окно вашего текстового редактора,

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

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

рабочего стола, на том же логическом уровне.В этом смысле все они равны

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

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

окнами на одном и том же уровне.

 

Ладно, давайте перейдем на следующий уровень. Текстовый редакторимеет

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

инструментов и строка состояния. Все они являются детьми окна текстового

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

Начинает проясняться? Когда вы просите открыть файл в текстовом редакторе,

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

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

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

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

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

являются детьми родительского диалога и находятся на одном и том же

логическом уровне.

 

Каждое окно является дочерним по отношению к окну, находящемуся на один

уровень выше, которое его открыло или сгенерировало, и каждое окно

является родителем в отношении окон, находящихся уровнем ниже, т.е. окон,

которое открыло это окно.

 

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

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

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

DOS, или в Проводнике Windows. На вашем диске, скажем, диске C, C:\

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

находящиеся на один уровень ниже C:\, являются детьми этого родителя и

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

поддиректории с именами Eudora, JFW33, Myljcuments, Recycled и Windows,

все они будут находиться на один уровень ниже от c:\. Все они являются

прямыми детьми C:\ и все они находятся на один логический уровень ниже.

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

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

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

Вспомните, мы сказали, что команды "Предыдущее окно" и "Следующее окно"

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

уровне? Так вот, в отношении дерева каталогов, это может означать

перемещение к предыдущей директории или к следующей директории в дереве

каталогов. Если мы откроем поддиректорию JFW33, мы увидим 4 новые

поддиректории - Help, Cettings, Manuals и Tecnotes. Все эти 4 поддиректории

находятся уровнем ниже JFW33, являются детьми JFW33 и все они находятся

на одном логическом уровне, и находятся на два уровня ниже, чем c:\.

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

нижнего уровня конкретной ветви. Структура окон "родитель-дитя" работает во

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

дерева, и им порождаются дочерние окна. Все окна уровнем ниже

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

уровне, уровнем ниже относительно родителя. Каждое из этих окон-детей

может само порождать детей, и эти дети будут находиться на три уровня

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


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







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







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