Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 487

.pdf
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
441.77 Кб
Скачать

ГЛАВА 6

КОМАНДА ЭКРАННОГО ВВОДА-ВЫВОДА SAY/GET.

Команда представляет содой одно из самых мощных средств ввода - вывода СУБД FOXPRO. Она позволяет:

выполнять ввод/вывод в заданной строке экрана, окна; выполнять вывод на принтер в заданной позиции;

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

Синтаксис:

@<ряд, столбец>

экрана/принтера представляют собой пару чисел X и Y, где X определяет строку экрана/принтера, а Y - колонку. Для видеотерминалов с размером экрана 25 строк x 80 колонок, диапазон X равен 0 - 24, а диапазон Y равен 0 - 79. Диапазоны координат для печатающего устройства определяются размером страницы.

SAY < выр1 >

Если в команде присутствует фраза SAY, указанное в ней < выр1 > выводится в заданных значения координат. Вообще говоря, вывод производится на экран ( что соответствует установленному по молчанию SET DEVICE TO SCREEN), однако информация может выводиться и на принтер: для этого необходимо предварительно выполнить команду SET DEVICE TO PRINT.

GET < пер >

Если присутствует фраза GET, то на экран выводится для редактирования переменная <пер> (или поле базы данных ).

Опция

[ COLOR SHHEME < выр. №5 > I COLOR < список цветных пар2 >]

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

Ещѐ одна «внешняя» характеристика поля - где оно предъявляется - указывается в оп-

ции

[ OPEN ] WINDOW < имя окна >

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

< имя >.

Следующая группа операций описывает форму предъявления данных в поле более де-

тально. Это - шаблон

PICTURE < выр1 >

и функциональный код

FUNCTION < функция 1 >

И та, и другая опция содержит строку символов, обозначающих ту или иную форму пред-

ставления данных.

Коды фразы FUNCTION :

A - только буквы.

B - Выравнивает числа по левой границе.

C - Выводит символ CR ( кредит ) после положительного числа.

D - Редактирует дату в соответствии с форматом, установленным по команде SET DATE. E - Редактирует дату в Европейском ( Британском ) формате.

I - Центрует текст внутри поля.

J - Выравнивает текст по правой границе поля.

K - при установки курсора на поле выделяется контрастным цветом.

L - Выводит незначащие нули ( вместо пробелов ) для чисел.

M< спис > - Определяет список возможных значений, < спис > представляет собой набор элементов, разделѐнных запятыми.

R - Позволяет выводить в шаблоне символы, не являющиеся частью данных и не запо-

минающиеся при выводе.

S < n > - Ограничивает ширину вывода < n > символами, где < n > - положительное чис-

ло.

T - Обрезает конечные пробелы.

X - Выводит символ DB ( дебет ) после отрицательного числа.

Z - Подавляет незначащие нули пробелами.

( - Заключает отрицательные числа в скобки.

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

вбольшие.

^ - Ввод числовых данных с использованием научного синтаксиса. $ - Вывод данных в формате денежной суммы.

Коды шаблонов PICTURE:

A - Допускает ввод только буквы.

L - Допускает ввод только логического значения T, t, F, f.

N - Допускает ввод только букв или цифр.

X - Допускает ввод любого символа.

Y - Допускает ввод только логического Y, y, N, n, преобразовывая y и n в Y и N, соответ-

ственно.

9 - Допускает ввод только цифры в символьных данных, цифры или знака +, -, в число-

вых данных.

# - Допускает ввод только цифры, пробела или знака +, -. ! - Преобразовывает маленькую букву в большую.

$ - Высвечивает денежный знак ( установленный по команде SET CURRENCY ). * - Высвечивает символ ( * ) перед числовыми значениями.

. - Определяет позицию десятичной точки.

,- Разделяет цифры слева от десятичной точки ( например, тысячи, миллионы и т.д.).

Следующие две опции - вспомогательные.

Опция

ENABLE | DISABLE

позволяет «блокировать» поле: запрещает доступ к полю в GET и его изменения.

Оставшиеся четыре опции уже по существу управляют содержанием ввода - вывода.

Опция

DEFAULT < выр2 >

позволяет задать значения по «умолчанию». Если переменная или поле не имели заранее заданного значения , на редактирование будет представлено значение < выр2 > . Если после этого просто нажать Enter, то переменной (полю) будет присвоено это значение. Значение,

помещаемое в <выр2> , должно быть такого же типа, что и переменная в GET.

Опция

RANGE [ < выр №3> ] [, < выр №4 >]

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

И, наконец, последние две опции позволяют задавать действия при работе с полем.

Это

WHEN < вырL2 >

и

VALID < вырL1 > | < выр N4 > [ ERROR < вырC4 >]]

