ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.


двериекатеринбурга.рф

 

Часть 2


    3. Команды и функции
    --------------------
    Эта глава содержит полное описание всех команд и функций FoxPro. В
сжатой форме аналогичная информация приводится в  оперативной  системе
помощи FoxPro.  Мы  настоятельно  рекомендуем  вам изучить возможности
оперативной помощи.  Она обеспечивает очень удобный и  быстрый  способ
нахождения ответов на возникающие при работе с FoxPro вопросы.

    Примеры Внимание !!!
    Все примеры в этой части и в главе, посвященной системным перемен-
ным памяти,  дублируются в оперативной системе помощи FoxPro. Поэтому,
вам не надо набирать эти примеры для запуска - примеры из помощи могут
копироваться и  вставляться  непосредственно в ваши программы.  Смотри
первую часть этой книги (Язык программирования FoxPro)  для  получения
информации о создании и выполнении программ, и о способе копирования и
вставки примеров из оперативной помощи.
    Файлы, используемые   в  этих  примерах,  находятся  в  директории
COMMFUNC, создаваемом при  установке  FoxPro.  Для  успешного  запуска
программ примеров FoxPro должен иметь доступ к этим файлам. Для указа-
ния на их местонахождения может использоваться команда SET DEFAULT.
    Например, допустим, что директорий COMMFUNC является поддиректори-
ем FOXPRO2 на диске С. Команда
    SET DEFAULT TO C:\FOXPRO2\COMMFUNC
укажет FoxPro где искать нужные файлы.  Более подробная  информации  о
поиске файлов  в  FoxPro приводится при описании команды SET DEFAULT в
этой части.
    Примеры, приведенные  в этой части,  предназначены для иллюстрации
работы команд и функций FoxPro. Они обычно являются короткими и не со-
держат обработчики ошибок. Поэтому, они не всегда выполняются как тре-
буется. Например, в случае когда определенный файл или окно уже откры-
ты или не могут быть найдены, или при отсутствии места на диске, могут
выдаваться сообщения об ошибках.
    При возникновении  ошибки  во  время выполнения программы на экран
выводится сообщение.  Обратите на него внимание. Полный список сообще-
ний об  ошибках  FoxPro с рекомендациями по их устранению приводится в
книге документации по FoxPro  Руководство  разработчика"  (Developer's
Guide").

    FoxPro версии 2.0
    -----------------
    FoxPro 2.0  характеризуется множеством новых и усовершенствованных
команд, функций и системных переменных памяти.  В этой  части  имеется
описание каждой  из них.  Ниже приведен список новых и расширенных ко-
манд, функций и системных переменных памяти.  Если возможности команды
или функции были расширены, то включается описание этих усовершенство-
ваний.
----------------------------------------------------------------------
Команда, функция    Новая  Расширена  Описание усовершенствований
или системная
переменная памяти
----------------------------------------------------------------------
 % - модульный       +
     оператор
 / | //              +
 ? | ??                        +      предложение STYLE
 @ ... SAY/GET                 +      предложение SIZE, код К PICTURE
 @ ... GET - Блок    +
 проверки
 @ ... GET - Неви-   +
 димые кнопки
 @ ... GET - Списки  +
 @ ... GET - Всплы-  +
 вающие меню
 @ ... GET -         +
 Текстовые кнопки
 @ ... GET -         +
 Селективные кнопки
 @ ... GET - Области +
 модификации текста
 ACOPY()             +
 ACTIVATE MENU                 +      предложение NOWAIT
 ACTIVATE POPUP                +      предложения AT, BAR, NOWAIT и REST
 ADEL()              +
 ADIR()              +
 AELEMENT()          +
 AFIELDS()           +
 AINS()              +
 ALEN()              +
 APPEND FROM                   +      дополнительные типы файлов
 APPEND FROM ARRAY             +      блокировка только заголовка базы
                                      данных в FoxPro/LAN
 ASCAN()             +
 ASUBSCRIPT()        +
 BROWSE                        +      ключевые слова LEDIT, LPARTITION,
                                      NOLINK, NOLGRID, NOOPTIMIZE,
                                      NOREFRESH, NORGRID, REDIT  и REST
                                      предложения FOR, PARTITION, WHEN и
                                      VALID, поддержка SET SKIP, ROW() и
                                      COL()
 BUILD APP           +
 BUILD EXE           +
 BUILD PROJECT       +
 CDX()               +
 CLEAR READ          +
 CNTBAR()            +
 CNTPAD()            +
 COPT INDEXES        +
 COPY STRUCTURE      +         +      предложения CDX и PRODUCTION
 COPY TAG            +
 COPY TO                       +      предложения CDX и PRODUCTION,
                                      ключевое слово NOOPTIMIZE, допол-
                                      нительные типы файлов
 CREATE COLOR SET    +
 CREATE MENU         +
 CREATE PROJECT      +
 CREATE QUERY        +
 CREATE REPORT                 +      программное создание быстрого
                                      отчета с предложениями ALIAS,
                                      COLUMN, FIELDS, FORM, NOOVERWRITE,
                                      и WIDTH
 CREATE SCREEN       +
 CREATE TABLE - SQL  +
 _CUROBJ             +
 DEFINE BAR                    +      предложения AFTER, BEFORE, COLOR,
                                      KEY и MARK
 DEFINE MENU                   +      предложения AT LINE, BAR, IN WINDOW,
                                      KEY, MARK и NOMARGIN
 DEFINE PAD                    +      предложения AFTER, BEFORE, KEY и
                                      MARK
 DEFINE POPUP                  +      предложения FOOTER, IN WINDOW, KEY,
                                      MARGIN, MARK, MOVER, MULTI, RELATIVE
                                      SCROLL и TITLE; PROMPT FIELD прини-
                                      мает общие выражения
 DEFINE WINDOW                 +      предложения FILL, FOOTER и MINIMIZE
 DELETE TAG          +
 DIMENSION/DECLARE             +      можно изменять размерность массива
                                      без потери данных
 DISPLAY/                      +      выводит дополнительную информацию,
 LIST STATUS                          поддержка драйверов принтеров
 DO                            +      предложение IN 
 EVALUATE()          +
 EXPORT              +
 EXTERNAL            +
 FULLPATH()                    +      может быть возвращен относительный
                                      маршрут между двумя файлами
 GATHER                        +      ключевое слово MEMO
 _GENGRAPH           +
 _GENMENU            +
 _GENPD              +
 _GENSCRN            +
 _GENXTAB            +
 GETBAR()            +
 GETPAD()            +
 IMPORT              +
 INDEX                         +      предложения ASCENDING, COMPACT,
                                      DISCENDING и TAG; индексное выраже-
                                      ние может содержать функции, опре-
                                      деляемые пользователем
 INSERT - SQL        +
 KEYBOARD                      +      символьное выражение KEYBOARD
                                      может содержать клавишные метки или
                                      UDF
 KEY()                         +      поддержка составных индексов
 LABEL                         +      опция PREVIEW; ключевое слово
                                      NOOPTIMIZE
 LOCFILE()           +
 LOOKUP()            +
 MDX()               +
 MLINE()                       +      новое предложение для смещения
                                      строки памяти memo
 _MLINE              +
 MODIFY LABEL                  +      предложение NOENVIRONMENT; опция
                                      NOWAIT
 MODIFY MENU         +
 MODIFY PROJECT      +
 MODIFY QUERY        +
 MODIFY REPORT                 +      предложение NOENVIRONMENT; опция
                                      NOWAIT
 MODIFY SCREEN       +
 MOVE POPUP          +
 MRKBAR()            +
 MRKPAD()            +
 NDX()                         +      поддержка составных индексов
 OBJNUM()            +
 ON BAR              +
 ON PAD                        +      предложение ACTIVATE MENU
 ON SELECTION BAR    +
 ON SELECTION MENU   +
 ON()                +
 ORDER()                       +      поддержка составных индексов
 PACK                          +      опции MEMO и DBF; может прерывать-
                                      ся нажатием клавиши Escape
 PARAMETERS                    +      можно передавать целиком массивы
 _PDSETUP            +
 POP KEY             +
 POP MENU            +
 POP POPUP           +
 _PRETEXT            +
 PRMBAR()            +
 PRMPAD()            +
 PUSH KEY            +
 PUSH MENU           +
 PUSH POPUP          +
 RDLEVEL()           +
 READ                          +      предложения ACTIVATE, COLOR, CYCLE,
                                      DEACTIVATE, LOCK, MODAL, NOLOCK,
                                      OBJECT, SHOW, VALID, WHEN  и WITH
 READKEY()                     +      необязательный числовой аргумент,
                                      для определения того, как закон-
                                      чилась последняя команда READ
 REINDEX                       +      опция COMPACT
 RELEASE BAR         +
 RELEASE PAD         +
 RELEASE MENUS                 +      опция EXTENDED
 RELEASE POPUPS                +      опция EXTENDED
 REPORT                        +      опции PREVIEW и NOCONSOLE; ключевое
                                      слово NOOPTIMIZE
 RETURN                        +      отсутствие RETURN в процедуре или
                                      UDF автоматически возвращает значе-
                                      ние истина (.Т.)
 SCATTER                       +      ключевое слово MEMO
 SCROLL                        +      горизонтальная прокрутка
 SELECT()                      +      опции 0 и 1
 SELECT - SQL        +
 SET ANSI            +
 SET HELPFILTER      +
 SET INDEX                     +      предложения ADDITIVE, ASCENDING,
                                      DESCENDING  и ORDER
 SET LIBRARY         +
 SET MARK OF         +
 SET MESSAGE                   +      предложение WINDOW
 SET OPTIMIZE        +
 SET ORDER                     +      предложения ASCENDING, DESCENDING
                                      IN и TAG
 SET PDSETUP         +
 SET PRINTER                   +      поддержка очереди и сервера сети
 SET SKIP            +
 SET SKIP OF         +
 SET SYSMENU                   +      предложения AUTOMATIC и DEFAULT,
                                      управление Системным меню FoxPro
 SET TALK                      +      предложение WINDOW
 SET TEXTMERGE       +
 SET TEXTMERGE       +
     DELIMITERS
 SET TRBETWEEN       +
 SHOW GET            +
 SHOW GETS           +
 SHOW OBJECT         +
 SET WINDOW                    +      ключевое слово REFRESH
 SKPBAR()            +
 SKPPAD()            +
 SIZE POPUP          +
 SYS(2011)           +
 SYS(2012)           +
 SYS(2013)           +
 SYS(2014)           +
 SYS(2015)           +
 SYS(2016)           +
 SYS(2017)           +
 SYS(2018)           +
 SYS(2019)           +
 SYS(2020)           +
 SYS(2021)           +
 SYS(2022)           +
 SYS(2023)           +
 TAG()               +
 _TALLY              +
 _TEXT               +
 TEXT...ENDTEXT                +      возможности объединения текста
 _THROTTLE           +
 TYPE                          +      ключевые слова AUTO и WRAP; поддер-
                                      жка драйвера принтера
 UDFs                          +      могут использоваться в предложениях
                                      FOR и WHILE, индексных выражениях;
                                      присутствие RETURN не является
                                      обязательным
 USE                           +      предложения AGAIN, ASCENDING,
                                      DESCENDING и ORDER
 WAIT                          +      опция NOWAIT для предложения WINDOW,
                                      WAIT CLEAR
 WBORDER()           +
 WCHILD()            +
 WLAST()             +
 WMAXIMIZE()         +
 WMINIMIZE()         +
 WPARENT()           +
 WREAD()             +
 ZOOM WINDOW         +
----------------------------------------------------------------------
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є                %                є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
    Оператор деления по модулю.  Возвращает остаток  от  деления  двух
числовых выражений.
    Синтаксис
 % 
    Параметры
 Делимое (число которое делится).
 Делитель (число на которое делят)
    Замечания
Новая для FoxPro 2.0
    Смотри также
MOD()

    Описание
    Оператор деления по модулю % возвращает остаток при делении одного
