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

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



приложений 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 слева. Вот еще одно извлечение из системы помощи по

Visual Basic.

 

Объект Paragraph

 

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

Объект Paragraph является членом коллекции Paragraphs. Коллекция

Paragraphs включает все абзацы в выделении (selection),

диапазоне (range) или документе.

 

Использование объекта Paragraph

 

Используйте Paragraphs(index), где Index является индексным

номером, чтобы возвратить один объект Paragraph.

 

Таким образом, после того, как свойство Paragraph возвратило

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

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

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

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

абзац, а во втором случае индекс (1) объекта Paragraph

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

 

Далее следует свойство Range. Свойство Range возвращает объект

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

в указанном объекте. В этом случае указанным объектом является

объект Paragraph, который был возвращен свойством Paragraph

слева. Range подобен паре закладок. Первая представляет начало

диапазона, вторая - его конец. Объект Range, который

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

Paragraph, будет иметь начальную и конечную точки указанного

абзаца, установленные как диапазон (range). Этот окончательный

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

информацию, которая нам нужна, чтобы озвучить текущий абзац. Вот

еще один отрывок из системы помощи по Visual Basic.

 

Объект Range

 

Представляет непрерывную область в документе. Объект Range

задается начальной и конечной позициями символа. Аналогично

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

используются в процедурах Visual Basic, чтобы идентифицировать

конкретные порции документа. Однако, в отличие от закладки,

объект Range существует только пока работает процедура,

определившая его.

 

Обратите внимание, что объекты Range независимы от выделения. То

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

изменяя выделения. Вы также можете задать в документе несколько

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

только одно.

 

Использование объекта Range

 

Используйте процедуру Range, чтобы возвратить объект Range,

заданный данными начальной и конечной позициями символов.

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

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

 

Set myRange = ActiveDocument.Range(Start:=0, End:=10)

 

Используйте свойство Range чтобы возвратить объект Range,

заданный началом и концом другого объекта. Свойство Range