задающие условия входа поля и выхода из него.

Отметим, что сама команда GET не осуществляет ввод. Она лишь предъявляет поле. Чтение осуществляет команда , не менее объемная, чем GET, команда READ.

Обычно команды, обслуживающие экранный ввод-вывод, выглядят следующим образом: сначала следует ряд установок типа SET ...TO, затем последовательность команд

SAY/GET, а затем команда READ.

СОЗДАНИЕ ЭЛЕМЕНТОВ ИНТЕРФЕЙСА

Поскольку большинство опций команды SAY/GET сохраняют своѐ значение, мы будем комментировать только те, которые имеют какую-то специфику именно для данной кнопки или меню.

При создании кнопок могут использоваться дополнительные коды во фразах FUNCTION и PICTURE. Они являются общими для всех кнопок, однако в общей команде SAY / GET не используются. Эти коды следующие:

N / T

- указывает, будет ли выполнение действий с данным объектом завершать команду READ.

Если указано T ( от TERMINATE - прекратить ) -то завершать, если N ( NOT TERMINATE ) -

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

H / V

- горизонтальное ( H - Horisontal ) или вертикальное ( V - Vertical ) размещение однородных объектов ( используется для переключателей). По умолчанию принимается V.

\< -используется для указания «горячих» клавиш, т.е. клавиш, при нажатии на которые будет

осуществляться переход к соответствующему пункту. Ключ \< ставиться перед символом (входящим обычно в строку подсказки), который соответствует желаемой «горячей» клавише.

\\

- используется для подавления соответствующего объекта или одного из однородных эле-

ментов, составляющих объект. Подавление означает, что объект, хотя и будет находиться на экране, для курсора он будет недоступен и его выбор ( редактирование ) производиться не будет. Ключ \\ ставиться перед соответствующим элементом или текстовым сопровождением объекта.

@ ... GET - Контрольные блоки.

Контрольный блок (Check Box) как элемент интерфейса внешне выглядит как пара квадратных скобок, справа от которых высвечивается строка текста.

@ ... GET - радиокнопки.

Радиокнопки - это переключатели, позволяющие выбрать один из возможных вариан-

тов ( одно из возможных состояний - как переключатель каналов в радио).

@ ... GET - Командные кнопки.

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

<Следующий> <Предыдущий> <Первый> <Последний> <Новый>

Сюда же относится и комбинация, которая встречается в FOXPRO невероятное количество раз, и с которой Вы, без сомнения сталкивались

< OK > <Cancel>

Обычно при нажатии на каждую из таких кнопок (т.е. при нажатии Enter, когда курсор стоит на этой кнопке) что-то происходит. Поэтому они и называются командными.

@ ... GET - Невидимые кнопки.

Невидимые кнопки - это область экрана (прямоугольники), при ”нажатии” на которые выполняются те или иные действия.

@ ... GET - Вертикальные меню.

Вертикальными меню (выпадающее меню, всплывающее меню, POPUR-меню) мы уже пользовались: оно выглядит как текст в рамочке с двойной нижней и правой границей,

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

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

@ ... GET - Списки.

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

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

каторы прокрутки позволяют быстро перемещаться по элементам при помощи ”мыши” и

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

ГЛАВА 7

ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА FOXPRO

КОМАНДЫ УПРАВЛЕНИЯ

Команда IF. В зависимости от условия команда выполняет те или иные <команды>,

находящиеся внутри конструкции IF...ENDIF. IF <условие>

<команды>

[ELSE

<команды>]

ENDIF.