числового выражения на другое числовое выражение.  Этот оператор и оп-
ретор MOD() возвращают одинаковые значения.
    Оператор %  подобен арифметическим операторам + (сложение), - (вы-
читание), * (умножение) / (деление) и ^  (возведение  в  степень.  При
комбинации этих  операторов  в одном арифметическом выражении %  имеет
тот же приоритет,  что и * и /.  Смотри Руководство Команды и  Функции
FoxPro для получения информации об этих оператарах и порядке их выпол-
нения.

    Параметры

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

     является  делителем  (числом  на  которое  делят выражение
). Возвращается положительное число, если  положительно,
и отрицательное число, если   отрицательно.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
? 36 % 10
6
? (4*9) % (90/9)
6
? YEAR(DATE()) % 4
3
? 25.250 % 5.0
0.250

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є                &                є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Макроподстановка
    Синтаксис
&[.]
    Смотри также
EVALUATE()

    Описание
    Когда функции & предшествует имя переменной памяти символьного ти-
па, программа FoxPro инструктируется о необходимости выполнения макро-
подстановки - значение  заменяет функцию & и  имя  переменной,
которое  следует  за ним.  После этого команда выполняется точно также
как если бы она первоначально включала символы из  переменной  памяти.
Вы можете  использовать  макроподстановку в любой команде или функции,
которая допускает использование цепочки литералов.
    При использовании  функции макроподстановки вы можете предоставить
пользователю подсказку,  касающуюся информации,  а затем применить эту
информацию как часть команды, которая требует цепочки литералов.

    Примеры
    
    Включает имя  переменной памяти ,  используемой для макро-
подстановке.  Макроопределение не должно превышать максимальную  длину
оператора, разрешенной в FoxPro, которая составляет 1024 символа.
    [.]
    Для   сцепления   дополнительных   символов   в  макрорасширении
применяется дополнительный ограничитель "точка" (.). Строка символов,
заменяемая  функцией  &,  сама  может  содержать  функции  &,  и если
существует переменная  памяти, имя  которой  сопровождается  подобной
вложенной  функцией &, содержимое такой переменной также заменяется в
команде.
    Однако, если  команда  ожидает  имя  (имя  файла,имя окна,  меню и
т.д.), непосредственное обращение обеспечивает более быструю обработку
(для  получения более подробной информации относительно непосредствен-
ного обращения к именам смотри Главу 1  данного  руководства).  Помимо
этого,  использование  макроподстановки  в команде или файле,  которые
принимают символьное выражение, результируются в более медленной обра-
ботке.
     Несмотря   на   это,   нижеследующие   команды   разрешены   для
использования:
    STORE "Customer" TO dbf_file
    STORE "Cust_id" TO tagname
    USE &dbf_file INDEX &tagname
это   использование   макроподстановки   "расточительно"   и   должно
заменяться непосредственным обращением, например:
    USE (dbf_file) TAG (tagname)
    Следует отметить,  что сама переменная не должна рекурсивно  обра-
щаться к макроопределению. Ниже приведен пример генерации сообщения об
ошибке:
    STORE "&x" TO x
    ? &x
    Появляющиеся в  управляющих  структурах программы операторы макро-
подстановки (например,  DO WHILE) оцениваются только в начале цикла  и
повторно  при  последующих  итерациях не оцениваются.  Любые изменения
 для оценки оператора макроподстановки, имеющие место в цикле,
не распознаются.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є                $                є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
    Возвращает "истина",  если одно символьное выражение содержится  в
другом символьном выражении.
    Синтаксис
 $ 
    Параметры
 Искомая строка
 Строка в которой осуществляется поиск
    Возвращаемый тип
Логический
    Смотри также
AT()

    Описание
    Это функция  подцепочки,  которая  возвращает  значение  "истинно"
(.T.), если  является подцепочкой  (содержится в ней), и
"ложно"  (.F.) в случае обратного положения.

    Параметры
    ,
    Осуществляется поиск символов  в .  Если  со-
держит в себе хотя бы одно появление  ,  то  возвращается  .Т..
Если  не найдено в , то возвращается .F..
     и  могут быть переменными памяти  символьного  типа
или элементами массива,  полями базы данных символьного типа, символь-
ными строковыми литералами или полем памяти произвольной длины.
    Так как в FoxPro цепочки и поля памяти  обрабатываются  одинаково,
то с полями памяти может быть сделано все то же самое, что с цепочками
или символьными полями базы данных.  Например, нижеследующее выражение
полностью разрешено (считая,  что MEMO_FLD представляет собой поле па-
мяти базы данных):
    LIST FOR 'FOX' $ UPPER(memo_fld)
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
STORE 'FOX' TO fastvar
? fastvar $ 'THE QUICK RED FOX JUMPED OVER THE LAZY DOG'
.T.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              =                  є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Оценка списка выражений
    Синтаксис
=[,...,]
    Смотри также
?, функции определяемые пользователем

    Описание
    Команда =  просто  выполняет  оценку  списка   выражений   ,
...,  и  подавляет    возвращаемое значение.  В частности,
данная команда может быть полезной,  когда функция,  будь  то  функция
FoxPro  или функция,  определяемая пользователем,  выполняет требуемые
действия, но при этом нет необходимости присваивать возвращаемый функ-
цией результат переменной памяти или полю.
    Например, для переключения между режимами вставки/затирания вы мо-
жете дать команду:
= INSMODE(.T.).
    Функция INSMODE  обычно  возвращает  значение  "истина"  (.T.) или
"ложь" (.F.). В данном примере функция выполняется, но возвращаемое ей
значение подавляется.
    Отметим, что знак равенства = может быть также использован  в  ка-
честве  оператора в логическом выражении операции сравнения.  Он может
также служить для присвоения значений массивам и переменным памяти.  В
двух  последних  случаях знак равенства не используется в качестве ко-
манды.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             \ | \\              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
    Выводит строки текста.
    Синтаксис
\  | \\ 
    Замечания
Новая для FoxPro 2.0
    Смотри также
_PRETEXT,  SET TEXTMERGE, SET TEXTMERGE DELIMITERS,_TEXT, TEXT ... ENDTEXT

    Описание
    Команды \  и  \\  обеспечивают  в  FoxPro  возможности объединения
текста.  Это , в свою очередь, позволит вам осуществлять вывод тексто-
вой информации в файл, с целью создания бланков писем и программ.
    \ и \\ осуществляют вывод текстовой строки в текущее выходной файл
объединения текста и на экран.  Этот файл задается вами оператором SET
TEXTMERGE. Если объединение текста не направлено в файл,  то текстовая
строка выводится  только  на экран.  Вы можете подавить вывод на экран
включением ключевого слова NOSHOW в операторе SET TEXTMERGE.
    При использовании  команды \ результирующая выводимая строка будет
заканчиваться символами  возврата  каретки  и  перевода  строки.   При
использовании команды \\  выводимая строка эти символы не содержит.
    Пробелы, предшествующие командам \ и \\ не включаются в  выводимую
строку, а пробелы после них - включаются.
    В  могут содержаться выражения. Выражение вычисляется и
его значение  выводится,  если  оно  заключено  в ограничители слияния
текста (по умолчанию считаются << и >>) и TEXTMERGE установлен в ON.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         Пример Программы        є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
CLOSE ALL
SET TEXTMERGE TO letter.txt
USE customer
SET TEXTMERGE ON
\<>, <>
\\<>, <>
\
\
\Dear <>
\
\Additional Text
\
\Thank you,
\Fox Software
CLOSE ALL
MODIFY FILE letter.txt NOWAIT

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ? | ??              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Оценка выражений и вывод результатов на дисплей
    Синтаксис
? | ?? [ [PICTURE ]
        [FUNCTION ]
        [AT ] [STYLE ]
        [, ]] ...
Смотри также:
SET MEMOWIDTH, SET PRINTER, Системные переменные памяти

    Описание
    ? и ??  производят оценку заданного им выражения (выражений) и вы-
водят результат на экран, принтер или сразу на оба устройства.
    Если SET  PRINT  находится  в состоянии ON,  то выход обеих команд
направляется одновременно на экран и на принтер. Если же CONSOLE нахо-
дится  в  состоянии  OFF,  а SET PRINT в ON,  то выход будет направлен
только на принтер.

    Дополнительные опции
    ?
    Один вопросительный знак посылает перед выводом результата выраже-
ния символы возврата каретки и перевода строки.  Тем самым, если кодом
FUNCTION или системной переменной памяти _ALIGNMENT  не  будет  задано
иное, то вывод результата появится на экране или на принтере в следую-
щей строке,  начиная с крайней левой позиции. Если же никакого выраже-
ния задано не было, то печатается пустая строка. Запятая между выраже-
ниями (,   ...) автоматически задает разделение их с по-
мощью пробелов.
    ??
    В случае  двух  последовательно  стоящих вопросительных знаков ре-
зультат выводится с текущей позиции экрана или принтера - пара  управ-
ляющих символов, возврат каретки и перевод строки, не посылается.
    PICTURE 
    Если имеется предложение PICTURE,  то значение выражения выводится
в соответствии с форматом,  задаваемым .  может состоять
из  функциональных кодов,  кодов шаблонов или из комбинации тех и дру-
гих.
    Функциональные коды влияют на формат выражений в целом,  тогда как
действие кодов шаблонов распространяется исключительно на один отдель-
ный символ в выражении. Если в  используются функциональные ко-
ды,  то они должны располагаться перед стоящими там же кодами шаблонов
и  начинаться  с символа @.  За символом @ может следовать любое число
функциональных кодов без пробелов между ними.  За  последним  функцио-
нальным  кодом в строке должен находиться один или несколько пробелов.
Пробел(ы) обозначает конец функциональных кодов и начало кодов  шабло-
нов предложения PICTURE.
    Вы можете использовать все коды для  FUNCTION  в  @  ...  SAY/GET.
Смотри  список  этих  кодов  в  описании  предложения FUNCTION в @ ...
SAY/GET.
    FUNCTION 
    Предложение FUNCTION    представляет  собой  альтернативное
средство включения  функциональных  кодов  для  вывода  команды  ?і??.
Использование предложения FUNCTION эквивалентно заданию функциональных
кодов в предложении PICTURE, за исключением того, что теперь нет необ-
ходимости включать символ @.
    Вы можете использовать все коды для  FUNCTION  в  @  ...  SAY/GET.
Смотри  список  этих  кодов  в  описании  предложения FUNCTION в @ ...
SAY/GET.
    С командами ? и ?? может быть использован специальный функциональ-
ный код V.V позволяет растягивать вывод в вертикальном направле-
нии,  ограничивая число позиций по горизонтали.  - это максимальное
количество столбцов, которые будут заняты при выводе результатов.
    AT 
    Необязательное предложение AT может быть использовано для  задания
номера столбца , в котором должен начинаться вывод. Данная опция
может применяться для  выравнивания  столбцов  выводимых  результатов,
например в случае вывода таблицы чисел.
    STYLE 
    Необязательное предложение STYLE позволяет вам  задавать  стиль  и
размер  шрифта  при  выводе информации на принтер.  Выражение  в
предложении STYLE посылается  трем  процедурам:  PDOBJST,  PDOBJECT  и
PDOBJEND в  текущей программе драйвера принтера FoxPro.  Эти процедуры
определяют порядок выдачи на печать от операторов ?  и ??. Опция STYLE
игнорируется при выводе с помощью ? и ?? на экран или в окно. За более
подробной информацией о форматированном выводе на  принтер  с  помощью
операторов ?  и  ??  мы отсылаем вас к Главе Драйверы принтера в Руко-
водстве Разработчика (Developer's Guide) документации по FoxPro.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Примеры             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
? 15*(10+10)
300
? 'Welcome to ' PICTURE '@!
?? 'FOXPRO'
WELCOME TO FOXPRO
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               ???               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Направление управляющих кодов непосредственно на принтер
    Синтаксис
??? 
    Смотри также
?/??, CHR(), Системные переменные памяти

    Описание

     Три вопросительных знака направляют содержимое  прямо
на принтер, в обход драйвера принтера. Эта команда позволяет ис-
пользовать управляющие коды принтера, не поддерживаемые драйвером
принтера.
    Управляющие коды принтера поэволяют выполнить сброс принтера,  из-
менить тип и размер шрифта,  включить или отменить режим печати  полу-
жирным  шрифтом  и  т.д.  Эти  коды могут состоять из любой комбинации
отображаемых и  неотображаемых  символов,  специфичных  для  конкретно
используемого  вами принтера.  Вы можете направить управляющие коды на
принтер несколькими различными способами:
    * Воспользоваться для посылки прямо на принтер ASCII-символа функ-
цией CHR().
    * Воспользоваться  для  посылки  кодов принтера или ASCII-символов
фигурными скобками {}.
    * Воспользоваться комбинацией функции CHR() и фигурных скобок.
    * Коды могут быть посланы на принтер  до  начала  печати  и  после
окончания  печати  в системных переменных _PSCODE и _PECODE.  Дополни-
тельную информацию см.  также в главе  "Системные  переменные  памяти"
настоящего руководства.

    Управляющие коды для разных принтеров различны.  Лучшим источником
информации об управляющих кодах принтера является поставляемое  вместе
с самим принтером руководство.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є          @ ... SAY/GET          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Выполнение ввода/вывода в заданной строке и столбце
    Синтаксис
@ 
        [SAY 
                [PICTURE ]
                [FUNCTION ]
                [COLOR SCHEME 
                |COLOR ]]
        [GET 
                [PICTURE ]
                [FUNCTION ]
                [DEFAULT ]
                [ENABLE | DISABLE]
                [MESSAGE ]
                [[OPEN]
                        WINDOW ]
                [RANGE []
                        [, ]]
                [SIZE , ]
                [VALID  | 
                        [ERROR ]]
                [WHEN ]
                [COLOR SCHEME 
                |COLOR ]]
    Замечания
Расширена в FoxPro 2.0: DISABLE, ENABLE, SIZE, код K в PICTURE. OPEN
WINDOW предназначена  только  для  совместимости  с  ранними версиями;
вместо этого используется @ ... EDIT.
    Смотри также
_CUROBJ, OBJNUM, READ, SET COLOR, SET CURRENCY, SET DEVICE, SET SCHEME,
SHOW GETS, SHOW OBJECT, VARREAD(), Функции, определяемые пользователем.

    Описание
    Данный вариант команды @ используется для экранного  или  оконного
форматированного вывода, для создания экранов ввода, либо для формати-
рования вывода на принтер.

    Дополнительные опции
     (<строка,столбец>)
     и  представляют собой численные выражения, определя-
ющие  местоположение  вывода.  Для ввода/вывода на экран первая строка
имеет номер 0, а номер последней строки равен высоте экрана минус еди-
ница.  Обычно последняя строка имеет номер 24, если только вы не рабо-
таете в режиме расширенного экрана дисплея. Нумерация строк идет свер-
ху-вниз.  Для  принтера максимальный номер строки ограничивается физи-
ческими размерами листа.
    Для ввода/вывода  на  экран первый столбец имеет номер 0,  а номер
последнего столбца равен ширине экрана дисплея минус  единица.  Обычно
последний столбец имеет номер 79, если только вы не работаете в режиме
расширенного экрана дисплея.  Нумерация столбцов  идет  слева-направо.
Для  принтера  максимальный  номер  столбца ограничивается физическими
размерами листа.
    Вывод от оператора @ ..  SAY/GET будет направляться на экран, если
не активировано окно,  определяемое пользователем.  При выводе в окно,
координаты   и  являются относительными координатами дан-
ного окна, а не координатами самого физического экрана.

    Опции оператора SAY
     SAY 
    Если имеется предложение SAY,  то  оценивается и  выводится
на дисплей,  начиная с позиции (<строка,столбец>). 
может представлять собой UDF  (функцию,  определяемую  пользователем).
Если  выло  определено  SET DEVICE TO PRINT,  то вывод направляется на
принтер. Если выло определено SET DEVICE TO SCREEN, то вывод направля-
ется  на  экран.  Предложение  @...SAY может быть также использовано в
форматных файлах.
     PICTURE |FUNCTION 
    При создании поля SAY вы можете включить опцию  PICTURE,  FUNCTION
или сразу обе.  Эти опции содержат специальные коды, управляющие выво-
дом и редактированием выражения .
    Коды FUNCTION могут включаться в предложение PICTURE.  В этом слу-
чае предложение PICTURE должно начинаться с символа  @.  Кроме  этого,
предложение PICTURE может содержать в себе коды FUNCTION, коды PICTURE
или их комбинации, но предложение FUNCTION может содержать только коды
FUNCTION.
     Примеры
    Следующий пример  иллюстрирует использование оператора SAY с функ-
циональным кодом перевода в заглавные буквы в опции PICTURE.  При этом
все символы переводятся в верхний регистр.
    STORE 'Hello, world; TO string
    CLEAR
    @ 5,0 SAY string PICTURE '@!'

HELLO, WORLD
    Следующий пример  показывает  форматирование  числового значения с
помощью комбинации функциональных кодов. Коды $$ создают знак доллара,
а код С добавляет после числа знак CR (кредит).
    CLEAR
    @ 5,0 SAY 1.15 FUNCTION 'C$$'

$1.15CR

    Коды FUNCTION

Функциональные коды FUNCTION.

Код   Что делает

A     Разрешен ввод только алфавитных символов.
B     Выравнивание числовых данных при выводе по левому краю.
C     После положительного числа выводится CR (кредит).
      Может использоваться только с числовыми данными. Может
      стоять только в предложении SAY.
D     Использует текущий формат SET DATE (например, BRITISH,
      GERMAN и т.д.) для редактирования данных типа даты.
E     Редактирование данных, рассматривая их как Европейские
      (BRITISH) даты.
I     Выводимый текст центрируется относительно поля.
J     Выводимый текст выравнивается по правому краю поля.
К     Выбирает определенное поле для редактирование при указании
      на него курсором.
L     При числовом выводе на дисплее отображаются ведущие нули
      (вместо пробелов). Может использоваться только с числовыми
      данными.
M     Задает несколько предопределенных значений на выбор.
       представляет собой набор элементов данных, разде-
      ленных запятыми. Поскольку эти элементы разделяются запятыми,
      запятая не может являться частью элемента данных. Если к
      моменту, когда выдается команда READ, переменная  в GET
      не содержит ни одного из элементов , в поле GET появляется
      первый элемент .
      Для скроллинга по  достаточно нажать пробел или пер-
      вую букву соответствующего элемента. Для выбора одного из
      элементов и перехода к следующему элементу нажмите Еnter.
      Данная функция может быть использована только с символьными
      данными и только с командой GET.
R     При использовании со строкой , которая содержит сим-
      волы, отличные от кодов шаблона PICTURE, не совпадающие с
      шаблоном символы отображаются на дисплее, но не помещаются
      в . Может использоваться только с символьными данными.
S  Ограничивает ширину отображения на дисплее  символами,
      где  есть целочисленная константа. Задает горизонтальный
      скроллинг поля в пределах заданных  столбцов. Для про-
      смотра скрытых частей поля можно воспользоваться клавишами
      управления курсором "стрелка вправо", "стрелка влево",
      Ctrl+F и Ctrl+A. Может использоваться только с символьными
      данными.
T     Отсекает ведущие и хвостовые пробелы в поле.
X     После отрицательных чисел выводится символ DB (дебит).
      Может использоваться только с числовыми данными. Может
      находиться только в предложении SAY.
Z     При выводе поля, если числовое значение равно нулю,
      выводятся все пробелы. Может использоваться только с чис-
      ловыми данными.
(     При использовании этой функции отрицательные числа берутся
      в круглые скобки. Может использоваться только с числовыми
      данными.
!     Могут вводиться любые символы; однако, буквы алфавита пре-
      образуются в заглавные. Может использоваться только с сим-
      вольными данными.
^     Выводит числовые данные в научной записи. Может использова-
      ться только с числовыми данными.
$     Выводит данные в формате денежной записи. Символ денег по-
      является в поле справа или слева от значения, в зависимости
      от текущей установки SET CURRENCY. Может использоваться
      только с числовыми данными. Если CURRENCY установлено как
      SET LEFT, то функциональный код $ не может использоваться
      с GET.

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

    Выражение PICTURE может включать любые необходимые символы;  одна-
ко, в редактировании и вводе данных активно участвуют только приведен-
ные ниже символы.  Если в формат включить какие-либо  другие  символы,
они будут включены в отображение при выводе, а в случае операции ввода
появятся в поле в качестве комментария,  и курсор будет  перескакивать
через них при редактировании. Символы, которые могут выть использованы
в выражении шаблона, описаны ниже.

Код   Что делает

A     Допускает ввод только алфавитных символов.
L     Допускает только логические данные.
N     Допускает только буквы и цифры.
X     Допускает любые символы.
Y     Допускает только логические значения Y,y,N,n, с преобразо-
      ванием e и n в Y и N, соответственно.
9     В случае символьных данных позволяет вводить только цифры.
      В случае числовых данных позволяет вводить сифру и знак.
#     Позволяет вводить цифры, пробелы и знак.
!     Выполняет преобразование строчных букв в заглавные.
$     Выводит на дисплей текущий денежный символ (определяемый
      при помощи SET CURRENCY). По умолчанию этот символ помещается
      непосредственно до или после поля. Однако, денежный символ и
      его позиция (SET CURRENCY), разделительный символ (SET SEPA-
      RATOR) и символ десятичного знака (SET POINT) могут быть
      переопределены. Данный символ шаблона может использоваться
      в обоих полях, SAY и GET, однако в поле GET он допустим
      только при SET CURRENCY равном LEFT.
*     Звездочки выводятся перед числовыми значениями. Использу-
      ются со знаком доллара "$" для защиты проверкой.
.     Точка задает позицию десятичной точки.
,     Запятая может использоваться для отделения цифр, стоящих
      слева от десятичной точки.

     COLOR SCHEME 
     COLOR  (<список цветовых пар>)
    По умолчанию  цвет  выводимой оператором SAY информации берется из
цветовой схемы текущего окна или экрана.  Цветовая схема  представляет
собой набор  из  10 цветовых пар,  которые описывают цветовые характе-
ристикм окна.  Вы можете переопределить текущую цветовую  схему  путем
задания различных  предопределенных  заранее цветовых схем,  или путем
задания списка цветовых пар.
    Заданием списка цветовых пар в операторе SAY вы можете переопреде-
лять лишь некоторые характеристики цветовой схемы. Список цветовых пар
представляет собой 10 разделенных запятыми пар цветов.

    Опции оператора GET 
    GET  выводит поле на экран или в окно для редактирования. При
наличии обоих предложений,  SAY и GET,  после конца вывода SAY и перед
началом вывода GET автоматически вставляется пробел. Для инициирования
редактирования поля GET в сочетании с SAY должна использоваться коман-
да READ.

     PICTURE 
     FUNCTION 
    Эти предложения имеют здесь то же назначение,  что и в предложении
SAY, за исключением того, что они используются для редактирования дан-
ных, вводимых  в ответ на GET.  Смотри замечания по PICTURE и FUNCTION
выше для более подробной информации.

     DEFAULT 
    Если GET  задает переменную памяти и эта  переменная  не  су-
ществует, то при включении опции DEFAULT она автоматически создается и
инициализируется. Если  является элементом массива, то DEFAULT не
создает .  DEFAULT  игнорируется,  если  является полем базы
данных.
    Важно !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение   в опции DEFAULT задает тип и начальное значение
инициализируемой переменной памяти.   должна иметь числовой или
символьный тип.

     ENABLE|DISABLE
    Включение опции DISABLE запрещает доступ и изменение к полю в GET.
Поле выводится  цветами  блокировки и оно не выбирается.  По умолчанию
поля GET имеют статус ENABLE (доступные).  Вы  можете  включать  опцию
ENABLE для напоминания, что поле может выбираться и модифицироваться.

     MESSAGE 
    Предложение MESSAGE позволяет при помещении курсора в соответству-
кющее поле GET  выводить  на  дисплей  заданное  символьное  выражение
. Сообщение выводится в последней строке экрана или окна и вре-
менно отменяет любое выражение SET MESSAGE.

     [OPEN] WINDOW 
    Предложение WINDOW позволяет редактирование поля памяти типа  memo
в  окне,  определяемом  пользователем.  Перед  этим окно 
должно быть определено с помощью DEFINE WINDOW. В этом случае на экра-
не появится слово Memo.
    Для того, чтобы открыть окно редактирования memo поля, надо нажать
дважды кнопку  "мыши"  не  слове Memo,  или установить курсор на слове
Memo и нажать Ctrl+Home, Ctrl+PgUp или Ctrl+PgDn .
    Для удаления  окна  нажмите  кнопку  "мыши" на рамке закрытия окна
(если возможно) или вне окна.  Вы также можете выйти из окна  нажатием
Ctrl+W, Ctrl+End, Ctrl+Q или Escape.
    Если включить в предложение необязательное слово OPEN, то окно па-
мяти открывается по умолчанию, но для входа в него тем не менее требу-
ется нажатие Ctrl-Home, а для выхода - Ctrl-End.

     RANGE [][,]
    Опция RANGE может использоваться с символьными переменными, датами
и числовыми переменными для задания диапазона значений, в пределах ко-
торых должны находиться вводимые величины. При задании значения, выхо-
дящего за заданные границы,  выдается сообщение и указываются допусти-
мые границы.
    Значения  и  должны являться символьными,  числовыми
выражениями или выражениями типа даты, в зависимости от того, является
ли  переменной символьного, числового типа или датой.
    Если вводимое  вами  значение не укладывается в заданный диапазон,
раздается предупреждающий  звуковой  сигнал  и  появляется  сообщение,
несущее информацию о допустимых значениях диапазона.
    Можно опустить либо верхнее, либо нижнее граничное значение, но не
оба  одновременно.  Если одно из значений опущено,  то проверка его не
производится. Если нажать Enter, не изменив значения , то провер-
ка диапазона также не выполняется.
    Для переопределения выдаваемого по умолчанию сообщения о  границах
диапазона служит команда ON READERROR.

     SIZE , 
    Команда GET редактирует область высотой в одну строку.  Длина поля
GET задается  редактируемой  переменной  памяти или полем базы данных,
или опцией PICTURE, если она присутствует. Опция SIZE позволяет управ-
лять размером поля GET - высотой и длиной. При редактировании memo по-
ля вы можете задавать размер области редактирования.
    Высота поля GET задается в строках параметром ,  ширина - в
столбцах параметром .  Размер может быть больше или меньше раз-
мера редактируемой переменной .
    Если вы задали размеры без опции PICTURE:
    - если   является полем базы данных и размер области редакти-
рования, заданного вами в опции SIZE, больше длины поля, то редактиро-
вание происходит  в  области,  совпадающей  с размером этого поля базы
данных.
    - если   является переменной памяти и размер области редакти-
рования, заданного вами в опции SIZE, больше длины этой переменной, то
редактирование происходит во всем GET поле.
    - если  является переменной памяти или полем  базы  данных  и
размер  области  редактирования,  заданного вами в опции SIZE,  меньше
длины , то по полю GET осуществляется скроллинг.
    Если вы задали размеры с опцией PICTURE:
    - если PICTURE задает размер,  меньший,  чем поле  GET,  то  опция
PICTURE имеет приоритет.  Например, если опция PICTURE имеет вид "ААА"
(три алфавитных символа" и опция SIZE 1,10 (одна  строка  в  высоту  и
десять столбцов в ширину), то в поле GET вы сможете редактировать пер-
вые три символа переменной памяти или поля базы данных.
    - если  PICTURE задает меньший размер,  чем размер поля GET,  то в
поле GET осуществляется скроллинг.

     VALID  | 
    Предложение VALID  позволяет сделать контроль достоверности вводи-
мых с экрана данных частью команды @...GET. Предложение VALID позволя-
ет  существенно  упростить  контроль достоверности экранного ввода при
использовании его в сочетании с функциями,  определяемыми  пользовате-
лем.  Если  функция,  определяемая пользователем (UDF),  вызывается из
предложения VALID,  то UDF возвращает данные логического или числового
типа. При попытке выхода из поля GET выражение VALID будет оцениваться
с использованием значения выражения.
    Важно !!!
    В отличие от контроля данных в предложении RANGE, контроль в пред-
ложении VALID выполняется всегда,  независимо от того,  каким способом
был произведен выход из поля, за исключением выхода при помощи клавиши
Escape. Предложение  RANGE  осуществляет контроль только при изменении
.

     VALID c логическим выражением
    Если  истинно (.T.), ввод считается достоверным, и READ пе-
реходит к вводу следующего поля.  Если  ложно (.F.), то введен-
ное значение считается неверным, и FoxPro выдает сообщение и предупре-
дительный сигнал, сообщающие вам о необходимости повторить после нажа-
тия пробела ввод данных.

     VALID c числовым выражением
    Если вместо логического выражения в предложении VALID будет задано
числовое  выражение,  то выполняемые действия будут зависеть от значе-
ния,  возвращаемого .  В целом, предложение VALID, возвращающее
числовое значение, может быть использовано для обозначения того, какое
поле будет следующим полем GET, к которому обратится READ.
    * Ноль указывает на то, что контроль достоверности обнаружил ошиб-
ку,  и курсор остается в том же поле GET (так же,  как при  логическом
.F.).  Как  стандартное,  так  и определяемое при помощи ERROR 
сообщения об ошибке в случае использования числового выражения  подав-
ляются.  Отдельная  подпрограмма с сообщением об ошибке может быть на-
писана специально, как часть определяемой пользователем функции, вызы-
ваемой предложением VALID.
    * Положительное  значение указывает относительное число полей,  на
которое команда READ должна продвинуться  вперед,  прежде  чем  начать
ввод следующего поля GET.  Например,  если вы находились на пятом поле
GET,  а предложение VALID возвратило число 2 (два), то следующим полем
ввода станет седьмое поле GET. Если  выходит за пределы послед-
него поля GET, то операция READ завершается.
    * Отрицательное  значение указывает относительное число полей,  на
которое команда READ должна вернуться назад,  прежде чем  начать  ввод
следующего поля GET. Например, если вы находитесь на пятом поле GET, а
предложение GET возвратило отрицательное число два (-2),  то следующим
полем  ввода  станет третье поле GET.  Если  выходит за пределы
первого поля GET, то операция READ завершается.

     ERROR 
    ERROR  позволяет  вам  задавать  собственное  сообщение  об
ошибке в случае оценки VALID  как ложно (.F.). Выражение 
появляется на месте стандартного сообщения об ошибке.

     WHEN 
    Предложение WHEN разрешает или запрещает редактирование поля GET в
зависимости от результата оценки заданного условия . Прежде чем
курсор сможет попасть в данное поле для начала редактирования,  оценка
 должна дать логическое .T.  Если задано  предложение  WHEN,  а
оценка  дает .F., ввод не разрешен, а доступ к полю невозможен,
и курсор в таком случае перемещается к следующему полю GET.

     COLOR SCHEME 
     COLOR  (<список цветовых пар>)
    По умолчанию  цвет  выводимой оператором SAY информации берется из
цветовой схемы текущего окна или экрана.  Цветовая схема  представляет
собой набор  из  10 цветовых пар,  которые описывают цветовые характе-
ристикм окна.  Вы можете переопределить текущую цветовую  схему  путем
задания различных  предопределенных  заранее цветовых схем,  или путем
задания списка цветовых пар.
    Заданием списка цветовых пар в операторе SAY вы можете переопреде-
лять лишь некоторые характеристики цветовой схемы. Список цветовых пар
представляет собой 10 разделенных запятыми пар цветов.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         Пример программы        є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
SET TALK OFF
SET MESSAGE TO 24
CLEAR
PUBLIC mprompt
DEFINE POPUP popstate FROM 0,60 TO 15,65 PROMPT FIELD state
ON SELECTION POPUP popstate DO deactpop
SELECT 3
USE states ORDER state
SELECT 2
USE payments ORDER cust_id
SELECT 1
USE customer

SET RELATION TO cust_id INTO B

GO TOP
STORE .F. TO mexit
@ 0,0 TO 23,79 DOUBLE

DO WHILE NOT mexit
    @ 2,13 SAY 'Company: ' GET company COLOR gr+/b, r/w
    @ 4,13 SAY 'Contact: ' GET contact COLOR gr+/b, r/w
    @ 6,13 SAY 'Address: ' GET address1 COLOR gr+/b, r/w
    @ 8,13 SAY 'City: '  GET city COLOR gr+/b, r/w
    @10,13 SAY 'State: ' GET state PICTURE '!!' ;
             VALID v_state(state) COLOR gr+/b, r/w
    @10,28 SAY 'Zip: ' GET zip COLOR gr+/b, r/w
    @14,13 SAY 'Tax Rate: '
    @14,23 GET taxrate PICTURE '9.99' RANGE 3,8  ;
             MESSAGE 'Enter tax rate from 3.00 to 8.00'
    @16,13 SAY 'Payment: '
    @16,22 GET payments.amount PICTURE '$$$$,$$$.99' ;
             WHEN NOT EOF(2) MESSAGE SPACE(50)
    @18,13 SAY 'Date Paid: '
    @18,24 GET payments.date PICTURE '@D' ;
             WHEN NOT EOF(2) DEFAULT DATE()
    @22,30 SAY 'Press  to exit'
    READ
    SKIP
    IF LASTKEY() = 27 OR EOF()
        STORE .T. TO mexit
    ENDIF
ENDDO
CLEAR

*** Функция UDF, проверяющая правильность введения аббревеатуры штата ***

FUNCTION v_state
PARAMETER stateid
SELECT states
SEEK stateid
IF FOUND()
        SELECT customer
    RETURN .T.
ENDIF
DO WHILE NOT FOUND()
        ACTIVATE POPUP popstate
    SEEK mprompt
ENDDO
SELECT customer
REPLACE state WITH states.state
@ 10,21 GET state
CLEAR GETS
RETURN .T.

PROCEDURE deactpop

STORE PROMPT() TO mprompt
DEACTIVATE POPUP
RETURN
    Данный пример демонстрирует команду @...SAY/GET и доступные в  ней
опции.  Продемонстрировано использование опций COLOR,  PICTURE, RFNGE,
VALID и WHEN.
    В трех равочих областях открыто три базы данных. База данных STATE
иыпользуется как просмотровая таблица для  поиска  названий  штатов  и
проверки правильности их аббревиатур. Функция FUNCTION V_STATE, приво-
димая в конце примера,  является функцией, определяемой пользователем,
проверяющей правильность аббревиатуры названия штата;  если она невер-
на, то выдается всплывающее меню со всеми существующими аббревиатурами
названий штатов.
    Между базами данных CUSTOMER и PAYMENT устанавливается  отношение,
позволяющее выбирать информацию из обоих файлов.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є    Органы управления            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Что они из себя представляют
    В следующих  семи параграфах обсуждаются органы управления FoxPro.
Органы управления представляют собой области экрана,  используемые для
выбора, подтверждения или отмены действий.  Они могут появляться в ок-
нах, диалоговых блоках или на основном экране.  Блок проверки,  селек-
тивная кнопка  и  всплывающие меню являются обычными примерами органов
управления.
    FoxPro очень активно использует управляющий интерфейс. Для примера
достаточно взглянуть на диалоговые блоки Открыть Файл (Open File)  или
Установить параметры  печати  (Printer  Setup) и убедиться,  насколько
разнообразные управляющие средства  там  используются.  Дополнительная
информация о  порядке  использования  органов управления приводиться в
книгах документации по FoxPro "Руководство  по  Интерфейсу" (Interface
Guide) и "Начало Работы" (Getting Started).

           Краткое описание основных органов управления
    Ниже приводится краткое описание различных  органов  управления  и
порядка их использования:

    Блоки Проверки
    На экране блок проверки представляет собой пару квадратных  скобок
со строкой текста справа от них. Например:
    [X] All Files
Блок проверки  используется  для  маркировки  двух  состояний - истина
(.Т.) и ложь (.F.) или да или нет.

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

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

    Текстовые кнопки
    На экране текстовая кнопка представляет собой строку текста заклю-
чонную в угловые скобки. Например:
    < OK >
    
    Обычно текстовые кнопки используются для инициализации действий.

    Селективные кнопки
    Селективные кнопки представляют собой следующее:
    (.) Apples    (Яблоки)
    ( ) Apricots  (Абрикосы)
    ( ) Lemons    (Лимоны)
    ( ) Oranges   (Апельсины)
    Селективные кнопки напоминают кнопки выбора диапазонов автомобиль-
ного приемника - выбирая одну кнопку вы делаете ее текущей и тем самым
отпускаете нажатую до этого.  Знак .  (точка) указывает на выбранную в
настоящий момент кнопку.
    Селективные кнопки обычно используются для показа  нескольких  оп-
ций, только одна из которых может быть выбрана.

    Области модификации текста
    Область модификации текста представляет  собой  прямоугольную  об-
ласть экрана,  в  пределах  которой вы можете модифицировать и вводить
текст. Вводимый текст хранится в переменной памяти  или  в  поле  базы
данных.
    В этой области доступны все стандартные для FoxPro возможности ре-
дактирования: вырезание, копирование и вставка. В отличии от остальных
органов управления FoxPro (блоков проверки,  селективных  и  текстовых
кнопок, ...), эта  команда  в  своем синтаксисе использует слово EDIT,
вместо GET.
    Области редактирования текста обычно используются для обновления и
модификации  memo полей и длинных символьных полей.

    Невидимые кнопки
    Невидимые кнопки  представляют  собой прямоугольные области экрана
или окна которые могут выбираться. Для размещения поверх этих областей
текста могут использоваться команды @ ... SAY.
    Невидимые кнопки могут использоваться для создания  псевдо  иконок
или инициализации действий при нажатии кнопок "мыши" в поле данных.

           Как они работают
    Большинство органов управления создаются командой @ ... GET (толь-
ко область редактирования текста создается командой @ ... EDIT). Опции
PICTURE и FUNCTION команды @ ... GET определяют тип органа управления.
Эти опции  также содержат подсказки,  связанные с большинством органов
управления.
    Многие органы   управления   инициализируют  выполнение  некоторых
действий. Это действие задается опцией VALID.
    Органы управления  активизируются командой READ.  В зависимости от
заданных опций, при нажатии кнопки или выборе пункта выполнение коман-
ды READ завершается или не завершается.

    "Горячие" клавиши
    Для большинства органов управления могут быть определены  "  горя-
чие"  клавиши.  "Горячие"  клавиши обеспечивают быстрый способ нажатия
кнопок или выбора опций.  "Горячая" клавиши соответствует подсвеченной
букве  (обычно это первая буква в приглашении кнопки или пункте меню),
при нажатии которой заданное действие выполняется немедленно.

    Заблокированные органы управления
    Для обеспечения недоступности органа управления (или его части) вы
можете заблокировать его. Заблокированные управляющие средства, кнопки
и пункты  меню  появляются  изображаются  блокировочным цветом (обычно
блеклым) и не поддаются выбору.

    Краткое описание синтаксиса
    В следующей  таблице  приводятся  различия в синтаксисе,  опциях и
значениях по умолчанию различных управляющих средств.  Более подробная
информация дается при описании соответствующих команд.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і           Синтаксическая таблица органов управления                 і
ГДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДґ
іУправляющее іКод     і Дополнительные    іПо умолчанию іСпециальные  і
ісредство    іPICTURE/і коды опций        і             ісимволы      і
і            іFUNCTIONі PICTURE/FUNCTION  і             і             і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іБлоки       і *С     і N - не завершать  іНе завершать і\< -"Горячая"і
іпроверки    і        і T - завершать     і             і     клавиша і
і            і        і                   і             і\\ - Заблоки-і
і            і        і                   і             і     ровать  і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іНевидимые   і *I     і N - не завершать  іНе завершать і\\ - Заблоки-і
ікнопки      і        і T - завершать     іВертикальная і     ровать  і
і            і        і H - горизонтальнаяі             і             і
і            і        і V - вертикальная  і             і             і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іСписки      і &      і N - не завершать  іЗавершать    і   Нет       і
іпроверки    і        і T - завершать     і             і             і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іВсплывающие і ^      і N - не завершать  іНе завершать і\< -"Горячая"і
іменю        і        і T - завершать     і             і     клавиша і
і            і        і                   і             і\\ - Заблоки-і
і            і        і                   і             і     ровать  і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іТекстовые   і *      і N - не завершать  іЗавершать    і\< -"Горячая"і
ікнопки      і        і T - завершать     іВертикальная і     клавиша і
і            і        і H - горизонтальнаяі             і\\ - Заблоки-і
і            і        і V - вертикальная  і             і     ровать  і
і            і        і                   і             і\! - по умол-і
і            і        і                   і             і     чанию   і
і            і        і                   і             і\? - Escape  і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іСелективные і *R     і N - не завершать  іНе завершать і\< -"Горячая"і
ікнопки      і        і T - завершать     іВертикальная і     клавиша і
і            і        і H - горизонтальнаяі             і\\ - Заблоки-і
і            і        і V - вертикальная  і             і     ровать  і
ГДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДґ
іОбласти     і        і I - центровка     іВыравнивание і             і
іредактирова-і Нет    і J - выравнивание  іпо левой     і   Нет       і
іния текста  і        і по правой границе ігранице      і             і
АДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДЩ
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є     @ ... GET - Блоки проверки  є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создание блока проверки
    Синтаксис
@  GET 
        FUNCTION 
        | PICTURE 
        [DEFAULT ]
        [SIZE , ]
        [ENABLE | DISABLE]
        [MESSAGE ]
        [VALID ]
        [WHEN ]
        [COLOR SCHEME 
        | COLOR ]
    Замечания
Новая для FoxPro 2.0
    Смотри также
@ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SHOW GETS,
Функции, определяемые пользователем.

    Описание
    Эта разновидность команды @ ...  GET  предназначена  для  создания
блока проверки. Блок проверки используется для переключения между дву-
мя состояниями - истина (.Т.) или ложь (.F.), да или нет и т.д.
    На экране блок проверки представляет собой пару квадратных  скобок
со строкой текста справа от них. Например:
    [X] TAX Exempt
    Текст приглашения задается опциями  PICTURE  или  FUNCTION.  Когда
блок проверки  проверяется (условие истинно) между скобками устанавли-
вается знак Х.  Одной командой @ ...  GET создается только  один  блок
проверки. Для активации блоков используется команда READ.

            Опции

     (<строка,столбец>)
    Расположение блока проверки на экране или в активном окне задается
парой .  Координаты  задаются численными выра-
жениями.  Row может принимать значения от  0  до  максимального  числа
строк  на экране или в активном окне.  Column может принимать значения
от 0 до максимального числа столбцов на экране или  в  активном  окне.
Строки номеруются сверху-вниз, а столбцы слева-направо.

    GET 
    При задании проверки блока или  наоборот,  ваш  выбор  хранится  в
.  может быть переменной памяти, элементом массива или полем
базы данных.  должна иметь числовой или логический тип.
    При первом появлении блока проверки на экране или в окне, его про-
верка осуществляется, если  содержит не нулевое числовое значение
или логическую истину .Т.. Блок не проверяется, если  не ноль или
логическую ложь (.F.).
    Команда READ активизирует блок проверки.  Состояние блока проверки
после завершения работы команды READ  определяется  хранимым  в  
значением: 0 или .F. для проверяемого, 1 или .Т. для не проверяемого.

    FUNCTION  | PICTURE 
    При создании блока проверки вы обязательно должны  включать  опцию
FUNCTION, PICTURE или обе.  FUNCTION или PICTURE содержат код специфи-
кации блока проверки (он указывает на тип определяемой кнопки) и текст
его приглашения.  Код  *C является кодом спецификации всех блоков про-
верки.
    Символьное выражение   в опции FUNCTION должно всегда начи-
наться с *C.  Для создания приглашения после *C ставится пробел и  его
текст. Например, это предложение создает блок проверки Tax Exempt:
    .... FUNCTION '*C Tax Exempt' ...
    Выражение   в  опции PICTURE имеет тот же синтаксис,  что и
выражение в FUNCTION,  за исключением того,  что выражение  в  PICTURE
должно обязательно начинаться с АТ символа (@) со следующим за ним ко-
дом *C. Например, это предложение создает блок проверки Tax Exempt:
    .... PICTURE  '@*C Tax Exempt' ...
    Вы также можете включать обе опции FUNCTION и PICTURE для создания
блока проверки.   Если  включаются  обе  опции,  символьное  выражение
 в FUNCTION должно содержать *C для  создания  блока  проверки.
Символьное выражение  в PICTURE должно включать текст приглаше-
ния.
    Следующие примеры  демонстрируют  различные способы создания блока
проверки.  Блок проверки располагается на экране во  второй  строке  и
втором столбце.  Состояние блока (проверяемый или не проверяемый) хра-
нится в переменной памяти CHOICE.  Этот блок проверки создается в каж-
дом примере:
    [X] Tax Exempt
    Только опция FUNCTION:
STORE 1 TO choice
@ 2,2 GET choice FUNCTION '*C Tax Exempt'
READ

STORE 1 TO choice
STORE '*C Tax Exempt' TO mprompt
@ 2,2 GET choice FUNCTION mprompt
READ
     Только опция PICTURE:
STORE 1 TO choice
@ 2,2 GET choice PICTURE '@*C Tax Exempt'
READ

STORE 1 TO choice
@ 2,2 GET choice PICTURE '@*C' + ' Tax Exempt'
READ
     Обе опции вместе:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*C' PICTURE ' Tax Exempt'
READ

    Опции N и T в FUNCTION и PICTURE
    Непосредственно после кода С в предложениях FUNCTION и PICTURE мо-
нут присутствовать две опции,  определяющие должна ли команда READ за-
вершаться после выбора блока проверки:
Опция  Описание
  N    Не завершает выполнение READ после выбора блока проверки. Уста-
       навливается по умолчанию.
  Т    Завершает выполнение READ  после выбора блока проверки.

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

    "Горячие" клавиши
    "Горячая" клавиша  соответствует  подсвеченной букве,  при нажатии
которой немедленно осуществляется выбор  (изменение  состояния)  блока
проверки.  Для  создания  "горячей"  клавиши поместите обратный слэш и
знак меньше (/<) перед требуемым символом приглашения.
    Внимание !!!
    "Горячая клавиша" не выбирает блок проверки, если текущее поле яв-
ляется  областью  редактирования текста или полем ввода.  Вместо этого
символ "горячей" клавиши вводится в текущее поле.
    Следующий пример  создает блок проверки Tax Exemptс "горячей" кла-
вишей Е:
STORE 1 TO choice
@ 2,2 GET choice FUNCTION '*C' PICTURE ' Tax \
    При задании проверки блока или наоборот, состояние блока (проверя-
емый или не проверяемый) хранится в переменной памяти, элементе масси-
ва  или  поле базы данных.  Если вы задаете переменную памяти и она не
существует, то при включении предложения DEFAULT эта переменная памяти
автоматически создается  и инициализируется.  Если  является эле-
ментом массива или полем, то DEFAULT не создает .
    Внимание !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение   в  опции DEFAULT задает тип и начальное значение
инициализируемой переменной памяти.   должна иметь числовой  или
логический тип.  Ниже  приводятся  примеры  использования  предложения
DEFAULT в блоке проверки:
@ 5,0 GET choice FUNCTION '*C Tax exempt' DEFAULT .T.
READ

STORE .T. TO button
@ 5,0 GET choice FUNCTION '*C Tax exempt' DEFAULT button
READ

    SIZE ,
    Числовое выражение   задает высоту органа управления.  Блок
проверки всегда имеет высоту в одну строку,  поэтому значение  
всегда игнорируется. Но выражение  должно всегда присутствовать
при задании .
    По умолчанию,  ширина блока проверки определяется длиной приглаше-
ния. Числовое выражение   изменяет  ширину  блока  проверки  (в
столбцах). Если ширина, задаваемая , меньше ширины приглашения,
то приглашение не усекается.

    ENABLE|DISABLE
    По умолчанию,  блок  диалога является доступным при выполнении ко-
манды READ. Вы можете захотеть задержать возможность выбора блока про-
верки до выполнения определенных условий. Включение опции DISABLE пре-
дотвращает активацию блока проверки при выполнении команды READ.  Заб-
локированный блок проверки не может быть выбран и отображается в цвете
блокировки. Для  получения  доступа  к  заблокированным  командам  GET
используется команда SHOW GET ENABLED.

    MESSAGE 
    Символьное выражение  необязательного  предложения  MESSAGE
выдается при появлении блока проверки.  По умолчанию,  сообщение выда-
ется отцентрированным в последней строке "стола". Местоположение сооб-
щения может изменяться командой SET MЕSSAGE.

    VALID 
    Вы можете включить  необязательное  предложение  VALID.  Выражение
 проверяется  только  после осуществления выбора блока проверки
(проверяемый или не проверяемый).  Это означает, что VALID не проверя-
ется при установке на блок, а только после того как вы реально выбрали
его состояние посредством "мыши", клавиш Enter или Escape.
    Обычно  является функцией,  определяемой пользователем. Эти
функции позволяют делать очень  многое,  включая:  выбор,  обеспечение
доступности или блокировки других полей GET или объектов,  инициализа-
цию секций Browse, вызов других экранов ввода данных, позиционирование
на новую запись. Для завершения выполнения команды READ в функции, оп-
ределяемые пользователем,может включаться команда CLEAR READ.

    WHEN 
    В зависимости  от  логического значения выражения  необяза-
тельное предложение WHEN разрешает или наоборот запрещает выбор  блока
проверки. До  выбора  блока  выражение  должно быть оценено как
логическая истина (.Т.).  Если  оценивается как ложь (.F.),  то
блок проверки становится невыбираемым и пропускается,  если располага-
ется между другими полями GET или объектами.

     COLOR SCHEME 
     COLOR  (<список цветовых пар>)
    По умолчанию цвет блока проверки берется из цветовой схемы текуще-
го окна или экрана. Цветовая схема представляет собой набор из 10 цве-
товых пар,  которые описывают цветовые характеристикм окна.  Вы можете
переопределить  текущую цветовую схему путем задания различных предоп-
ределенных заранее цветовых схем,  или путем задания  списка  цветовых
пар.
    Этот пример показывает переопределение  одной  цветовой  схемы  на
другую, заранее предопределенную.
STORE 1 TO choice
@ 5,0 GET choice FUNCTION '*C Tax Exempt' COLOR SCHEME 4
READ
    Заданием списка  цветовых пар для блока проверки вы можете переоп-
ределять лишь некоторые характеристики цветовой схемы. Список цветовых
пар   представляет собой 10 разделенных запятыми пар
цветов.  Первая половина пары задает основной цвет (цвет приглашения).
Вторая  половина  задает  цвет  фона.  В  следующей таблице приводится
список цветовых пар с управляемыми ими аттрибутами.
 Номер     Атрибут блока проверки
 цветовой
 пары
  1        Не используется блоком проверки
  2        Не используется блоком проверки
  3        Не используется блоком проверки
  4        Не используется блоком проверки
  5        Сообщение
  6        Выбираемое приглашение блока проверки
  7        "Горячие" клавиши
  8        Не используется блоком проверки
  9        Доступное приглашение блока проверки
  10       Заблокированное приглашение блока проверки
    Следующие примеры определяют блоки проверки Tax Exempt с "горячей"
клавишей Е и цветовыми характеристиками:
    - Выбираемый приглашение блока выводится ярким белым цветом на си-
нем фоне (W+/B).
    - Символы "горячей" клавиши являются красными на синем фоне (R/B).
    - Доступный блок проверки выводится с желтым приглашением на синем
фоне (GR+/B).
    - Заблокированный  блок проверки выводится с серым приглашением на
синем фоне (W/B).
STORE 1 TO choice
@ 5,0 GET choice FUNCTION '*C Tax \ GET 
        FUNCTION 
        | PICTURE 
        [DEFAULT ]
        [SIZE , 
                [, ]]
        [ENABLE | DISABLE]
        [MESSAGE ]
        [VALID ]
        [WHEN ]
        [COLOR SCHEME 
        | COLOR ]
    Замечания
Новая для FoxPro 2.0
    Смотри также
@ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SHOW GETS,
Функции, определяемые пользователем.

    Описание

    Эта разновидность команды @ ... GET предназначена для создания не-
видимых кнопок.  Невидимые кнопки представляют собой прямоугольные об-
ласти экрана или окна которые могут выбираться.  Для размещения поверх
этих областей текста могут использоваться команды @ ... SAY. При выбо-
ре невидимой  кнопки символы в ней высвечиваются ярким цветом.  Кнопки
активизируются командой READ.

            Опции

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

    GET 
    При выборе невидимой кнопки номер,  соответствующий вашему  выбору
заносится в . Например, если вы создали четыре невидимые кнопки и
выбрали третью, то в  заносится 3. Начальное значение  опре-
деляет на какую кнопку устанавливается первоначальный выбор.

    FUNCTION  | PICTURE 
    При создании невидимых кнопок вы обязательно должны включать опцию
FUNCTION,  PICTURE или обе. FUNCTION или PICTURE содержат код специфи-
кации невидимых кнопок (он указывает на  тип  определяемой  кнопки)  и
точку  с  запятой для создания множественных невидимых кнопок.  Код *I
является кодом спецификации невидимых кнопок.
    Символьное выражение   в опции FUNCTION должно всегда начи-
наться с *I. Для создании более одной невидимой кнопки туда включается
точка с запятой для каждой дополнительной кнопки.  Например, это пред-
ложение создает три невидимые кнопки. Заметим, что оно содержит только
две точки с запятой:
    ... FUNCTION '*I ;;' ...
    Выражение   в  опции PICTURE имеет тот же синтаксис,  что и
выражение в FUNCTION,  за исключением того,  что выражение  в  PICTURE
должно обязательно начинаться с АТ символа (@) со следующим за ним ко-
дом *I. Например, это предложение создает три невидимые кнопки:
    ... PICTURE '@*I ;;' ...
    Вы также можете включать обе опции FUNCTION и PICTURE для создания
невидимых  кнопок.  Если  включаются  обе опции,  символьное выражение
 в FUNCTION должно содержать *I для создания невидимой  кнопки,
и  следующие за ней через пробел точки с запятой для создания несколь-
ких дополнительных невидимых кнопок.
Символьное выражение   в PICTURE может включать точки с запятой
для создания дополнительных невидимых кнопок.

    Примеры
    Следующие примеры демонстрируют различные синтаксические конструк-
ции для создания невидимых кнопок.  Создаются пять  невидимых  кнопок.
Номер, соответствующий  выбранной  кнопке  заносится в CHOICE.  Первая
кнопка располагается в 4-й строке и 2-м столбце экрана.  Каждая кнопка
имеет высоту две строки и ширину четыре столбца, и они разделяются од-
ной строкой.
    Только опция FUNCTION:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*I ;;;;' SIZE 2,4,1
READ

STORE 1 TO choice
STORE '*I ;;;;' TO mfunc
@ 4,2 GET choice FUNCTION mfunc SIZE 2,4,1
READ
    Только опция PICTURE
STORE 1 TO choice
@ 4,2 GET choice PICTURE '@*I ;;;;' SIZE 2,4,1
READ

STORE 1 TO choice
@ 4,2 GET choice PICTURE '@*I' + ' ;;;;' SIZE 2,4,1
READ

    Опции FUNCTION и PICTURE вместе
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*I' PICTURE ' ;;;;' SIZE 2,4,1
READ

STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*I ;;' PICTURE ';;' SIZE 2,4,1
READ

    Опции N, T, H и V в FUNCTION и PICTURE
    Непосредственно после кода *I в предложениях FUNCTION и PICTURE мо-
нут присутствовать опции, определяющие поведение (опции N и Т) и внеш-
ний вид (опции H и V) невидимых кнопок. Эти опции приведены ниже:
Опция  Описание
  N    Не завершает выполнение READ после выбора невидимой кнопки.
       Устанавливается по умолчанию.
  Т    Завершает выполнение READ  после выбора невидимой кнопки.
  H    Располагать невидимые кнопки по горизонтали.
  V    Располагать невидимые кнопки по вертикали.
       Устанавливается по умолчанию.
    Вы можете комбинировать опции Н и V с опциями N и Т,  как NH,  NV,
YH или TV.  Например,  это предложение определяет  вертикальный  набор
кнопок, который не завершает работу команды READ после выбора:
    ... FUNCTION '*INV ...'

    Блокировка невидимых кнопок
    Вы можете  заблокировать  невидимую  кнопку так,  что она не может
быть выбрана. Заблокированная кнопка отображается в блокировочном цве-
те. Для блокировки невидимой кнопки поместите два обратных слеша // до
точки с запятой, соответствующей этой кнопке.
    В следующем примере создаются 5 невидимых кнопок. Вторая и четвер-
тая кнопки блокируются путем установки двух символов  обратных  слешей
перед соответствующими им точками с запятой:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*I' ;
        PICTURE ' ;\\;;\\;' SIZE 2,4,1
READ

    DEFAULT 
    При нажатии невидимой кнопки ваш выбор записывается  в  переменную
памяти, элемент массива или поле базы данных. Если вы задаете перемен-
ную памяти и она не существует,  то при включении предложения  DEFAULT
эта переменная памяти автоматически создается и инициализируется. Если
 является элементом массива или  полем,  то  DEFAULT  не  создает
.
    Внимание !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение  в опции DEFAULT задает тип и начальное  значение
инициализируемой переменной памяти.  должна иметь числовой тип.
Ниже приводятся примеры использования предложения DEFAULT для  невиди-
мых кнопок:
@ 5,0 GET choice FUNCTION '*I ;;;;' DEFAULT 1
READ

STORE 3 TO button
@ 5,0 GET choice FUNCTION '*I ;;;;' DEFAULT button
READ

    SIZE ,[,]
    Предложение SIZE задает размер и расстояние между невидимыми кноп-
ками.  Выражения  и  соответственно задают высоту и ши-
рину каждой кнопки. По умолчанию высота и ширина равны 0.
    По умолчанию  отсутствует промежуток между вертикальными кнопками,
а горизонтальные кнопки располагаются через один  столбец.  Расстояние
между  невидимыми  кнопками  может задаваться выражением .  При
создании вертикальных кнопок,  определяет число строк между ни-
ми.  При  создании  горизонтальных  кнопок,    определяет число
столбцов между ними.

    ENABLE|DISABLE
    Невидимые кнопки  становятся  доступными  при  выполнении  команды
READ. Вы можете захотеть задержать возможность выбора невидимых кнопок
до выполнения определенных условий. Включение опции DISABLE предотвра-
щает активацию кнопок при выполнении команды READ. Заблокированные не-
видимые  кнопки не могут быть выбраны и отображаются в цвете блокиров-
ки. Блокировка отдельной невидимой кнопки, а не всего набора, описыва-
лась  выше  в  параграфе "Блокировка невидимых кнопок".  Для получения
доступа к заблокированным командам GET используется команда  SHOW  GET
ENABLED.

    MESSAGE 
    Символьное выражение  выдается при установке  на  невидимую
кнопку.  По умолчанию, сообщение выдается отцентрированным в последней
строке "стола". Местоположение сообщения может изменяться командой SET
MЕSSAGE.

    VALID 
    Вы можете включить  необязательное  предложение  VALID.  Выражение
 проверяется только после осуществления выбора невидимой кнопки.
    Обычно  является функцией,  определяемой пользователем. Эти
функции позволяют делать очень  многое,  включая:  выбор,  обеспечение
доступности или блокировки других полей GET или объектов,  инициализа-
цию секций Browse, вызов других экранов ввода данных, позиционирование
на новую запись. Для завершения выполнения команды READ в функции, оп-
ределяемые пользователем,может включаться команда CLEAR READ.

    WHEN 
    В зависимости от логического значения выражения    необяза-
тельное предложение WHEN разрешает или наоборот запрещает выборневиди-
мых кнопок. До выбора кнопки выражение  должно быть оценено как
логическая истина (.Т.).  Если  оценивается как ложь (.F.),  то
ни одна невидимая кнопка не может быть выбрана. Часто  является
функцией, определяемой пользователем.

     COLOR SCHEME 
     COLOR  (<список цветовых пар>)
    По умолчанию цвет невидимых кнопок берется из цветовой схемы теку-
щего окна или экрана.  Цветовая схема представляет собой набор  из  10
цветовых пар, которые описывают цветовые характеристикм окна. Вы може-
те переопределить текущую цветовую схему путем задания различных  пре-
допределенных заранее цветовых схем, или путем задания списка цветовых
пар.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         Пример программы        є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Приводимый пример демонстрирует  использование  невидимых  кнопок.
Команда @  ...  SAY  выводит  на  экран  4  набора  символов  (Hearts,
Diamonds, Clubs и Spades (Примечание:  это  названия  карт  -  сердце,
бриллиант, клуб и пика).

STORE 0 TO choice
CLEAR
@ 2,2  SAY REPLICATE(CHR(3),2)  && Hearts
@ 3,2  SAY REPLICATE(CHR(3),2)
@ 2,10 SAY REPLICATE(CHR(4),2)  && Diamonds
@ 3,10 SAY REPLICATE(CHR(4),2)
@ 2,18 SAY REPLICATE(CHR(5),2)  && Clubs
@ 3,18 SAY REPLICATE(CHR(5),2)
@ 2,26 SAY REPLICATE(CHR(6),2)  && Spades
@ 3,26 SAY REPLICATE(CHR(6),2)
@ 1,1,4,4    BOX
@ 1,9,4,12   BOX
@ 1,17,4,20  BOX
@ 1,25,4,28  BOX
*** Следующая строка создает 4 невидимых кнопки и ***
*** выполняет процедуру SHOWCARD после выбора ***
***
***
@ 1,1 GET choice PICTURE '@*IH ;;;' SIZE 4,4,4 ;
        VALID(SHOWCARD()) MESSAGE 'Pick a card, any card!'
READ CYCLE
***
***
PROCEDURE SHOWCARD  && Процедура, выполняемая после выбора кнопки
@ 6,1 CLEAR
DO CASE
        CASE _CUROBJ = 1                && Выбрана 1-я кнопка
        @ 6,1 SAY 'Hearts'
        CASE _CUROBJ = 2                && Выбрана 2-я кнопка
        @ 6,9 SAY 'Diamonds'
        CASE _CUROBJ = 3                && Выбрана 3-я кнопка
        @ 6,17 SAY 'Clubs'
        CASE _CUROBJ = 4                && Выбрана 4-я кнопка
        @ 6,25 SAY 'Spades'
ENDCASE
RETURN .T.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є        @ ... GET - Списки       є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создание списка.
    Синтаксис
@  GET  | 
        [FUNCTION ]
        | [PICTURE ]
        FROM 
        [RANGE  [, ]]
        | POPUP 
        [DEFAULT ]
        [SIZE , ]
        [ENABLE | DISABLE]
        [MESSAGE ]
        [VALID ]
        [WHEN ]
        [COLOR SCHEME 
        | COLOR ]
    Замечания
Новая для FoxPro 2.0
    Смотри также
@ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), SHOW GETS, DEFINE
POPUP, Функции, определяемые пользователем.

    Описание
    Эта разновидность  команды  @  ...  GET предназначена для создания
списка.  Список содержит выбираемые вами элементы. Для выбора элемента
надо  перейти  на  него и нажать в это время Enter или два раза кнопку
"мыши".
    На экране  список  представляет  собой вертикальный список возмож-
ностей внутри некоторой рамки,  часто с полосами  прокрутки  с  правой
стороны.  Полосы прокрутки позволяют более быстро перемещаться по эле-
ментам списка с помощью "мыши" и визуально отображать текущее местопо-
ложение. Другой способ быстрого перемещения по списку, это использова-
ние клавиши Home для перехода к первому элементу и клавиши End для пе-
рехода  к последнему элементу.  Второй способ работает вне зависимости
от наличия в списке полос прокрутки.
    Элементы списка могут браться или из массива,  или из всплывающего
меню. Для  построения  списка  из  массива  используется  опция   FROM
 (<массив>).  При  использовании опции POPUP  (<имя
меню>) список строится из всплывающего  меню,  которое  предварительно
создано командой DEFINE POPUP.  Разрешается использование только одной
опции FROM или POPUP,  но не обеих сразу. Список активизируется коман-
дой READ.

            Опции

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

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

    Установка начального состояния
    При появлении списка значение  или  определяет, на какой
элемент списка (если он вообще есть) устанавливается указатель. Напри-
мер, если  или  равно 4,  то при активации списка командой
READ указатель будет установлен на 4-й элемент. Если  или 
не соответствуют  ни  какому  элементу  списка  (значение меньше 1 или
больше числа элементов в списке),  то указатель вообще не устанавлива-
ется.

    FROM 
    Опция FROM  строит список из массива. Массив может быть 1 и
2-х размерным.  Если  используется массив с размерностью 1,  то первый
элемент массива будет первым элементом списка,  второй элемент массива
вторым элементом списка и т.д.
    При использовании массива  размерности  2  для  построения  списка
используются элементы в первом столбце массива. Первый элемент массива
является первым элементом списка,  второй элемент того же столбца вто-
рым элементом списка и т.д.

    RANGE [,]
    Элементы списка начинаются с первого элемента массива.  Вы  можете
задавать  различные начальные элементы в массиве путем включения опции
RANGE .  Например,  если массив имеет размерность 1  и  
равно 3, то третий элемент массива будет первым элементом списка, чет-
вертый элемент массива - вторым элементом списка и т.д.
    Позиции элементов  в массивах размерности 2 нумеруются по строкам.
Например предположим, что вы создали массив 3х3:
 a b c
 d e f
 g h i
    Элементы a,  b и c располагаются в позициях 1,  2 и 3. Элементы d,
e, f - в позициях 4,  5, 6 и т.д. При использовании двумерных массивов
только элементы столбца в котором находится элемент с номером  
становятся элементами списка. Поэтому, например, если  равно 2,
то элементами списка станут элементы b,  e и h.  Если  равно 5,
то ими станут только элементы e и h.
    Если вы установили начальный элемент параметром ,  то паре-
метром    вы  можете  также  установить общее число элементов в
списке. Если  не включается,  то элементами  списка  становятся
все элементы  массива  начиная  с элемента  и до конца массива.
Кроме того, элементы списка всегда принадлежат одному столбцу.
    При выполнении  команды  SHOW GETS опция RANGE всегда перепроверя-
ется. И если значения   или    изменились,  то  в  соот-
ветствии с ними происходит обновление списка.
    Содержимое списка  может  динамически  изменяться  -  модификацией
массива вы  можете  вставлять  и  удалять его элементы.  Манипуляции с
массивами обеспечиваются функциями ACOPY(),  ADEL(),  ADIR(),  AINS(),
ALEN(), ASCAN() и ASORT().

    POPUP  (<имя меню>)
    Элементы списка могут быть созданы и из всплывающего меню, предва-
рительно созданного командой DEFINE POPUP.  Каждый появляющийся в меню
пункт используется для создания элементов списка.  Для создания списка
с элементами из меню вы должны вначале определить соответствующее меню
командой DEFINE POPUP.  Команда DEFINE POPUP детально обсуждается ниже
в этом  руководстве.  В этой опции используется тоже имя ,
что и в команде DEFINE POPUP.
    Вы можете включить в DEFINE POPUP опцию PROMPT и тем самым создать
меню (а следовательно и список),  содержащее значения поля базы  дан-
ных, имена  доступных  на диске файлов или названия полей базы данных.
Для создания списка со значениями поля базы данных при  создании  меню
включите опцию  PROMPT FIELD.  Для создания списка,  содержащего имена
доступных в настоящий момент файлов на диске,  включите PROMPT  FILES.
Для создания  списка  с  названиями  полей базы данных включите PROMPT
STRUCTURE.
    Некоторые доступные  при  использовании команды DEFINE POPUP опции
влияют на создаваемый из соответствующего меню список.  Символ  марки-
ровки, по умолчанию ромбик, располагается сразу за выбранным из списка
элементом. Если опция MARK включается в DEFINE POPUP, то будет исполь-
зоваться  символ маркировки,  отличный от установленного по умолчанию.
Использованием в DEFINE POPUP ключевого слова MARGIN вы  можете  выде-
лить дополнительное  место  в  списке  для символа маркировки.  Если в
DEFINE POPUP включается ключевое слово SCROLL, то справа от списка бу-
дут располагаться полосы прокрутки.
    Следующая программа демонстрирует создание списка из  всплывающего
меню. DEFINE  POPUP используется для создания спускающегося меню,  со-
держащего имена доступных на диске баз данных.  Имена баз данных появ-
ляются как  элементы списка.  Опцией MARK изменяется символ маркировки
(вместо того, что используется по умолчанию). MARGIN выделяет дополни-
тельное место для символа маркировки,  и SCROLL размещает полосы прок-
рутки справа от списка.
CLEAR
SET TALK OFF
STORE 1 TO mchoice

DEFINE POPUP scrollopts FROM 0,0 PROMPT FILES LIKE *.DBF ;
        MARK CHR(16) MARGIN SCROLL

@ 2,2 GET mchoice POPUP scrollopts SIZE 8,20

READ        && Активация списка

    FUNCTION  | PICTURE 
    Включайте FUNCTION  '&T' или PICTURE '@&T' для завершения выполне-
ния команды READ после выбора элемента.  Использование  FUNCTION  '&N'
или PICTURE  '@&N' изменит поведение по умолчанию и не завершит работу
команды READ после выбора элемента. Например:
    ... FUNCTION '&T' ...
    ... PICTURE '@&T' ...

    DEFAULT 
    При выборе  элемента  списка результат заносится в .  Если вы
задаете  как переменную памяти и она не существует,  то при вклю-
чении  предложения  DEFAULT эта переменная памяти автоматически созда-
ется и инициализируется. Если  является элементом массива или по-
лем, то DEFAULT не создает .
    Внимание !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение   в  опции DEFAULT задает тип и начальное значение
инициализируемой переменной памяти.   должна иметь числовой  или
символьный тип.

    SIZE ,
    Ширина списка определяется шириной наиболее длинного его элемента.
Число пунктом меню или элементов  массива  задает  число  отображаемых
элементов списка.  Включая  опцию SIZE вы можете сами задавать длину и
ширину списка. Длина списка измеряется в строках и задается выражением
, ширина  списка  измеряется  в  столбцах и задается выражением
.
    Если все  элементы списка одновременно не умещаются на экране,  то
справа автоматически появляются полосы прокрутки.  Если список  созда-
ется из  DEFINATE  POPUP в которой используется ключевое слово SCROLL,
то справа от списка всегда появляются полосы прокрутки.

    ENABLE|DISABLE
    Вы можете  захотеть  задержать возможность выбора из списка до вы-
полнения определенных условий.  Включение опции DISABLE  предотвращает
активацию  списка при выполнении команды READ.  Заблокированный список
не может быть выбран и отображаются в цвете блокировки.  Для получения
доступа  к  заблокированным командам GET используется команда SHOW GET
ENABLED.

    MESSAGE 
    Символьное выражение    выдается  при  установке на элемент
списка.  По умолчанию, сообщение выдается отцентрированным в последней
строке "стола". Местоположение сообщения может изменяться командой SET
MЕSSAGE.

    VALID 
    Выражение   проверяется  только  после осуществления выбора
элемента списка.  VALID не проверяется при перемещении по  списку,  но
при нажатии Enter или кнопки "мыши" сразу осуществляется проверка.
    Обычно  является функцией,  определяемой пользователем. Эти
функции позволяют делать очень  многое,  включая:  выбор,  обеспечение
доступности или блокировки других полей GET или объектов,  инициализа-
цию секций Browse, вызов других экранов ввода данных, позиционирование
на новую запись. Для завершения выполнения команды READ в функции, оп-
ределяемые пользователем, может включаться команда CLEAR READ.

    WHEN 
    WHEN выполняется при первом перемещении  (установке)  на  элемент.
Подобно VALID  выражение  WHEN обычно является функцией,  определяемой
пользователем.

    COLOR SCHEME 
    COLOR  (<список цветовых пар>)
    По умолчанию цвета "прокручиваемого" списка  берутся  из  цветовой
схемы текущего окна или экрана.  Цветовая схема представляет собой на-
бор из 10 цветовых пар,  которые описывают цветовые характеристикм ок-
на. Вы можете переопределить текущую цветовую схему путем задания раз-
личных предопределенных  заранее  цветовых  схем,  или  путем  задания
списка цветовых пар.
    В этом примере используется созданный в предыдущем примере  массив
и переопределяется одна цветовая схема на другую, предопределенную за-
ранее:
CLEAR
SET TALK OFF
STORE 1 TO mchoice

DEFINE POPUP scrollopts FROM 0,0 PROMPT FILES LIKE *.DBF ;
        MARK CHR(16) MARGIN SCROLL COLOR SCHEME 4

@ 2,2 GET mchoice POPUP scrollopts SIZE 8,20

READ        && Активация списка
    Заданием списка  цветовых  пар для списка вы можете переопределять
лишь некоторые характеристики  цветовой  схемы.  Список  цветовых  пар
 представляет собой 10 разделенных запятыми пар цве-
тов.  Первая половина пары задает основной  цвет  (цвет  приглашения).
Вторая  половина  задает  цвет  фона.  В  следующей таблице приводится
список цветовых пар с управляемыми ими аттрибутами.
 Номер     Атрибут списка
 цветовой
 пары
  1        Заблокированный элемент
  2        Доступный элемент
  3        Рамка и полоса прокрутки ''
  4        Не используется списком
  5        Сообщение
  6        Выбираемый элемент списка
  7        Не используется списком
  8        Не используется списком
  9        Доступный список
  10       Заблокированный список
    '' - Управляющие средства изображаются цветом фона. Полоса изобра-
жается бледным основным цветом.
    В этом примере используется созданный в предыдущем примере  массив
и определяются следующие цветовые характеристики списка:
    - Выбираемый элемент изображается ярким белым цветом на синем фоне
(W+/B).
    - Доступный список выводится с элементами желтого цвета  на  синем
фоне (GR+/B).
    - Заблокированный список выводится  белым  цветом  на  синем  фоне
(W/B).
    Пример:
CLEAR
SET TALK OFF
STORE 1 TO mchoice

DEFINE POPUP scrollopts FROM 0,0 PROMPT FILES LIKE *.DBF ;
        MARK CHR(16) MARGIN SCROLL COLOR ,GR+/B,,,,W+/B,,,,W/B

@ 2,2 GET mchoice POPUP scrollopts SIZE 8,20

READ        && Активация списка
    При пропуске цветовой пары на ее месте вы должна ставить запятую.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         Пример Программы        є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
SET TALK OFF
DEFINE WINDOW example FROM 4, 3 TO 21,76 TITLE ' List Example ' ;
        FLOAT CLOSE SHADOW SYSTEM COLOR SCHEME 8

*** Заполнение массива cityarray данными о городах ***
SELECT DISTINCT city FROM customer INTO ARRAY cityarray
SELECT customer

*** Определение всплывающего меню со структурой customer ***
DEFINE POPUP popstru PROMPT STRUCTURE SCROLL MARGIN MARK CHR(16)

*** Определение всплывающего меню с данными из поля company ***
DEFINE POPUP popfield PROMPT FIELD company SCROLL MARGIN MARK CHR(16)
ACTIVATE WINDOW example
@ 1,3 SAY 'Structure Popup:'

*** Получение информации с использованием предопределенного ***
*** меню popstru ***
@ 2,2 GET liststructure POPUP popstru SIZE 11,20;
  DEFAULT FIELD(1,'customer') WHEN refresh();
  VALID dispitem(liststructure) COLOR SCHEME 9
@ 13,3 SAY liststructure SIZE 1,18
@ 1,26 SAY 'Field Popup:'

*** Получение информации с использованием предопределенного ***
*** меню popfield ***
@ 2,25 GET listfield POPUP popfield SIZE 11,20 ;
        DEFAULT company WHEN refresh() VALID dispitem(listfield);
         COLOR SCHEME 9
@ 13,26 SAY listfield SIZE 1,18
@ 1,50 SAY 'Array of City Names:'

*** Получение информации с использованием предопределенного ***
*** массива ***
@ 2,49 GET arrayitem FROM cityarray SIZE 11,20 ;
        DEFAULT cityarray(1) WHEN refresh() VALID dispitem(arrayitem);
 COLOR SCHEME 9
@ 13,50 SAY arrayitem SIZE 1,18
@ 14,63 GET ok FUNCTION '*t \!OK' DEFAULT 1 SIZE 1,6
READ CYCLE SHOW popshow()  && Активация GET-ов
RELEASE WINDOW example
RELEASE POPUPS popstru, popfield

FUNCTION refresh
*** Обновление информации окна без вызова подпрограммы ***
SHOW GETS OFF

FUNCTION dispitem
*** Показ выбранного элемента ***
PARAMETER item
WAIT WINDOW 'You have chosen: '+ALLTRIM(item) NOWAIT

FUNCTION popshow
*** Показ текущего элемента каждого списка ***
@ 13,3 SAY liststructure SIZE 1,18
@ 13,26 SAY listfield SIZE 1,18
@ 13,50 SAY arrayitem SIZE 1,18

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є @ ... GET - Всплывающие меню    є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создание всплывающих меню.
    Синтаксис
@  GET 
        FUNCTION 
        | PICTURE 
        [DEFAULT ]
        [FROM ]
         [RANGE  [, ]]
         [SIZE , ]
        [ENABLE | DISABLE]
        [MESSAGE ]
        [VALID ]
        [WHEN ]
        [COLOR SCHEME |COLOR ]
    Замечания
Новая для FoxPro 2.0
    Смотри также
@ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SHOW GETS,
Функции, определяемые пользователем.

    Описание
    Эта разновидность команды @ ...  GET  предназначена  для  создания
всплывающих меню. На экране всплывающее меню представляет собой прямо-
угольник,  ограниченный двойными линиями справа и  внизу.  При  выборе
всплывающего меню разворачивается список возможных опций. Список опций
задается в FUNCTION и PICTURE.

            Опции

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

    GET 
    Пункт меню,  на который первоначально устанавливается определяется
значением .  может быть переменной памяти, элементом массива
или полем базы данных.  При выборе пункта меню ваш выбор  заносится  в
. Если  для  выхода  из  меню нажата клавиша Escape,  то значение
 остается неизменным.
     должна  иметь  числовой или символьный тип.  Если  сим-
вольного типа,  то в нее заносится приглашение выбранного пункта. Если
 числового типа, то заносится номер выбранного пункта меню.

    Установка начального состояния
    При появлении всплывающего меню значение  определяет, на какой
пункт меню (если он вообще есть) устанавливается указатель.
    Если  числовая, то первоначально указатель устанавливается на
пункт меню с номером,  указываемым .  Например,  если элемент или
поле равно 1, то указатель будет установлен на первый пункт меню. Если
значение   не соответствует никакому пункту меню (значение меньше
1 или больше числа пунктов) то первоначально появляется пустое меню.
    Если   имеет  символьный  тип,  то осуществляется сравнение с
учетом регистра между  и пунктами меню.  При сравнении  игнориру-
ются  все  управляющие символы,  лидирующие и хвостовые пробелы.  Если
найден подходящий пункт,  то при инициализации на него устанавливается
указатель.  Если  ни  один  из  пунктов меню не соответствует значению
,  то это значение появляется лицевой стороне меню и  добавляется
как временный пункт в конец меню.

    FUNCTION  | PICTURE 
    При создании всплывающих меню вы обязательно должны включать опцию
FUNCTION,  PICTURE или обе. FUNCTION или PICTURE содержат код специфи-
кации всплывающего меню и список опций.  Код ^ является кодом специфи-
кации всплывающих меню.
    Важно !!!
    Опции могут быть заданы и в предложении FROM.  Если опции задаются
там, то вам необязательно включать их в FUNCTION или PICTURE.
    Однако, если  вы включаете FROM,  символ ^ обязательно должен быть
задан в FUNCTION или PICTURE.
    Символьное выражение   в опции FUNCTION должно всегда начи-
наться с ^.  Для создании пунктов, появляющихся в меню, включается че-
рез пробел после ^ список соответствующих им опций, разделенных точкой
с запятой.  Следующий пример создает пункты меню Cash, Charge, Net 30,
Net 60 :
    ... FUNCTION '^ Cash;Charge;Net 30;Net 60'...
    Выражение   в  опции PICTURE имеет тот же синтаксис,  что и
выражение в FUNCTION,  за исключением того,  что выражение  в  PICTURE
должно обязательно начинаться с АТ символа (@) со следующим за ним ко-
дом ^. Например, это предложение создает пункты меню Cash, Charge, Net
30, Net 60 :
    ... PICTURE '@^ Cash;Charge;Net 30;Net 60'...
    Вы также можете включать обе опции FUNCTION и PICTURE для создания
всплывающих меню.  Если включаются  обе  опции,  символьное  выражение
  в FUNCTION должно содержать ^ для создания всплывающего меню,
и следующие за ней через пробел опции его пунктов.  Символьное выраже-
ние  в PICTURE может включать приглашения для создания дополни-
тельных пунктов меню.
    Следующие примеры иллюстрируют различные способы создания всплыва-
ющих меню.  Всплывающее меню располагается на экране в 4  строке  и  2
столбце. Оно содержит 4 пункта :  Cash,  Charge,  Net 30, Net 60. Меню
инициализируется переменной памяти CHOICE. При выборе пунктов всплыва-
ющего меню, результат заносится в CHOICE.
    Только опция FUNCTION:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '^ Cash;Charge;Net 30;Net 60'
READ

STORE 1 TO choice
STORE '^ Cash;Charge;Net 30;Net 60' TO mfunc
@ 4,2 GET choice FUNCTION mfunc
READ
    Только опция PICTURE:
STORE 1 TO choice
@ 4,2 GET choice PICTURE '@^ Cash;Charge;Net 30;Net 60'
READ

STORE 1 TO choice
@ 4,2 GET choice PICTURE '@^' + ' Cash;Charge;Net 30;Net 60'
READ
    Опции FUNCTION и PICTURE вместе:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '^' ;
        PICTURE ' Cash;Charge;Net 30;Net 60'
READ

STORE 1 TO choice
@ 4,2 GET choice FUNCTION '^ Cash;Charge' ;
        PICTURE ';Net 30;Net 60'
READ

    Опции N и T в FUNCTION и PICTURE
    Непосредственно после кода ^ в предложениях FUNCTION и PICTURE мо-
нут присутствовать две опции,  определяющие должна ли команда READ за-
вершаться после выбора пункта меню:
Опция  Описание
  N    Не завершает выполнение READ после выбора пункта меню. Уста-
       навливается по умолчанию.
  Т    Завершает выполнение READ  после выбора пункта меню.

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

    "Горячие" клавиши
    "Горячая" клавиша представляет собой подсвеченную  букве,  нажатие
которой вызывает немедленный выбор соответствующего пункта.  "Горячие"
клавиши работают только после разворачивания меню.  Для присвоения го-
рячей  клавиши  перед  требуемым символом в пункте установите обратный
слеш и знак меньше (\<).
    Этот пример  присваивает пунктам Cash и Charge "горячие" клавиши C
и R соответственно:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '^ \
    При выборе пункта меню ваш выбор записывается в переменную памяти,
элемент массива или поле базы данных.  Если вы задаете  как пере-
менную  памяти  и  она  не  существует,  то  при включении предложения
DEFAULT эта переменная памяти автоматически создается и  инициализиру-
ется.  Если  является элементом массива или полем,  то DEFAULT не
создает .
    Внимание !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение   в  опции DEFAULT задает тип и начальное значение
инициализируемой переменной памяти.   должна иметь числовой  или
символьный тип.  Ниже  приводятся  примеры  допустимого  использования
DEFAULT для создания всплывающих меню:
@ 5,0 GET choice FUNCTION '^ Cash;Charge;Net 30;Net 60' DEFAULT 'Cash'
READ

@ 5,0 GET choice FUNCTION '^ Cash;Charge;Net 30;Net 60' DEFAULT 3
READ

    FROM 
    Опция FROM  может использоваться для создания  всплывающего
меню из массива.  Если вы создаете пункты меню с помощью FROM ,
то вы всеравно должны задать @^ в PICTURE или ^ в FUNCTION. Например:
    ... FROM array PICTURE '@^' ...
    ... FROM array FUNCTION '^' ...
    При задании FROM  все другие опции, заданные в FUNCTION или
PICTURE игнорируются. Массив может иметь размерность 1 или 2.
    Пункты, появляющееся в таком меню,  берутся из элементов заданного
массива .  Если используется массив с размерностью 1, то первый
элемент массива будет первым пунктом меню, второй элемент массива вто-
рым пунктом меню и т.д.
    При использовании   массива  размерности  2  для  построения  меню
используются элементы в первом столбце массива. Первый элемент массива
является  первым  пунктом меню,  второй элемент того же столбца вторым
пунктом меню и т.д.

    RANGE [,]
    По умолчанию пункты меню начинаются с первого элемента массива. Вы
можете задавать различные начальные элементы в массиве путем включения
опции  RANGE  .  Например,  если  массив  имеет размерность 1 и
 равно 3, то третий элемент массива создает первый пункт меню ,
четвертый элемент массива - второй пункт меню и т.д.
    Позиции элементов  в массивах размерности 2 нумеруются по строкам.
Например предположим, что вы создали массив 3х3:
 a b c
 d e f
 g h i
    Элементы a,  b и c располагаются в позициях 1,  2 и 3. Элементы d,
e,  f - в позициях 4, 5, 6 и т.д. При использовании двумерных массивов
только  элементы столбца в котором находится элемент с номером 
создают пункты меню.  Поэтому,  например, если  равно 2, то для
создания  пунктов  меню будут использоваться элементы b,  e и h.  Если
 равно 5, то будут использоваться только элементы e и h.
    Если вы установили начальный элемент параметром ,  то паре-
метром  вы  можете  также  установить  общее  число  элементов,
используемых для создания пунктов меню. Число появляющихся пунктов ме-
ню задается параметром .  Если  не включается, то в соз-
дании  пунктов  меню участвуют все элементы массива начиная с элемента
 и до конца массива.
    В случае двумерного массива  задает число используемых эле-
ментов массива,  содержащихся в одном столбце с начальным элементом  с
номером .  Например, если  равно 2 и  равно 3, то
меню будет создаваться из второго элемента массива  и  следующих  двух
элементов этого же столбца.
    Содержимое всплывающего меню может динамически изменяться -  моди-
фикацией массива вы можете вставлять и удалять его пункты, а также су-
ществует возможность изменения числа появляющихся пунктов.  При выпол-
нении  команды  SHOW  GETS опция RANGE всегда перепроверяется.  И если
значения  или  изменились, то в соответствии с ними про-
исходит обновление меню.  Манипуляции с массивами обеспечиваются функ-
циями ACOPY(), ADEL(), ADIR(), AINS(), ALEN(), ASCAN() и ASORT().

    Пример
    Следующий пример демонстрирует возможности динамического изменения
всплывающего меню.  Могут выбираться две селективные кнопки  Vegetable
(овощи) и Fruits (фрукты). Другой набор селективных кнопок задает цвет
овощей и фруктов:  Red (красный), Yellow (желтый) или Green (зеленый).
Всплывающее меню  модифицируется  и  обновляется  при выборе различных
кнопок.
CLEAR
SET TALK OFF
STORE 1 TO color, fruitorveg, popchoice, start
DIMENSION poparray(4,3)
STORE 'Apples' TO poparray(1,1)
STORE 'Bananas' TO poparray(1,2)
STORE 'Limes' TO poparray(1,3)
STORE 'Strawberries' TO poparray(2,1)
STORE 'Lemons' TO poparray(2,2)
STORE 'Grapes' TO poparray(2,3)
STORE 'Radishes' TO poparray(3,1)
STORE 'Corn' TO poparray(3,2)
STORE 'Lettuce' TO poparray(3,3)
STORE 'Beets' TO poparray(4,1)
STORE 'Squash' TO poparray(4,2)
STORE 'Celery' TO poparray(4,3)

@ 9, 2  SAY 'Color:'
@ 11,2  SAY 'Type:'
@ 9, 10 GET color  FUNCTION '*RH \[,]
    По умолчанию ширина всплывающего меню определяется шириной его са-
мого широкого  пункта.  Вы  можете принудительно изменить ширину меню,
путем задания .  Другой аргумент SIZE - ,  игнорируется.
Для него вы можете задавать любое числовое значение.

    ENABLE|DISABLE
    По умолчанию всплывающее меню становится доступным при использова-
нии  команды READ.  Вы можете захотеть задержать возможность выбора из
меню до выполнения определенных условий.  Включение опции DISABLE пре-
дотвращает активацию меню при выполнении команды READ. Заблокированное
меню не может быть выбрано и отображается в цвете  блокировки.  Блоки-
ровка  одного  пункта меню описывается в параграфе "Блокировка пунктов
меню" выше.  Для получения  доступа  к  заблокированным  командам  GET
используется команда SHOW GET ENABLED.

    MESSAGE 
    Символьное выражение  выдается при активации меню. По умол-
чанию, сообщение выдается отцентрированным в последней строке "стола".
Местоположение сообщения может изменяться командой SET MЕSSAGE.

    VALID 
    Вы можете  включить  необязательное  предложение VALID.  Выражение
 проверяется только после осуществления выбора пункта  меню.Это
значит, что VALID не проверяется при перемещении по меню, но при нажа-
тии клавиш Enter, Spase или кнопки "мыши" сразу осуществляется провер-
ка.
    Обычно  является функцией,  определяемой пользователем. Эти
функции позволяют делать очень  многое,  включая:  выбор,  обеспечение
доступности или блокировки других полей GET или объектов,  инициализа-
цию секций Browse, вызов других экранов ввода данных, позиционирование
на новую запись. Для завершения выполнения команды READ в функции, оп-
ределяемые пользователем, может включаться команда CLEAR READ.

    WHEN 
    В зависимости от логического значения выражения    необяза-
тельное  предложение WHEN разрешает или наоборот запрещает выбор пунк-
тов меню.  До начала выбора из меню выражение  должно быть оце-
нено  как  логическая истина (.Т.).  Если  оценивается как ложь
(.F.),  то всплывающее меню не может быть активировано и оно пропуска-
ется с переходом на другую команду GET.

    COLOR SCHEME 
    COLOR  (<список цветовых пар>)
    По умолчанию цвета всплывающего меню берутся из цветовой схемы те-
кущего окна или экрана.  Цветовая схема представляет собой набор из 10
цветовых пар, которые описывают цветовые характеристикм окна. Вы може-
те переопределить текущую цветовую схему путем задания различных  пре-
допределенных заранее цветовых схем, или путем задания списка цветовых
пар.
    В этом  примере  показано  переопределение одной цветовой схемы на
другую, предопределенную заранее:
STORE 1 TO choice
@ 5,0 GET choice FUNCTION '^ Cash;Charge;Net 30;Net 60' ;
        COLOR SCHEME 4
READ
    Заданием списка цветовых пар для всплывающего меню вы можете пере-
определять лишь некоторые характеристики цветовой схемы. Список цвето-
вых  пар   представляет собой 10 разделенных запятыми
пар цветов.  Первая половина пары задает основной цвет (цвет приглаше-
ния). Вторая половина задает цвет фона. В следующей таблице приводится
список цветовых пар с управляемыми ими аттрибутами.
 Номер     Атрибут всплывающего меню
 цветовой
 пары
  1        Заблокированный пункт
  2        Доступный пункт
  3        Рамка
  4        Не используется всплывающим меню
  5        Сообщение
  6        Выбираемый пункт + органы управления
  7        "Горячие" клавиши
  8        Не используется всплывающим меню
  9        Доступные органы управления
  10       Заблокированные органы управления

    В этом примере определяется меню с пунктами Cash,  Charge, Net 30,
Net 60,  имеющее "горячие" клавиши С и R для пунктов Cash и  Charge  соот-
ветсвенно. Пункты меню имеют следующие цветовые характеристики:
    - Выбираемый пункт изображается ярким белым цветом на  синем  фоне
(W+/B).
    - Символы "горячих" клавиш являются красными на синем фоне (R/B).
    - Доступные пункты выводятся желтым цветом на синем фоне (GR+/B).
    - Заблокированный пункты - белым цветом на синем фоне (W/B).
    Пример:
STORE 1 TO choice
@ 5,0 GET choice FUNCTION '^ \




?????? ???????????