применяется ко многим объектам (например, Paaragraph (абзац),

Bookmark (закладка) и Wtll (ячейка). Следующий пример возвращает

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

документе.

 

Set aRange = ActiveDocument.Paragraphs(1).Range

 

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

GetParagraphContent, той, которая возвращает информацию в

вызывающий скрипт. Эта строка выглядит следующим образом:

 

return (o.Text);

 

Здесь o является объектом Range, который был возвращен в конце

предыдущей строки, а Text является свойством Text, которое

возвращает действительный текст, который нас интересует, из

объекта Range. (Обратите внимание, что в этом случае свойство

Text возвращает действительный текст, а не объект). Как это было

использовано здесь, свойство Text возвращает плоский,

неформатированный текст диапазона. Наконец-то мы добрались до

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

свойством Range, в этом случае будет текстом текущего абзаца.

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

помощью утверждения return в этой строке кода. Поскольку

свойство Text возвращает строку, мы возвратим строку в наш

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

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

обработку и озвучить текст, который был возвращен.

 

Ключ ко всем этим сложным махинациям состоит в том, что каждый

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

процедуры (как мы сказали примерно в начале этого раздела),и не

может использовать процедуры и свойства других объектов. Чтобы

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

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

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

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

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

которая нам нужна, на более низком уровне в иерархии. Если мы

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

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

системой помощи Visual Basic, и покажем, как ей пользоваться,

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

которого вы начинаете. Однако, прежде чем мы этим займемся,

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

использованные в функции GetParagraphContent, извлекают

информацию, которая нам нужна, из объекта приложения и как

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

информацию, которую мы слышим в конечном итоге. Прежде, чем мы

продолжим, необходимо сделать предупреждение. Эксперимент

включает модификацию файлов WINWORD.JSS и WINWORD.JSB.

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

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

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

что-нибудь напартачите.

 

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

Word 8 и найдите функцию GetParagraphContent. Затем спуститесь к

первой строке после того, как объявлена переменная o. Очень

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

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

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

состоянии. Вы должны вернуться в Word и установить курсор на

первое слово в этом абзаце. Воспользуйтесь горячей клавишей

"Прочитать абзац" (CTRL+Плюс на цифровой клавиатуре) и вы должны

услышать, как будет озвучиваться весь этот параграф. Теперь

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

первую строку этого абзаца. Подтвердите, что вы это сделали,

прочитав выделенный текст с помощью команды Shift+Insert+Стрелка

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

абзаца. Теперь снова воспользуйтесь горячей клавишей "Прочитать

абзац". Вы снова должны услышать, как озвучивается абзац.

Хорошо, мы убедились в том, что функция GetParagraphContent

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

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

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

в диспетчер скриптов и удалите свойство Paragraphs(1) из строки,

которая его содержит. После того, как вы это проделаете, строка

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

 

let o = oWord.Selection.Range;

 

Сохраните и перекомпилируйте файл с помощью команды Ctrl+S.

Вернитесь в Word и поставьте курсор вставки в начало того же

параграфа, который вы читали перед этим. Убедитесь, что не

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

"Прочитать абзац" и посмотрите, что происходит. Как интересно!

Ничего не озвучивается. А почему? Ну, поскольку ничего не

выделено, свойство Selection возвращает объект Selection,

который эквивалентен курсору вставки. Поскольку мы убрали

свойство Paragraphs, свойство Range будет оперировать прямо с

этим объектом Selection, и возвращать объект Range, который

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

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

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

никакого текста, поэтому свойство Text в следующей строке

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

слышим. А теперь выполните еще один эксперимент. Снова выделите

первую строку абзаца с помощью команды SHift+Стрелка вниз, а

потом снова воспользуйтесь командой "Прочитать абзац". На этот

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

происходит потому, что объект Selection, который возвращается

свойством Selection, включает весь выделенный текст, а свойство

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

текста. Свойство Text в следующей строке вернет этот текст,

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

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

Paragraphs обратно в функцию, точно так же, как оно и было, и

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

как положено. Теперь свойство Paragraphs будет снова будет

возвращать объект Paragraph из объекта Selection и поставлять

эту информацию свойству Range. Вы снова будете слышать, как

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

какой-либо текст.

 

И наконец, как мы и обещали, вот некоторые советы относительно

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

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

Приведенные ниже инструкции относятся к Microsoft Word, но

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

приложений, таких как Excel. Предполагая, что справочная система

по Visual Basic установлена, нажмите F1, находясь в Wordе, а

затем нажимайте Ctrl+Tab, пока не попадете на страницу

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

которым является "Справочная система Visual Basic в Microsoft

Word". Откройте эту книгу и спускайтесь к единственной теме,

"Справка по Visual Basic". Нажмите Enter, чтобы открыть эту

тему. Теперь спускайтесь ко второй книге нового списка, которая

называется тоже "Справочная система по Visual Basic в Microsoft

Word". Открывайте эту книгу и спускайтесь к третьему пункту,

который называется "Объекты". Открывайте эту книгу, и вы увидите

алфавитный список книг. Каждая из книг содержит объекты

Microsoft Word, которые начинаются с указанной буквы. Вы можете

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

Спускайтесь к букве "R" и открывайте эту книгу. Первый объект в

этой книге - объект Range. Если вы нажмете Enter на этой строке,

вы получите описание объекта Range, то же самое, которое было

процитировано выше. Вы также обратите внимание, что около

верхней части экрана есть строка, на которой написано "см. также

свойства, процедуры, события". Именно здесь вы можете найти,

какие свойства и процедуры доступны для этого объекта. Щелкните

Jaws курсором кнопку "Свойства" и вам будет представлен список

свойств Range. Спускайтесь к свойству Text, и нажимайте Enter.

Здесь вы можете прочитать о свойстве Text, которым мы

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

функции GetParagraphContent. Таким же способом можно получить

доступ к процедурам Range.

 

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

откроете книгу "A", вы найдете объект, который называется

"Объект Application". Это объект самого верхнего уровня, к

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

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

application. Именно здесь вы вообще начинаете, когда будете

писать скрипты с объектами. Нажмите Enter на этом пункте, и вы

получите информацию об объекте application.Если вы щелкнете на

кнопке "Свойства" в верхней части окна, вы получите список всех

свойств, доступных для объекта application. А знаете что? Этот

список содержит свойство Selection, свойство, которое мы впервые

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

oWord. Все возвращается на круги своя.

 

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

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

доступных, щелкнув или на кнопке "Свойства", или на кнопке

"Процедуры" в верхней части окна описания объекта Application.

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

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

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

Возвращайтесь в алфавитный список книг с объектами и открывайте

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

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

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

Открывайте эту книгу и ищите строку с этим именем. Затем

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

свойств, чтобы выбрать следующие. Повторяйте эту процедуру, пока

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

которая вам нужна.

 

Управление потоком

 

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

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

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

утверждения вообще пропускаются. Типы утверждений, которые

управляют потоком, которые управляют потоком, или

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

ниже. Поток в скрипте бывает трех типов:

 

Последовательный - в этом способе группа утверждений работает по

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

поток является самым простым форматом.

 

Выбор (условный) - в выборе поток действий подходит к развилке

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

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

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

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

процесс называется ветвление.

 

Итеративный - итеративный раздел "зацикливается", то есть,

выполняет одно и то же утверждение или группу утверждений снова

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

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

 

Скрипт может содержать любой из этих способов, или все их

вместе. Давайте рассмотрим каждый из этих видов действий.

 

Последовательный

 

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

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

утверждение действует в свою очередь, начиная в верхней части

скрипта и продвигаясь к утверждению EndScript. Ниже приводится

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

 

Script SayTheAValue()

Var

Int A

Let A = 1

SayInteger (A)

EndScript

 

Выбор (условный)

 

Структура утверждения if-then предоставляет средство выбора

одного пути или другого. Для структуры if нужны три утверждения:

if, then и endif. Давайте начнем с очень простого утверждения

if-then.

 

If (x == 1)

Then

SayString ("You are right")

EndIf

 

Если, и только если переменная A равняется 1, скрипт выполнит

утверждение SayString, и произнесет слова "You are right" (Вы

правы). А вот пример посложнее.

 

If GetWindowName (GetCurrentWindow ()) == "Main"

Then

SayString("In the main window.")

EndIf

 

Функция GetWindowName, и ее параметр, GetCurrentWindow,

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

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

окна является Main, (главное), тогда выполняется функция

SayString. В остальных случаях она игнорируется. Мы выбираем

путь "Then" только в том случае, если условие If является

истинным.

 

Хотя утверждения If и Then по сути являются отдельными

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

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

образом:

 

If GetWindowName (GetCurrentWindow ()) == "Main" Then

SayString("In the main window.")

EndIf

 

Отныне мы будем показывать наши утверждения If-Then именно в

такой форме.

 

В структуре If-Then есть два опциональных утверждения,

утверждения Else и Elif. Каждое из этих утверждений

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

по-разному. Утверждение Else говорит скрипту, что он должен

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

что предшествующее ему условие If является ложным. Например,

 

If GetWindowName (GetCurrentWindow ()) == "Main" Then

SayString("In the main window.")

Else

SayString("Not in a known window.")

EndIf

 

Эта последовательность будет выдавать одно сообщение, если вы

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

вот пример тройного ветвления:

 

If GetWindowName (GetCurrentWindow ()) == "Main" Then

SayString("In the main window.")

Else

If GetWindowName (GetCurrentWindow ()) == "Alternate" Then

SayString("In the alternate window.")

EndIf

Else

SayString("Not in a known window.")

EndIf

 

Здесь мы выдаем одно сообщение, если находимся в главном окне,

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

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

двух окон.

 

Утверждение Elif - это более простой способ сформулировать

ветвь, которая говорит: "делай что-то другое, если истинно

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

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

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

 

If GetWindowName (GetCurrentWindow ()) == "Main" Then

SayString("In the main window.")

ElIf GetWindowName (GetCurrentWindow ()) == "Alternate" Then

SayString("In the alternate window.")

Else

SayString("Not in a known window.")

EndIf

 

Здесь мы снова можем отправиться по альтернативным путям. Если

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

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

Else. Утверждение Elif занимает место утверждения Else, за

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

утверждений Elif, сколько захотите.

 

Утверждения If могут быть вложенными. Это означает, что

утверждение If может быть помещено внутри другого утверждения

If. Это позволяет вам проверять какое-то условие только в том

случае, если существует другое условие. Второе условие If будет

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

Последовательность утверждений внутри второго блока If-Then

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

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

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

пример вложенных утверждений If-Then:

 

If GetWindowName (GetCurrentWindow ()) == "Main" Then

If GetWindowClass (GetCurrentWindow ()) == "Edit" Then

SayString("In the main edit window.")

Else

SayString ("In the main window")

EndIf;Is this an edit window?

Else

SayString ("Not in a known window")

EndIf;Is this the main window?

 

В этом примере сначала мы проверяем, находимся ли мы в главном

(Main) окне.Если да, то мы проверяем, находимся ли мы в окне

редактирования (Edit Window). Если да, то мы говорим, что

находимся в главном окне редактирования (Main Edit Window). Если

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

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

случае, если условие Main является истинным. Обратите внимание,

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

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

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

If-Then.

 

Итеративы

 


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







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







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