Если условие истинно, выполняются все <команды>, следующие от IF до ELSE, если ложно, то <команды> от ELSE до ENDIF. Если необязательная фраза ELSE отсутствует и условие ложно, все внутренние <команды> пропускаются и выполняется команда, следую-

щая за ENDIF. Допустимо вложение друг в друга конструкций типа IF...ENDIF и других структурных команд.

Команда DO CASE. Конструкция DO CASE...ENDCASE решает задачи, аналогичные команде IF, но в ней может быть указано сразу несколько условий, которые последовательно проверяются во всех фазах CASE.

DO CASE

CASE <условие 1> <команды>

CASE <условие 2> <команды>

...

[OTHERWISE

<команды>]

ENDCASE

Если встретилось истинное <условие>, выполняются за ним <команды> до следую-

щей фразы CASE, или OTHERWISE, или ENDCASE, и конструкция завершается. Если ни одно из CASE-условий не истинно, выполняются <команды>, стоящие за фразой

OTHERWISE до ENDCASE, если фраза OTHERWISE отсутствует, не выполняется ни одна команда. Кроме перечисленных команд IF и DO CASE, в СУБД FoxPro имеется очень полез-

ная функция анализа условия - IIF ().

ОРГАНИЗАЦИЯ ЦИКЛОВ

В FoxPro имеются развитые средства организации программных циклов, которые в зависимости от постановки задачи могут быть классифицированы на циклы с условием (ите-

рационные циклы) и циклы с параметром (арифметические циклы).

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

DO WHILE <условие> <команды>

ENDDO

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

<условие> истинно. Если оно ложно или становится ложным, осуществляется переход к ко-

манде, следующей за ENDDO.

В языке FoxPro отсутствует понятие ”метка”, т.е. нет естественной возможности пе-

рейти в другое место программы. Это создает некоторые (кажущиеся) сложности, которые можно преодолеть. Так, если требуется выйти за пределы цикла, необходимо использовать команду

EXIT

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

Следующая команда осуществляет передачу управления в цикле, но в противополож-

ную сторону - в его начало, на саму команду цикла:

LOOP

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

вующих фразе END, и сразу перейти к следующему кругу цикла.

Рассмотренные команды действуют не только в структуре DO WHILE, но и во всех других командах организации циклов (FOR и SCAN).

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

s=0

DO WHILE s<1000

INPUT „ВВЕДИТЕ Х‟ TO x

IF x<0

LOOP

ENDIF

IF x=0

EXIT

ENDIF s=s+x

ENDDO

Отсутствие меток вынуждает программиста обращаться к командам EXIT и LOOP,

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

ве условия ставится какое-либо всегда истинное условие, обычно это просто логическое ”Ис-

тина” (.Т.):

DO WHILE .t.

<команды>

ENDDO.

Цикл с параметром. Арифметический цикл предполагает наличие переменной, огра-

ничивающей число циклов.

FOR <переменная>=<вырN1> TO <вырN2> [STEP <вырN3>] <команды>

ENDFOR

Здесь <переменная> используется в качестве управляющего параметра цикла, для которого

<вырN1> является начальным значением, <вырN2> - конечным, а <вырN3> - шагом измене-

ния <переменной>. Шаг может быть как положительным, так и отрицательным. Если шаг отсутствует, шаг равен 1.

Хотя все параметры FOR допускается менять внутри цикла, это никак не влияет на число циклов или значение переменной. Исключение составляет сама <переменная>, изме-

нение которой влечет изменение числа циклов. В цикле FOR могут включаться команды

EXIT и LOOP. Допускается также использование вместо команды ENDFOR команды NEXT (как в Бейсике).

ГЛАВА 8

ОРГАНИЗАЦИЯ МЕНЮ В FoxPro

Меню является основной формой диалога в прикладных системах обработки данных.

Система FoxPro позволяет организовывать меню как с помощью светового курсора, так и с

помощью клавиш, их принято называть световым и клавишным меню соответственно. Кроме того, в среде FoxPro есть еще кнопочное (Button) меню. Термин "кнопка" означает не физи-

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

щие свойства: если поставить на нее курсор мыши и щелкнуть ее кнопкой, то что-то про-

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

темных диалогах существуют кнопки, недоступные световому курсору (например, в диалоге формирования структуры базы данных - кнопки <Insert> и <Delete>).

СВЕТОВОЕ МЕНЮ

Световое меню представляет собой перечень элементов меню, среди которых один текущий "подсвечен" ( отображен иным светом, чем другие пункты меню). Перемещение светового курсора осуществляется клавишами управления курсором, выбор - нажатием Enter,

отказ от выбора - клавишей Escape.

Обычно световое меню дублируется клавишным: как правило, нажатие первой буквы в пункте эквивалентно выбору этого пункта. Правда, когда некоторые пункты меню начина-

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

виши. Если в строку меню включены символы " \< " , то символ, стоящий справа от них, бу-

дет выделен цветом. Он-то работает "горячей" клавишей. Нажимая клавишу с эти символом,

мы можем сделать выбор без нажатия ENTER.

Если пункт в меню начинается символом "\", то он будет отображаться на экране при-

глушенным цветом и не будет выбираться. Если пункт меню состоит из двух символов "\-",

то ему в меню соответствует горизонтальная линия. Использование этих элементов позволя-

ет группировать зрительно пункты меню, разделяя их горизонтальными линиями "\-", и да-

вать их подзаголовки ("\").

Среда FoxPro позволяет строить два типа меню, называемые Fox меню и dBASE - ме-

ню. Fox - меню - это меню-программа, оно является только частью программы, где оно соз-

дается и используется. Вне этой программы его просто нет. dBASE-меню обычно хранится в отдельном файле (планшет меню - .mnx+.mnt, программа, генерирующая меню - mpr, отком-

пилированный модуль - .mpx). Поэтому оно существует независимо от каких-либо программ и может запускаться самостоятельно из любой программы, из любого места прикладной сис-

темы, из командного окна.

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

зом. Сейчас более перспективным считается dBASE-меню, т.к. средства его создания и управления им сейчас наиболее развиты. В частности, в FoxPro имеется генератор меню, по-

зволяющий создать dBASE меню с помощью планшета и затем сгенерировать из него про-

грамму. Мы, для примера, опишем лишь один вариант Fox-меню - LIGHTBAR - меню, а за-

тем более подробно обсудим технологию создания dBASE - меню.

FOX-МЕНЮ

В Fox-меню возможно создание трех различных форм меню:

1.Меню с произвольным расположенными элементами (LIGHTBAR) меню).

2.Вертикальное ("всплывающее" POPUP-меню).

3.Двухуровневое меню (PULLDOWN-меню).

LIGHTBAR-меню

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

жет передвигаться световой курсор (при этом, естественно курсор "освещает" область цели-

ком). Для создания такого меню используются команды

©...PROMPT

MENU SET MESSAGE.

Команда

@Y, X PROMPT < âûðCI > [ MESSAGE < вырС2 >]

создает одну из таких областей с надписью, указанной в <вырС1>. Говорят, что она выдает на экране в позиции Y, X строку меню (<вырС1 >). Поскольку слова в человеческом языке обычно имеют много значений, может оказаться, что по названию пункта меню не со-

всем ясно, что он делает. Делать строку длинной (из нескольких слов) неэффективно: мы занимаем экранное пространство. Поэтому обычно при работе меню нижнюю (или какую-то другую) строку экрана выделяют для "расширенной" подсказки о том, что текущий пункт делает. ' Содержимое этой подсказки и указывается в опции MESSAGE < вырС2 >. То, в ка-

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

которая обычно предшествует командам PROMPT:

SET MESSAGE ТО [<выр N>ILEFT|CENTER|RIGHT]]

Здесь <вырN> указывает номер строки, а ключи [LEFT|CENTER|RIGHT] позволяют прижимать текст к левому краю, центрировать или прижимать к правому краю строки. По умолчанию (если ничего не указывается, то сообщение выводится в последней строке и цен-

трируется).

Команда действует как FOX-меню, так и в dBASE-меню, по в последнем случае

MESSAGE-сообщение центрируется автоматически.

Само меню состоит из ряда (до 128) команд PROMPT, предъявляющих в заданных позициях экрана строки меню. Перемещение внутри меню пользователь осуществляет нажа-

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