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



 

Часть 3

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

    Описание
    На экране текстовая кнопка представляет собой строку текста заклю-
чонную в угловые скобки. Например:
    < OK >
    
    Строка текста, часто называемая приглашением, задается в предложе-
ниях  FUNCTION  или PICTURE.  Обычно текстовые кнопки используются для
инициализации действий.  Производимое действие задается опцией  VALID.
Текстовая кнопка инициализируется командой READ.

            Опции

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

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

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

    Только опция FUNCTION:
STORE 1 TO choice
@ 2,2 GET choice FUNCTION '* OK;Cancel' SIZE 1, 8
READ

STORE 1 TO choice
STORE '* OK;Cancel' TO mprompts
@ 2,2 GET choice FUNCTION mprompts SIZE 1, 8
READ
    Только опция PICTURE:
STORE 1 TO choice
@ 2,2 GET choice PICTURE '@* OK;Cancel' SIZE 1, 8
READ

STORE 1 TO choice
@ 2,2 GET choice PICTURE '@*' + ' OK;Cancel' SIZE 1, 8
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 '*NН ...'

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

    "Горячие" клавиши
    "Горячая" клавиша представляет собой подсвеченную  букву,  нажатие
которой вызывает немедленный выбор соответствующей кнопки. Для присво-
ения "горячей" клавиши перед требуемым символом  в  приглашении  соот-
ветствующей кнопки установите обратный слеш и знак меньше (\<).
    Внимание !!!
    "Горячей" клавишей  не  выбирается требуемая кнопка,  если текущим
полем является область модификации текста или поле GET.  В этом случае
нажатие  "горячей"  клавиши вызовет ввод соответствующего ей символа в
текущее поле.
    В следующем примере создаются кнопки OK и Cancel с горячими клави-
шами О и С соответственно:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '* \>. Для создания кнопки по умолчанию перед соответствующим  приг-
лашением ставится  обратный слеш и восклицательный знак (\!).  На одну
команду READ может определяться не более  одной  текстовой  кнопки  по
умолчанию.
    В этом примере кнопка ОК определяется текстовой кнопкой по умолча-
нию.
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '* \!OK;Cancel'
READ

    Кнопки Escape
    Кнопка Escape выбирается автоматически при нажатии клавиши Escape.
Такой прием часто используется для обеспечения быстрого выхода из  те-
кущей  программы.  Для  создания кнопки Escape перед соответсвующим ей
приглашением ставится обратный слеш и знак вопроса (\?).  На одну  ко-
манду READ может определяться не более одной текстовой кнопки Escape.
    В этом примере кнопка Cancel определяется текстовой кнопкой Escape.
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '* OK;\?Cancel'
READ

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

@ 5,0 GET choice FUNCTION '* OK;Cancel' DEFAULT 2
READ

STORE 'OK' TO button
@ 5,0 GET choice FUNCTION '* OK;CANCEL' DEFAULT button
READ

    SIZE ,[,]
    Выражения  задает высоту объекта.  Текстовая кнопка  всегда
имеет высоту в 1 строку,  поэтому числовое выражение  игнориру-
ется.
    По умолчанию ширина каждой текстовой кнопки определяется длиной ее
приглашения. Изменяя числовое выражение  вы можете изменять ши-
рину (в столбцах) текстовой кнопки.  Если ширина,  задаваемая ,
меньше ширины приглашения текстовой кнопки,  то приглашения не  усека-
ется.
    По умолчанию отсутствует промежуток между вертикальными  кнопками,
а  горизонтальные кнопки располагаются через один столбец.  Расстояние
между текстовыми кнопками может  задаваться  выражением  .  При
создании вертикальных кнопок,  определяет число строк между ни-
ми.  При создании  горизонтальных  кнопок,    определяет  число
столбцов между ними.
    В следующем примере демонстрируются возможности опции SIZE:
CLEAR
@ 5,5 GET choice FUNCTION '* OK;Cancel' ;
         DEFAULT 1 SIZE 1,10,0
@ 5,20 GET choice FUNCTION '* OK;Cancel' ;
         DEFAULT 1 SIZE 1,10,2
READ

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

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

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

    Пример
    В приведенным примере  демонстрируются  возможности  использования
функции, определяемой   пользователем.  По  вертикали  выводятся  пять
текстовых кнопок.  Так как опция Т включена,  команда READ не заверша-
ется после выбора одной из кнопок.  При выборе кнопки вызывается опре-
деляемая пользователем функция GOREC.  Кнопки используются для переме-
щения указателя записи.
USE ?
IF EMPTY (DBF())
  WAIT WINDOW 'No database open' NOWAIT
ENDIF

SET TALK OFF
DEFINE WINDOW one FROM 3,5 TO 18,20 FLOAT DOUBLE COLOR SCHEME 5
ACTIVATE WINDOW one
@ 1,2 GET choice FUNCTION '*NV Next;Prior;Top;Bottom;Quit';
 SIZE 1,10,1 VALID GOREC() DEFAULT(1)
READ CYCLE
CLEAR WINDOW

PROCEDURE gorec
DO CASE
        CASE choice = 1
                SKIP
                IF EOF()
                  SKIP -1
                ENDIF
        CASE choice = 2
                SKIP -1
                IF BOF()
                  SKIP
                ENDIF
        CASE choice = 3
                GO TOP
        CASE choice = 4
                GO BOTTOM
        CASE choice = 5
                CLEAR READ
ENDCASE
@ 12,6 SAY ALLTRIM(STR(RECNO()))
RETURN

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

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

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

    Описание
    Эта разновидность команды @ ...  GET используется для создания се-
лективных кнопок. Селективные кнопки напоминают кнопки выбора диапазо-
нов автомобильного приемника - выбирая одну кнопку вы делаете ее теку-
щей и тем самым отпускаете нажатую до этого.  Знак . (точка) указывает
на выбранную в настоящий момент кнопку.
    На экране селективные кнопки представляют собой следующее:
    (.) Apples    (Яблоки)
    ( ) Apricots  (Абрикосы)
    ( ) Lemons    (Лимоны)
    ( ) Oranges   (Апельсины)
    Строка текста справа  от  кнопки  называется  приглашением.  Текст
приглашения  задается предложениями FUNCTION или PICTURE.  Селективная
кнопка инициализируется командой READ.

            Опции

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

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

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

    Примеры
    Следующие примеры демонстрируют различные синтаксические конструк-
ции для создания селективных кнопок.  Первая селективная кнопка распо-
лагается на экране в четвертой строке и втором столбце.  Создаются че-
тыре селективные кнопки - Apples,  Apricots,  Lemons и Oranges.  Номер
выбираемой кнопки заносится в переменную памяти. В каждом примере соз-
дается набор селективных кнопок подобный этому:
    (.) Apples    (Яблоки)
    ( ) Apricots  (Абрикосы)
    ( ) Lemons    (Лимоны)
    ( ) Oranges   (Апельсины)
    Только опция FUNCTION:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*R Apples;Apricots;Lemons;Oranges'
READ

STORE 1 TO choice
STORE '*R Apples;Apricots;Lemons;Oranges' TO mfunc
@ 4,2 GET choice FUNCTION mfunc
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 '*R' ;
        PICTURE ' Apples;Apricots;Lemons;Oranges'
READ

STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*R Apples;Apricots' ;
        PICTURE ';Lemons;Oranges'
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 '*RNV ...'

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

    "Горячие" клавиши
    "Горячая" клавиша представляет собой подсвеченную  букву,  нажатие
которой вызывает немедленный выбор соответствующей кнопки. Для присво-
ения "горячей" клавиши перед требуемым символом  в  приглашении  соот-
ветствующей кнопки установите обратный слеш и знак меньше (\<).
    Внимание !!!
    "Горячей" клавишей не выбирается требуемая  кнопка,  если  текущим
полем является область модификации текста или поле GET.  В этом случае
нажатие "горячей" клавиши вызовет ввод соответствующего ей  символа  в
текущее поле.
    В следующем  примере  определяются  селективные   кнопки   Apples,
Apricots, Lemons и Oranges с "горячими" клавишами А для Apples и Р для
Apricots:
STORE 1 TO choice
@ 4,2 GET choice FUNCTION '*R' ;
        PICTURE ' \
    При нажатии селективной кнопки ваш выбор записывается в переменную
памяти,  элемент  массива или поле базы данных.  Если вы задаете 
как переменную памяти и она не существует,  то при включении предложе-
ния  DEFAULT эта переменная памяти автоматически создается и инициали-
зируется.  Если  является элементом массива или полем, то DEFAULT
не создает .
    Внимание !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение   в  опции DEFAULT задает тип и начальное значение
инициализируемой переменной памяти.   должна иметь числовой  или
символьный тип.  Ниже  приводятся  примеры  допустимого  использования
DEFAULT для создания селективных кнопок:
*** Пример 1
@ 5,0 GET choice FUNCTION '*R' +;
  ' Apples;Apricots;Lemons;Oranges' DEFAULT 'Apricots'
READ

*** Пример 2
@ 5,0 GET choice FUNCTION '*R Apples;Apricots;Lemons;Oranges';
  DEFAULT 2
READ

*** Пример 3
STORE 'Apricots' TO button
@ 5,0 GET choice FUNCTION '*R \,[,]
    Выражения  задает высоту объекта. Селективная кнопка всегда
имеет высоту в 1 строку,  поэтому числовое выражение  игнориру-
ется. Но  должна обязательно присутствовать, если вы хотите за-
дать  и .
    По умолчанию  ширина каждой селективной кнопки определяется длиной
ее приглашения.  Изменяя числовое выражение  вы можете изменять
ширину  (в  столбцах)  селективной  кнопки.  Если  ширина,  задаваемая
,  меньше ширины приглашения селективной кнопки, то приглашения
не усекается.
    По умолчанию отсутствует промежуток между вертикальными  кнопками,
а  горизонтальные кнопки располагаются через один столбец.  Расстояние
между селективными кнопками может задаваться выражением  .  При
создании вертикальных кнопок,  определяет число строк между ни-
ми.  При создании  горизонтальных  кнопок,    определяет  число
столбцов между ними.
    В следующем примере демонстрируются возможности опции SIZE:
CLEAR
@ 5,5 GET choice FUNCTION '*R'+ ;
        ' \
    Символьное выражение  выдается при указании на  селективную
кнопку.  По умолчанию, сообщение выдается отцентрированным в последней
строке "стола". Местоположение сообщения может изменяться командой SET
MЕSSAGE.

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

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

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

    Описание
    Эта команда создает прямоугольную область модификации  текста  для
редактирования  .   может быть переменной памяти,  элементом
массива переменных памяти,  полем базы данных или  memо  полем.  
должна  иметь символьный тип.  В этой области доступны все стандартные
для FoxPro возможности редактирования: вырезание, копирование и встав-
ка.  Текст в области модификации может прогручиваться по вертикали. По
горизонтали осуществляется автоматический переход на новую  строку.  В
отличии  от остальных органов управления FoxPro (блоков проверки,  се-
лективных и текстовых кнопок,  ...),  эта команда в  своем  синтаксисе
использует слово EDIT, вместо GET.
    При активации области модификации текста командой READ, содержимое
 отображается  в  этой области для редактирования.  При выходе из
области модификации текста, его содержимое снова возвращается в .
    По умолчанию,  для  сохранения изменений достаточно нажать клавиши
Tab или Ctrl+Tab. Выходя таким образом вы сохраняете все сделанные из-
менения  и перемещаетесь к следующему полю GET или следующему объекту.
Если клавиша Tab уже определена,  то вместо нее используется Ctrl+Tab.
Более  подробная  информация  о  ключевом слове TAB приводиться ниже в
этой главе.
    Для выхода из области модификации текста без сохранения  изменений
используется клавиша Escape. Заметим, однако, что если вы редактируете
memo поле и задана опция VALID,  нажатие этой клавиши может  сохранить
или не сохранить изменения,  в зависимости от значения,  возвращаемого
VALID. Более подробная информация  о  VALID  приведена  далее  в  этой
части.

            Опции

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

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

    FUNCTION 
    В предложение  FUNCTION  может  включаться одна из следующий опций
выравнивания текста в области редактирования.  Любые другие символы  в
FUNCTION будут игнорироваться. Эти опции следующие:
    I - центрирование текста в области модификации.
    J - выравнивание текста по правому краю.  По умолчанию текст в об-
ласти модификации выравнивается по левому краю.
    При включении обеих опций, опция J имеет приоритет.
    В этом примере создается область модификации в которой  текст  вы-
равнивается по правому краю:
STORE 'This will be edited' TO text
@ 4,2 EDIT text FUNCTION 'J' SIZE 5,50
READ

    DEFAULT 
    При редактировании области текста сам текст читается и сохраняется
в в переменной памяти, элементе массива, поле базы данных или memo по-
ле.  Если  вы задаете  как переменную памяти и она не существует,
то при включении предложения DEFAULT эта переменная  памяти  автомати-
чески  создается  и  инициализируется.  Если   является элементом
массива или полем, то DEFAULT не создает .
    Внимание !!!
    Если опция DEFAULT не включена и  не существует,  то выдается
предупреждение об ошибке 'Переменная  не найдена'('Variable 
not found').
    Если опция DEFAULT присутствует и  существует, то DEFAULT иг-
норируется.
    Выражение   в  опции DEFAULT задает тип и начальное значение
инициализируемой переменной памяти.  должна иметь символьный или
memo  тип.  Ниже  приводятся примеры допустимого использования DEFAULT
для создания областей модификации:
@ 5,0 EDIT text DEFAULT 'This will be edited' SIZE 5,50
READ

@ 5,0 EDIT text DEFAULT SPACE(20) SIZE 5,50
READ

    SIZE ,[,]
    Опция SIZE обязательно должна присутствовать;  она задает высоту и
ширину области модификации текста.  Высота области модификации в стро-
ках задается в ,  ширина в столбцах - в .  Если  
равно 1,  то создается специальная одностроковая область. В нем вы мо-
жете осуществлять горизонтальную прокрутку.  Нажатием клавиши Enter вы
переходите к следующему полю GET или следующему объекту.
    Необязательное числовое  выражение   задает число символов,
которые можно редактировать,  начиная с первого символа в .  Если
 опущено, то вся переменная  может редактироваться.

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

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

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

    ERROR 
    Когда VALID оценивается как ложь (.F.) по умолчанию выдается сооб-
щение "Invalid Input" ("Неправильный ввод"). Включая предложение ERROR
вы можете изменить это сообщение на задаваемое вами.  Символьное выра-
жение  выводится в рамке в верхнем правом углу экрана.

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

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

    SCROLL
    Если переменная    слишком велика,  чтобы уместится в области
модификации текста,  вы можете осуществлять ее  прокрутку.  Для  этого
используются клавиши управления курсором, PgUp, PgDown, Home или End и
их комбинации с клавишей Ctrl. Для перемещения по тексту можно пользо-
ваться и "мышью".
    Если опция SCROLL присутствует,  то справа от области  модификации
текста выводятся полосы прокрутки. Полосы прокрутки позволяют осущест-
влять более быстрое перемещение по тексту с помощью "мыши" и визуально
указывают на  ваше  местоположение  в  области редактирования.  Полосы
прокрутки появляются только в  случае,  если  текст  является  слишком
большим, чтобы полностью поместится в области модификации текста.

    TAB
    По умолчанию,  при нахождении в области модификации текста нажатие
клавиши Tab  не вставляет в текст символа табуляции.  Нажатие Tab (или
Ctrl+Тab) сохраняет все ваши изменения, деактивирует область модифика-
ции текста и переходит к следующему полю GET или следующему объекту.
    Однако, если вы включаете ключевое слово TAB, то нажатие этой кла-
виши  вставляет  символ  табуляции по месту расположения курсора.  Для
сохранения все ваших изменений,  деактивции области модификации текста
и  перехода к следующему полю GET или следующему объекту,  в этом слу-
чае, вы должны нажать комбинацию клавиш Ctrl+Tab.

    COLOR SCHEME 
    COLOR  (<список цветовых пар>)
    По умолчанию цвета области модификации текста берутся из  цветовой
схемы текущего окна или экрана.  Цветовая схема представляет собой на-
бор из 10 цветовых пар,  которые описывают цветовые характеристикм ок-
на. Вы можете переопределить текущую цветовую схему путем задания раз-
личных предопределенных  заранее  цветовых  схем,  или  путем  задания
списка цветовых пар.
    Этот пример показывает переопределение  одной  цветовой  схемы  на
другую, заранее предопределенную.
STORE 'To be edited' TO text
@ 5,0 EDIT text COLOR SCHEME 4 SIZE 5,50
READ
    Заданием списка  цветовых для области модификации текста вы можете
переопределять лишь некоторые характеристики  цветовой  схемы.  Список
цветовых пар  представляет собой 10 разделенных запя-
тыми пар цветов.  Первая половина пары задает основной цвет  .  Вторая
половина задает цвет фона.  В следующей таблице приводится список цве-
товых пар с управляемыми ими аттрибутами.
 Номер     Атрибут области модификации текста
 цветовой
 пары
  1        Не используется областью модификации текста
  2        Доступная область модификации текста
  3        Полоса прокрутки ''
  4        Не используется областью модификации текста
  5        Сообщение
  6        Выбираемая область модификации текста
  7        Не используется областью модификации текста
  8        Не используется областью модификации текста
  9        Не используется областью модификации текста
  10       Заблокированная область модификации текста
    '' - Управляющие средства изображаются цветом фона. Полоса изобра-
жается бледным основным цветом.
    В этом примере определяется область модификации текста и  задаются
следующие цветовые характеристики списка:
    - Когда текст выбран, то он изображается ярким белым цветом на си-
нем фоне (W+/B).
    - Доступная область модификации текста выводится с текстом желтого
цвета на синем фоне (GR+/B).
    - Заблокированная область модификации текста выводится  с  текстом
белого цветом на синем фоне (W/B).
    Пример:
STORE 'To be edited' TO text
@ 5,0 EDIT text SIZE 5,50 COLOR ,GR+/B,,,,W+/B,,,,W/B
READ
    При пропуске цветовой пары на ее месте вы должна ставить запятую.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            @ ... BOX            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Рисование прямоугольника
    Синтаксис
@ ,  BOX []
    Смотри также
@ ... TO

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

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

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

    Примеры:
@ 10,20,14,60 BOX

@ 10,20,14,60 BOX REPLICATE(CHR(177),9)
    В первом примере прямоугольник будет нарисован  одинарной  линией.
Во  втором  примере прямоугольник будет состоять из множества сплошных
прямоугольничков.  REPLICATE() возвращает девяти сплошных  прямоуголь-
ничков.  Команда @ ... BOX использует их в качестве символов отрисовки
каждого угла и сторон,  и для заполнения внутреннего пространства пря-
моугольника.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           @ ... CLEAR           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Очистка области экрана или окна
    Синтаксис
@  [CLEAR | CLEAR TO ]
    Смотри также
CLEAR

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

    Опции
    
    Координаты верхнего  левого  угла  очищаемого экрана или активного
для вывода окна.

    [CLEAR | CLEAR TO ]

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

    Примеры
    В первом примере экран или окно очищаются со строки 15 и  вниз  до
конца.
@ 15,0 CLEAR
    Во втором  примере выполняется очистка некоторой прямоугольной об-
ласти.  Ее верхний  левый  угол  определяется  экранными  координитами
(10,0),а нижний правый - (22,79).
@ 10,0 TO 22,79 CLEAR

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           @ ... FILL            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Изменение цвета в заданной области экрана.
    Синтаксис
@  FILL TO 
        [COLOR SCHEME  | COLOR ]
    Смотри также
SET COLOR

    Описание
    Данная форма команды @ изменяет цвета существующего текста в  пря-
моугольной области экрана или окна.  Данная команда позволяет устанав-
ливать цветовые аттрибуты фона и переднего плана только  для  уже  су-
ществующего текста.  Любой текст,  выводимый в указанную область после
выдачи команды @...FILL,  будет изображаться цветами по умолчанию. До-
полнительную  информацию об определении цветов см.  в описании команды
SET COLOR.

    Опции
     FILL TO 
    Верхний левый угол этой области определяется первой парой  коорди-
нит  ,  а  нижний  правый  угол - второй парой координат
.

    [COLOR SCHEME  | COLOR ]
    Если предложение  COLOR  или  COLOR SCHEME опущено,  то происходит
очистка заданной прямоугольной области экрана,  как в  случае  команды
@...CLEAR.

    Пример
    В следующем примере реализованы несколько команд @ ... FILL, кото-
рые изменяют на экране цвета слова FoxPro.  Программа определяет теку-
щий видеорежим и последовательно изменяет цвет каждой  буквы  в  слове
FoxPro. Предполагается использование цветовой схемы по умолчанию.  Эта
программа наиболее наглядно работает на цветном мониторе.
IF SET('TALK') = 'ON' && TALK должно быть выключено
   SET TALK OFF
   savetalk = 'ON'
ELSE
   savetalk = 'OFF'
ENDIF

*** Определяем видеорежим и устанавливаем координаты экрана ***
row = INT((SROWS() - 14) / 2)
column = INT((SCOLS() - 80) / 2)

SET TALK &savetalk && Восстанавливаем первоначальную установку

*** Очищаем экран и выводим на него FoxPro ***
CLEAR
=SYS(2017)

*** Изменяем цвет буквы F в FoxPro ***
@ row, column+1    FILL TO row+3, column+16    COLOR GR+/B
@ row+4, column+1  FILL TO row+10, column+8    COLOR GR+/B

*** Изменяем цвет первой буквы о в FoxPro ***
@ row+4, column+10 FILL TO row+10, column+22   COLOR R+/B

*** Изменяем цвет буквы х в FoxPro ***
@ row+4, column+23 FILL TO row+10, column+35   COLOR R/B

*** Изменяем цвет буквы Р в FoxPro ***
@ row, column+36   FILL TO row+10, column+50   COLOR BG/B

*** Изменяем цвет буквы r в FoxPro ***
@ row+4, column+51 FILL TO row+10, column+63   COLOR G/B

*** Изменяем цвет второй буквы о в FoxPro ***
@ row+4, column+64 FILL TO row+10, column+79   COLOR B+/B

*** Изменяем цвет сообщения Copyright ***
@ row+11, column   FILL TO row+15, column+79   COLOR W/B

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           @ ... MENU            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создание всплывающего меню.
    Синтаксис
@  MENU , 
  [, ] [TITLE ] [SHADOW]
    Замечания
Включена для  обеспечения  совместимости  с более ранними версиями - в
FoxPro 2.0 для создания меню  и  всплывающих  меню  используется  Menu
Builder (Построитель Меню).
    Смотри также
CREATE POPUP, DEFINE POPUP, MENU, MENU TO, READ MENU

    Описание
    Данная форма команды @ позволяет создавать всплывающее меню в  лю-
бом желаемом месте экрана или активного окна.
    Всплывающее меню представляет  собой  ограниченный  прямоугольник,
содержащий список опций, из которых нужно сделать выбор. Многие всплы-
вающие меню могут также содержать заданный вами заголовок, который бу-
дет  появляться в верхней части окна меню.  Всплывающие меню активиру-
ются командой READ MENU.  Одновременно активным может являться  только
одно всплывающее меню.
    DEFINE POPUP и ACTIVATE POPUP являются другой парой команд, позво-
ляющих создавать и активизировать всплывающие меню. Они работают неза-
висимо от  команд @ ... MENU и READ MENU.

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

    
    Одномерный массив,  содержащий опции,  появляющиеся во всплывающем
меню.  Элементы меню должны быть символьного типа, а длина каждого от-
дельного элемента меню не должна превышать 76 символов.

    
    Общее число пунктов,  доступное во всплывающем меню.  Если 
имеет 10 элементов, а значение  равно 5, то во всплывающем меню
будут доступны первые 5 элементов массива .

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

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

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

    Пример программы:
SET TALK OFF
CLEAR
DIMENSION choices(3)
STORE `Цыпленок' TO choices(1)
STORE `Мясо' TO choices(2)
STORE `Рыба' TO choices(3)
STORE 0 TO mchoice
@ 5,0 MENU choices,3 TITLE `Обеденное меню'
READ MENU TO mchoice

DO CASE
      CASE mchoice=1
            @ 10,0 SAY `На обед вы получите цыпленка'
      CASE mchoice=2
            @ 10,0 SAY `На обед вы получите мясо'
      CASE mchoice=3
            @ 10,0 SAY `На обед вы получите рыбу'
ENDCASE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є          @ ... PROMPT           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создание меню типа световой линейки (строки меню).
    Синтаксис
@  PROMPT 
        [MESSAGE ]
    Замечания
Включена для  обеспечения  совместимости  с более ранними версиями - в
FoxPro 2.0 для создания меню  и  всплывающих  меню  используется  Menu
Builder (Построитель Меню).
    Смотри также
CREATE MENU, MENU TO, SET CONFIRM, SET MESSAGE

    Описание
    Данный вариант команды @ используется при создании  и  организации
меню  типа световой линейки (линейки меню).  Последовательность команд
@...  PROMPT определяет пункты линейки меню и назначает их позиции  на
экране или в активном окне.
    После определения всех опций PROMPT для  вызова  световой  линейки
меню выдается команда MENU TO.
    После того,  как выбор сделан, в переменную памяти, заданную в ко-
манде MENU TO , возвращается число, соответствующее вашему вы-
бору. Это число определяется последовательностью, в которой были опре-
делены пункты PROMPT. Например, если было определено пять пунктов меню
PROMPT и вы выбрали третий из них,  то команда MENU  ТО    по-
местит в переменную памяти число 3.
    Выбор пункта меню выполняется следующими способами:
    * Нажатием Enter в момент, когда на световой линейке выделен жела-
емый пункт PROMPT.
    * Нажатием пробела в момент, когда на световой линейке выделен же-
лаемый пункт PROMPT.
    * Нажатием в этот момент кнопки "мыши".
    Пункт меню может быть заблокирован путем установки символа  обрат-
ного слеша (\) перед текстом этого пункта. Заблокированный пункт появ-
ляется в линейке меню,  но не может быть выбран.  Вы можете также соз-
дать  "горячие"  клавиши для линейки меню.  Для этого перед символом в
тексте пункта меню, который вы хотите назначить как "горячую" клавишу,
вы должны поставить обратный слеш и знак меньше (\<). При нажатии кла-
виши, соответствующей "горячей", вы немедленно выберете этот пункт ме-
ню.  При  пользовании "горячими" клавишами нет необходимости подсвечи-
вать нужный пункт и затем нажимать Enter или Spacebar.
    Если в приглашении пункта меню символ встречается более одного ра-
за, только его первое появление становится "горячей" клавишей.  Напри-
мер:
@ 1,20 PROMPT 'AD\ PROMPT 
    Координаты экрана или окна,  где линейка меню  будет  расположена.
row задает строку экрана или окна, column - столбец. Если row одинако-
ва для каждой команды @ ... PROMPT, то создается горизонтальная линей-
ка меню.  Если column одинаков для всех команд @ ...  PROMT, то пункты
меню располагается вертикально.

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

    Пример программы:
SET TALK OFF
CLEAR
SET MESSAGE TO 24 CENTER

@ 1,20 PROMPT `\ TO 
        [DOUBLE | PANEL | ]
        [COLOR SCHEME  | COLOR ]
    Смотри также
@...BOX, SET COLOR

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

    Опции
     TO 
     это   координаты   его   верхнего  левого  угла,  а
 это координаты его нижнего правого угла.  Если значения
 и  одинаковы, то рисуется горизонтальная линия. Если зна-
чения  и  одинаковы, то рисуется вертикальная линия.

    DOUBLE | PANEL |  (<строка символов контура>)

    Если используется необязательное ключевое слово DOUBLE,  то контур
прямоугольника будет нарисован не одинирной, а двойной линией.
    Если используется необязательное ключевое слово PANEL,  то  контур
прямоугольника будет нарисован сплошной заполненной линией.
    Если задана  необязательная  строка   символов   контура   ,  то  прямоугольник  (или линии) будет изображаться при помощи
заданных в ней символов.  Символы берутся из строки в следующем поряд-
ке:  верх,  низ,  левая сторона,  правая сторона,  верхний левый угол,
верхний правый угол, нижний левый угол, нижний правый угол.
    При задании   элементы строки должны стоять в пра-
вильной последовательности,  разделяться запятыми и записываться в од-
ной из следующих форм:
    1. Буквенные символы должны быть  взяты  в  стандартные  строковые
разделители: одинарные кавычки, двойные кавычки или квадратные скобки.
    @ 1,10 TO 22,45 `=', `=', `і', `і', `+', `+', `+', `+'
    2. Символьные  выражения  или переменные должны разделяться только
запятой.
    STORE `=' TO END
    STORE `і' TO SIDE
    STORE `+' TO CORNER
    @ 1,10 TO 22,45 END,END,SIDE,SIDE,CORNER,CORNER,CORNER,CORNER
    3. Десятичное (ASCII)  значение  желаемого  символа  можно  задать
функцией CHR( ). Это дает полный доступ к Расширенному набору символов
IBM.
    STORE CHR(61) TO END
    STORE CHR(124) TO SIDE
    STORE CHR(43) TO CORNER
    @ 1,10 TO 22,45 END,END,SIDE,SIDE,CORNER,CORNER,CORNER,CORNER
или
    @ 1,10 TO 22,45 CHR(61),CHR(61),CHR(124),CHR(124),
    CHR(43),CHR(43),CHR(43),CHR(43)
    4. Чтобы  сделать  команду  более короткой,  можно воспользоваться
средством макроподстановки.
    STORE [`=', `=', `і', `і', `+', `+', `+', `+'] TO BOX_STRING
    @ 1,10 TO 22,45 &BOX_STRING
    Если вы  желаете,  чтобы  все элементы прямоугольника изображались
одним и тем же символом,  просто задайте один символ для верха прямоу-
гольника,  и тогда все остальные символы будут определены равными пер-
вому. Следующий пример рисует прямоугольник звездочками.
    STORE `*' TO BOX_CHAR
    @ 1,10 TO 22,45 BOX_CHAR
    Вы можете  также  опустить один или более символов строки контура,
но при этом оставив соответствующие разделяющие запятые,  и тогда дан-
ный символ будет взят неизменным по текущему умолчанию.

    COLOR SCHEME  | COLOR 
    Опциональные предложения COLOR и COLOR SCHEME позволяют устанавли-
вать цветовые аттрибуты переднего плана и/или фона. Эти аттрибуты мож-
но задать как непосредственно, предложением COLOR, либо назначить цве-
товую схему предложением COLOR SCHEME.  Если данные предложения опуще-
ны, то цвета будут соответствовать установленным для экрана по умолча-
нию.  Подробную информацию об установке цветов см.  в описании команды
SET COLOR.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               ABS               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает абсолютное значение числового выражения.
    Синтаксис
ABS()
    Возвращаемый тип
Числовой
    Смотри также
INT(), ROUND(), SIGN()

    Описание
    Функция ABS() возвращает абсолютное значение числового выражения.

    Параметр  
    Функция возвращает абсолютное значение числового выражения .

    Примеры
? ABS(-45)
45
? ABS(10-30)
20
? ABS(30-10)
20
STORE 40 TO num1
STORE 2 TO num2
? ABS(num2-num1)
38

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ACCEPT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Прием строки символьных даннын с экрана
    Синтаксис
ACCEPT [] TO 
    Замечания
Включена для  обеспечения  совместимости  с более ранними версиями - в
FoxPro 2.0 используйте @ ... SAY/GET.
    Смотри также
@ ... SAY/GET, INPUT, READ, WAIT

    Описание
    Данная команда позволяет ввод символьных данных непосредственно  в
переменную памяти  без заключения строки в кавычки.
    Если вам требуется выполнять контроль достоверности вводимых  дан-
ных или отслеживать ошибки, то предпочтительнее использовать для ввода
данных команду @...GET.
    Команда ACCEPT отличается от команды INPUT тем, что ACCEPT:
    * Всегда рассматривает вводимые данные как строки символов, вместо
того, чтобы присваивать им тип данных в зависимости от ввода.
    * Не требует заключать вводимые символы в кавычки.

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

    
    Если переменная памяти  к  моменту  использования  команды
еше не определена,  то ACCEPT выполнит ее определение. Данные, введен-
ные с помощью команды ACCEPT, всегда хранятся в виде строки символов.
    При нажатии клавиши Enter без ввода данных,  переменная памяти бу-
дет содержать пустую строку (null).  Если нажать Esc в ответ на запрос
команды ACCEPT при SET ESCAPE установленном в ON,  то выполнение прог-
раммы прервется.  Если SET ESCAPE установлен в OFF и вы нажали Esc, то
переменная памяти получит пустую строку (null).

    Примеры
ACCEPT `Введите имя клиента: ' TO mcustname
Введите имя клиента: "FRED FREDERICK"
? mcustname
FRED FREDERICK
    В данном примере вам выдается запрос:  Введите имя клиента.  Отме-
тим, что здесь Имя Клиента должно быть взято в кавычки. (Из-за пробела
- прим. перев.)

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ACOPY              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Копирование элементов одного массива в другой
    Синтаксис
ACOPY(, [,  [, [, ]]])
    Параметры
 исходный массив (откуда копируем)
 целевой массив (куда копируем)
  элемент в исходном массиве с которого начинается копирование
  число копируемых элементов
  элемент в целевом массиве с которого начинается копирование
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), AELEMENT(), AINS(), ASCAN(), ASORT(), DIMENSION

    Описание
    Эта функция  копирует  заданное  число  элементов одного массива в
другой. Возвращается число элементов, скопированных в целевой массив.

    Параметры
    ,
    Элементы из исходного массива   копируются  один-в-один  в
элементы целевого массива .  Элементы целевого массива заменя-
ются на элементы исходного массива.
    Массивы могут  иметь  размерность  1  или  2.  Если целевой массив
 не существует,  то FoxPro автоматически создаст его.  В  этом
случае, размеры целевого массива и исходного массива будут одинаковыми.
    Ссылки на элементы двумерных массивов переменных  памяти  осущест-
вляются двумя  способами.  В первом случае,  используются два индекса,
задающие строку и столбец в  которых  находится  элемент  массива;  во
втором, задается  единственный  номер элемента.  Эти и другие функции,
манипулирующие с элементами массивов,  требуют задание номера элемента
(в нашем случае это параметры  и ).
    Важно !!!
    Используйте функцию  AELEMENT() для получения номера элемента дву-
мерного массива по его индексам строки и столбца.

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

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

    
    Вы можете также задать номер элемента в целевом массиве, начиная с
которого начинается замена. Этот номер задается выражением .

    Пример
*** Выбор или открытие базы данных customer ***
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

COUNT TO m.count
*** Определение достаточно большого массива для данных ***
DIMENSION companies[m.count,1]

COPY TO ARRAY companies FIELD Company  && Заполнение массива

DIMENSION temp_comp[m.count,1]

= ACOPY(companies, temp_comp)  && Копирование массива companies
DISPLAY MEMORY LIKE *

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ACOS               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает (в радианах) арккосинус числового выражения
    Синтаксис
ACOS()
    Тип возвращаемого значения
Числовой
    Смотри также
ASIN(),ATAN(),ATN2(),COS(),DTOR(),RTOD(),SET DECIMALS,SIN(),TAN()

    Описание
    Эта тригонометрическая  функция  возвращает  значение  арккосинуса
числового выражения.

    Параметр 
    Эта тригонометрическая функция возвращает значение arccos  .
Значение    может изменяться от +1 до -1.  Возвращаемое значение
лежит в пределах между О и +"пи" (3,141592).  Число возвращаемых функ-
цией ACOS() десятичных разрядов определяется командой SET DECIMALS.
    Для преобразования значения угла, возвращаемого функцией ACOS(), в
градусы воспользуйтесь функцией RTOD().

    Примеры
? RTOD(ACOS(0))
90.00
STORE -1 to arcangle
? RTOD(ACOS(arcangle))
180.00
? RTOD(ACOS(sqrt(2)/2))
45.00

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є          ACTIVATE MENU          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Вывод на дисплей и активация линейки меню
    Синтаксис
ACTIVATE MENU 
        [NOWAIT]
        [PAD ]
    Замечания
Расширена в FoxPro 2.0: добавлена опция NOWAIT
    Смотри также
CLEAR MENU, CREATE MENU, DEACTIVATE MENU, DEFINE MENU,
DEFINE PAD, HIDE MENU, SHOW MENU, SET SYSMENU

    Описание
    Данная команда работает в сочетании  с  командами  DEFINE  MENU  и
DEFINE  PAD.  Две  эти команды определяют линейку меню,  которая может
располагаться  на  экране  горизонтально  или   вертикально.   Команда
ACTIVATE  MENU вызывает на экран или в окно ранее определенную линейку
меню, помеченную как , и активирует ее для использования.

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

    Выбор пунктов меню.
    Выбор пункта  линейки  меню может быть осуществлен путем установки
на нужный пункт и последующим нажатием клавиши Spacebar или Enter, или
нажатием кнопки "мыши". Если линейка меню определена с "горячими" кла-
вишими, то выбор пунктов меню может осуществлен  ими.  Если  "горячие"
клавиши не определены и SET CONFIRM установлена в OFF,  то выбор может
осуществляться путем нажатия  клавиши,  соответствующей  первой  букве
приглашения нужного пункта линейки меню.
    Для деактивации линейки меню без выполнения  выбора  нужно  нажать
Esc.  Деактивировать меню можно также командой DEACTIVATE MENU или ак-
тивировав другую линейку меню.
    Важно !!!
    При включении  в  прикладные  программы  Системной  линейки   меню
(System menu  bar)  _MSYSMENU,  нет  необходимости  его  активировать.
Вместо этого вызывается SET SYSMENU AUTOMATIC.  Более подробная инфор-
мация по  этому  вопросу  приведена  в Главе Меню в книге "Руководство
Разработчика" ("Developer's Guide").

    Опции
    NOWAIT
    При выводе меню на экран дисплея и его активации, выполнение прог-
раммы приостанавливается до того,  как не будет выбран один из пунктов
меню,  или не нажата клавиша Escape. Включение NOWAIT заставляет прог-
рамму  продолжать работу после вывода и активации линейки меню.  Прог-
рамма не ждет вашего ввода,  а продолжает работать. Вы можете осущест-
вить  выбор  пункта  меню в любом месте,  где программа ожидает ввод с
клавиатуры.
    Важно !!!
    Если вы хотите чтобы меню было активно при  работе  команды  READ,
включите NOWAIT при активации меню.  Активируйте это меню до использо-
вания READ.
    При выполнении команды DEACTIVATE MENU меню,  активированное с оп-
цией NOWAIT, не возвращает выполнение программы к команде следующей за
командой активизации этого меню ACTIVATE MENU.  Меню, активированное с
опцией BAR, не остается активным после осуществления выбора.

    PAD  (<имя пункта>)
    Если используется  необязательное  предложение PAD ,  то
при выводе на дисплей выделен будет элемент линейки,  указанный в . Если это предложение опущено, то выделен будет первый элемент.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
*** Программа ACTMENU.PRG ***
CLEAR
DEFINE MENU mainmenu BAR AT LINE 1

DEFINE PAD invoices  OF mainmenu PROMPT '\
        [AT , ]
        [BAR ]
        [NOWAIT]
        [REST]
    Замечания
Расширена в FoxPro 2.0: добавлены опции AT, BAR и NOWAIT
    Смотри также
CLEAR POPUPS, CREATE MENU, DEACTIVATE POPUP, DEFINE BAR,
DEFINE POPUP, HIDE POPUP, MOVE POPUP, ON PAD, ON SELECTION PAD,
ON SELECTION POPUP, POP POPUP, PUSH POPUP, SHOW POPUP

    Описание
    Данная команда активации меню работает  в  сочетании  с  командами
DEFINE POPUP и DEFINE BAR.  Эти две команды определяют всплывающее ме-
ню,  которое затем может быть выведено в любой позиции экрана. Команда
DEFINE  BAR  определяет  отдельные  пункты всплывающего меню.  Команда
ACTIVATE POPUP вызывает определенное ранее всплывающее меню  с  именем
,  которе затем размещается на экране или в окне и активи-
руется для последующего использования.

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

    Выбор пунктов меню.
    Выбор пункта всплывающего меню может быть осуществлен путем  уста-
новки  на  нужный  пункт  и  последующим нажатием клавиши Spacebar или
Enter,  или нажатием кнопки "мыши". Если всплывающее меню определено с
"горячими"  клавишими,  то  выбор  пунктов меню может осуществлен ими.
Если "горячие" клавиши не определены и SET CONFIRM установлена в  OFF,
то  выбор может осуществляться путем нажатия клавиши,  соответствующей
первой букве приглашения нужного пункта всплывающего меню.
    Для деактивации  всплывающего меню без выполнения выбора нужно на-
жать Escape. Деактивировать меню можно также командой DEACTIVATE POPUP
или активировав другое всплывающее меню.

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

    BAR 
    Если предложение BAR , то при выводе всплывающего меню будет
автоматически выделен -й пункт.  Например,  если  равно 2,
то будет выделен второй пункт меню.  Если  равно 5, то 5-й пункт
и т.д.  Если BAR  опущено,  то автоматически  выделяется  первый
пункт  меню.  Если  больше,  чем общее число пунктов в меню,  то
также выбирается первый пункт.

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

    REST
    Всплывающее меню,  созданное с предложением PROMPT FIELD, помещает
в всплывающее меню записи из базы данных. При активации меню автомати-
чески выделяется первый пункт меню,  даже, если указатель записи уста-
новлен на запись, отличную от первой.
    Для начального выделения пункта меню, соответствующего текущей за-
писи, включите в команду ключевое слово REST.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
*** Программа ACTPOP.PRG ***
CLEAR
DEFINE MENU mainmenu BAR AT LINE 1
DEFINE PAD invoices  OF mainmenu PROMPT ' \
        [,  ... ]] | ALL
        [IN [WINDOW]  | SCREEN]
        [BOTTOM | TOP | SAME] [NOSHOW]
    Смотри также
CLEAR WINDOW, DEACTIVATE WINDOW, DEFINE WINDOW, HIDE WINDOW,
RELEASE WINDOW, SHOW WINDOW

    Описание
    Данная команда  выводит на дисплей и активирует ранее определенное
пользователем окно или окна. Активация окна означает направление всего
экранного вывода на данное окно. Окно остается текущим окном вывода до
тех пор,  пока оно не будет деактивировано или освобождено,  или  пока
другое окно или экран не будет активировано.
    Окна пользователя создаются и определяются командой DEFINE WINDOW.
При  определении окон их имена добавляются к нижней части всплывающего
меню WINDOW линейки системного меню.  Окно, определенное первым, будет
находиться на вершине этого списка,  а далее будут следовать остальные
окна в порядке их определения.  Окно, на которое в текущий момент нап-
равлен вывод, помечено ромбиком.
    Одновременно на экране может находиться несколько окон, однако вы-
вод будет направлен на окно, активированное последним. При наличии бо-
лее чем одного окна деактивация текущего окна вывода вызовет его  уда-
ление с экрана с перенаправлением вывода на окно, которое было активи-
ровано до него.  Если ни одно окно вывода не является активным, то вы-
вод происходит на экран.
    Важно !!!
    Для получения  уверенности  в том,  что после деактивиции текущего
окна именно определенное окно является активным,  надо еще раз его ак-
тивизировать командой ACTIVATE WINDOW.
    Все активированные окна остаются на экране до тех пор, пока не бу-
дут  выданы команды DEACTIVATE WINDOW или HIDE WINDOW,  удаляющие их с
экрана.  Использование любой из этих команд приводит к удалению окна с
экрана, но не из памяти. Окна можно вернуть на экран при помощи команд
ACTIVATE WINDOW или SHOW WINDOW.  Для удаления окон сразу из окна и из
памяти следует использовать команды CLEAR WINDOWS, RELEASE WINDOWS или
CLEAR ALL. Удаленные таким образом окна для повторного вызова на экран
требуется снова определить.

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

    ALL
    При использовании  необязательного  ключевого слова ALL происходит
активация всех определенных окон.  Окна помещаются на дисплей в после-
довательности их определения; окно, определенное последним, становится
активным окном вывода.

    IN [WINDOW] 
    Размещает активируемое окно или окна в родительском  окне  .

    IN [WINDOW] SCREEN
    Размещает окна на экране,  вместо того, что бы размещать их внутри
окна.

    ВОTTOM | TOP | SAME
    Вы можете также задать, какие окна будут активированы, относитель-
но других ранее активированных окон.  Опции BOTTOM и TOP могут исполь-
зоваться для помещения окон в конец или в  начало  стека  окон.  Опция
SAME влияет на позиционирование окон, которые были помещены на экран и
затем скрыты.
    Опция BOTTOM  используется для активации окон и помещения их после
всех прочих окон. Опция TOP активирует окна и помещает их впереди всех
прочих окон.
    Опция SAME воздействует только на те окна,  которые ранее были ак-
тивированы или показаны (ACTIVATE или SHOW), а затем скрыты при помощи
команд  DEACTIVATE  WINDOW  или  HIDE  WINDOW.  Использование  команды
ACTIVATE  WINDOW  с опцией SAME помещает окна обратно в стек окон в ту
же позицию, что была у него до того, как его сделали скрытым.

    NOSHOW
    Команда ACTIVATE  WINDOW  с опцией NOSHOW направляет вывод на наз-
ванное пользователем окно,  не меняя статуса окна.  Если окно является
скрытым,  то  оно  останется скрытым и при направлении на него вывода.
Если же окно не было активировано,  то включение для этого окна с  ко-
мандой  ACTIVATE WINDOW опции NOSHOW направдяет на это окно вывод,  но
не отображает его на экране.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
CLEAR
SET COLOR JF SCHEME 1 TO SCHEME 8
DEFINE WINDOW output FROM 2,1 TO 13,75 TITLE 'Output' ;
      CLOSE FLOAT GROW SHADOW ZOOM
ACTIVATE WINDOW output
WAIT
HIDE WINDOW output
WAIT
HIDE WINDOW output
WAIT
SHOW WINDOW output
    В данном примере определяется и активируется окно OUTPUT,  что вы-
зывает его появление на экране. Команда WAIT вызывает паузу в выполне-
нии программы,  затем окно становится скрытым и наконец, снова возвра-
щается на экран.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ADEL               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Удаляет элемент, строку или столбец массива
    Синтаксис
ADEL(,  [,2])
    Параметры
 массив, из которого удаляются данные
  номер удаляемого элемента, строки или столбца
2       индикатор того, что  задает столбец
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ACOPY(), ADIR(), AELEMENT(), AFIELDS(), AINS(), ASCAN(),
ALEN(), ASORT(), ASUBSCRIPT(), DIMENSION

    Описание
    Эта функция удаляет элемент одномерного массива или строку  (стол-
бец)  двумерного  массива.  Удаление  элемента,  строки или столбца из
массива не изменяет его  размера  -  хвостовые  элементы,  строки  или
столбцы массива принимают значение логической лжи (.F.).
    При успешном удалении элемента, строки или столбца возвращается 1.
    Важно !!!
    Ссылки на элементы двумерных массивов осуществляются двумя  спосо-
бами.  В  первом случае,  используются два индекса,  задающие строку и
столбец в которых  находится  элемент  массива;  во  втором,  задается
единственный  номер элемента.  Эти и другие функции,  манипулирующие с
элементами массивов,  требуют задание номера элемента (в нашем  случае
это параметр ). Используйте функцию AELEMENT() для получения но-
мера элемента двумерного массива по его индексам строки и столбца.
    Более подробно   строки  и  столбцы  массивов  описаны  в  команде
DIMENSION.

    Параметры
    ,
    Для удаления элемента одномерного массива в параметре  ука-
жите имя массива,  а в параметре  его номер. Для удаления строки
двумерного массива в параметре  указывается имя  массива,  а  в
 номер строки.

    2
    Для удаления столбца двумерного массива в параметре  указы-
вается имя массива, в  номер столбца и указывается индикатор 2.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

*** Выбор или открытие базы данных customer ***
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

COUNT TO m.count


*** Определение достаточно большого массива для данных ***
DIMENSION companies[m.count,1]

COPY TO ARRAY companies FIELD company  && Заполнение массива

m.name = 'DataTech Inc.'
m.pos  = ASCAN(companies, m.name)  && Поиск компании

IF m.pos != 0
        *** Компания найдена и удаляется из массива ***
        = ADEL(companies, m.pos)
        m.count = m.count - 1
ENDIF
DISPLAY MEMORY LIKE companies*

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ADIR               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Помещение информации о подходящих файлах в массив
    Синтаксис
ADIR( [, [, ]])
    Параметры
 массив, в который заносится информация о подходящих файлах
 шаблон файла
 расширения поиска для включения дополнительных файлов
        D для каталогов
        H для скрытых файлов
        S для системных файлов
        V для метки
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), ACOPY(), ADIR(), AELEMENT(), AFIELDS(), AINS(), ASCAN(),
ALEN(), ASORT(), ASUBSCRIPT(), DIMENSION, DIRECTORY, FILER

    Описание
    Этой функцией возвращается число файлов на диске,  удовлетворяющих
заданному шаблону. Информация о подходящих под шаблон файлах заносится
в массив. В массив заносится следующая информация: подходящие под шаб-
лон имена файлов, их размеры, даты обновления, время и атрибуты ДОС.

    Параметры
    
    Информация о  подходящих  под  шаблон  файлах  заносится  в массив
.  Если вы включили в ADIR() массив,  который не существует, то
FoxPro создаст его автоматически. Если массив существует и его размера
недостаточно  для  хранения  всей  информации,  возвращаемой  функцией
ADIR(), то  его  размер  автоматически увеличивается до нужного.  Если
массив больше, чем необходимо, то он усекается.
    В следующей  таблице  описаны все столбцы массива и тип хранимых в
них данных:
    Тип и вид информации в столбце
Столбец Информация      Тип данных
   1    Имена файлов    Символьный
   2    Размер файлов   Числовой
   3    Даты файлов     Даты
   4    Время файлов    Символьный
   5    Атрибуты файлов Символьный
    Последний столбец содержит атрибуты ДОС для  соответствующих  фай-
лов. Атрибуты  хранятся в виде одной или нескольких букв.  В следующей
таблице приводится соответствие между буквами и атрибутами:
    Буквы атрибутов ДОС
Буква Атрибут
  A   Архив (чтение и запись)
  H   Скрытый
  R   Только чтение
  S   Системный
  D   Каталог

    
    Шаблон файла позволяет вам осуществлять поиск  тех  файлов,  имена
или  расширения  которых  удовлетворяют некоторым условиям.  Например,
условие может быть - все файлы баз данных,  все текстовые  файлы,  все
файлы,  имеющие в своем имени вторую букву А и т.д. Для здание условия
поиска используются метасимволы * и ?. Символы * используются в шабло-
не файла. Знак вопроса указывает на отдельный символ. Звездочка указы-
вает на любое число символов,  включаю 0. При задании шаблона файла вы
можете комбинировать любое число метасимволов в любой позиции.
    Символьное выражение  является шаблоном файла. В него могут
включаться имена дисков и каталогов,  для задания пути поиска в других
каталогах и на других дисках.  Если    опущено,  то  в  массиве
 размещается информация о файлах текущего каталога.
    
    
    Для расширения поиска и включения в его диапазон скрытых и систем-
ных файлов,  каталогов  и  меток,  используется  символьное  выражение
.
    Это символьное  выражение может содержать любые комбинации букв D,
H и S. Включение D, добавляет к информации о соответствующем шаблону в
 файле информацию о подкаталогах. Включение Н, добавляет инфор-
мацию о соответствующих шаблону в  скрытых файлах. Включение S,
добавляет  информацию  о  соответствующих  шаблону в  системных
файлах.
    Для возврата  метки  текущего диска в  должна быть включена
буква V.  В массив возвращается только метка, если V включается вместе
с D,  H и S. Метка хранится в первом элементе массива, оставшиеся эле-
менты массива отсекаются.
    Включение в  пустой cтроки (null) приведет к возврату толь-
ко каталогов, скрытых и системных файлов.
    
    Примеры
    Эта процедура  после  сообщения  ей имени диска (буквы) возвращает
его метку:
PROCEDURE volume
PARAMETER drive
string = drive + ':'
DIMENSION temparray(1)
=ADIR(temparray,(string),'V')
RETURN temparray(1)
    В этом примере демонстрируется вызов процедуры, приведенной выше:
?VOLUME('C')
  CDISK
    В этой таблице приведены некоторые  простые  аргументы  и  описаны
соответствующие им файлы.
Аргументы                  Искомые файлы
(ARRAY1,'*.DBF')           Все файлы баз данных
(ARRAY1,'A*.DBF')          Все файлы баз данных, начинающиеся с буквы А
(ARRAY1,'?A*.DBF')         Все файлы баз данных со второй буквой А в имени
(ARRAY1,'*A?.DBF')         Все файлы баз данных с предпоследней буквой А
                           в имени
(ARRAY1,'?.*')             Все файлы с однобуквенным именем с любым расшире-
                           нием или без него
(ARRAY1,'','H')            Все скрытые файлы
(ARRAY1,'*.DBF','H')       Все файлы баз данных, включая скрытые
(ARRAY1,'','D')            Все подкаталоги текущего каталога
(ARRAY1,'C:\FOXPRO\*','D') Все подкаталоги каталога FOXPRO
                  
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            AELEMENT             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер  элемента массива,  соответствующий заданным индексам
его строки и столбца.
    Синтаксис
AELEMENT(, [, ])
    Параметры
 одно- или двумерный массив
 индекс строки
 индекс столбца
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), ACOPY(), ADIR(), AFIELDS(), AINS(), ASCAN(),
ALEN(), ASORT(), ASUBSCRIPT(), DIMENSION, DISPLAY MEMORY
    
    Описание
    Ссылки на  элементы двумерных массивов осуществляются двумя спосо-
бами.  В первом случае,  используются два индекса,  задающие строку  и
столбец  в  которых  находится  элемент массива;  во втором,  задается
единственный номер элемента.  Феукция AELEMENT() возвращает номер эле-
мента массива, соответствующий заданным индексам его строки и столбца.
    Функции FoxPro ADEL(), ADIR(), AFIELDS(), AINS(), ALEN(), ASCAN(),
ASORT() и  ASUBSCRIPT() могут работать с двумерными массивами,  но для
этого требуется ссылаться на элементы массива посредством их  номеров.
Для преобразования  индексов элемента в его номер используется функция
AELEMENT(). Обратное преобразования номера элемента в индекс его стро-
ки и столбца осуществляется функцией ASUBSCRIPT().
    
    Пример
    В следующем примере создается массив 2х3 (2 строки и  3  столбца).
Функция DISPLAY  MEMORY  выводит  содержимое массива в порядке номеров
элементов.
DIMENSION x(2,3)
DISPLAY MEMORY LIKE x

X       Pub   A
(   1,   1)    L   .F.  (элемент номер 1)
(   1,   2)    L   .F.  (элемент номер 2)
(   1,   3)    L   .F.  (элемент номер 3)
(   2,   1)    L   .F.  (элемент номер 4)
(   2,   2)    L   .F.  (элемент номер 5)
(   2,   3)    L   .F.  (элемент номер 6)
    Элементы могут  адресоваться  как по их индексам,  так и по номеру
элемента - команды STORE 'INVOICE' TO X(2,1) и STORE 'INVOICE' TO X(4)
приведут к занесению строки символов 'INVOICE' в один и тот же элемент
массива.
    В одномерных  массивах номер элемента совпадает с его единственным
индексом. Поэтому  функция  AELEMENT()  с  одномерными  массивами   не
используется (хотя может).
    
    Параметры
    
     задает имя массива, откуда берется элемент.
    
    
    Если массив одномерный,  то включение  (индекс строки) при-
ведет к  возврату значения,  равного .  При этом  должно
быть меньше общего числа элементов в массиве.
    
    
    В случае  двумерного  массива  вы  можете  включать  оба выражения
 (индекс строки) и  (индекс столбца).
    Если задается только , то будет возвращаться номер элемента
до тех пор,  пока  не превысит общего числа строк в массиве.  В
противном случае  будет  выдано  сообщение об ошибке "Выход индекса за
границы" ("Subscript out of bounds").
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         Пример Программы        є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

COUNT TO m.count
DIMENSION companies[m.count,2]
COPY TO ARRAY companies FIELD Cust_id,Company
*
* Заметим: первые три элемента не сортируются
*
= ASORT(companies, AELEMENT(companies,4,2))
@ 5,30 SAY 'List of Companies:'
@ 7,30 GET m.choice ;
        FROM companies ;
        RANGE 2 ;
        SIZE 10,30 ;
        DEFAULT 1
         READ
CLEAR
USE
    
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             AFIELDS             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Поместить информацию о структуре базы данных в массив
    Синтаксис
AFIELDS()
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), AELEMENT(), ADIR(), AINS(), ASCAN(), ALEN(), ASORT(),
ASUBSCRIPT(), COPY STRUCTURE TO, DIMENSION
    
    Описание
    Функция AFIELDS()  помещает  информацию  о структуре базы данных в
массив.  В массиве размещается следующая информация : имена полей базы
данных,  типы полей, ширину полей и число десятичных знаков в числовых
полях. Для помещения этой информации в другую базу данных используется
команда COPY STRUCTURE EXTENDED.
    AFIELDS() возвращает число полей в базе данных.
    
    Параметр 
    Информация о  структуре базы данных помещается в массив переменных
памяти ,  имеющий 4 столбца.  В  следующей  таблице  приводится
описание хранимой в каждом столбце информации и ее тип.
            Информация массива и ее тип
Номер столца  Информация о поле       Тип данных
    1         Имена полей             Символьный
    2         Типы полей:             Символьный
               C = символьное
               D = даты
               L = логическое
               M = поле памяти Memo
               N = числовое
               F = с плавающей точкой
    3         Ширина полей            Числовой
    4         Число десятичных раз-   Числовой
              рядов в числовых полях
    Если массив, включаемый в AFIELDS() не существует, то FoxPro авто-
матически создает его.  Если размер существующего массива не  является
достаточным  для  размещения  возвращаемой  AFIELDS()  информации,  то
массив автоматически увеличивается до требуемых размеров.
    
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              AINS               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Вставка элемента, строки или столбца в массив
    Синтаксис
AINS(,  [,2])
    Параметры
 одно- или двумерный массив  в который происходит вставка
  для одномерного массива номер вставляемого элемента
        для двумерного массива номер строки или столбца
2       индикатор того, что  задает столбец
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), ACOPY(), ADIR(), AFIELDS(), ASCAN(), AELEMENT(),
ALEN(), ASORT(), ASUBSCRIPT(), DIMENSION
    
    Описание
    Эта функция вставляет элемент в одномерный массив,  или строку или
столбец в  двумерный массив.  Вставка элемента,  строки или столбца не
изменяет размера массива - элементы, строки или столбцы, стоящие после
вставляемых, перемещаются к концу массива, а последний элемент, строка
или столбец удаляются из него.  Вновь вставленный элемент,  строка или
столбец инициализируются логической фальшью (.F.).
    При успешной вставке возвращается 1.
    
    Параметры
    ,
    Для вставки элемента в одномерный массив задайте имя этого массива
 и номер элемента , куда будет происходить вставка. Новый
элемент будет вставлен сразу перед элемента с номером .
    Для вставки  строки  в  двумерный массив задайте имя этого массива
 и номер строки ,  куда будет происходить вставка.  Новая
строка будет вставлена сразу перед строкой с номером .
    Важно !!!
    Ссылки на элементы двумерных массивов осуществляются двумя  спосо-
бами.  В  первом случае,  используются два индекса,  задающие строку и
столбец в которых  находится  элемент  массива;  во  втором,  задается
единственный  номер элемента.  Эти и другие функции,  манипулирующие с
элементами массивов,  требуют задание номера элемента (в нашем  случае
это параметр ). Используйте функцию AELEMENT() для получения но-
мера элемента двумерного массива по его индексам строки и столбца.
    Более подробно   строки  и  столбцы  массивов  описаны  в  команде
DIMENSION.
    
    2
    Для вставки столбца двумерного массива в параметре   указы-
вается имя массива,  в  номер столбца и указывается индикатор 2.
Новый столбец будет вставлен сразу перед столбцом с номером .
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             Пример              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
*** Выбор или открытие базы данных customer ***
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

COUNT TO m.count
*** Определение достаточно большого массива для данных ***
DIMENSION companies[m.count,1]

COPY TO ARRAY companies FIELD Company  && Заполнение массива

m.name = 'DataTech Inc.'

IF ASCAN(companies, m.name) = 0  && Поиск компании
        * Company not found - add it.
        = AINS(companies, m.count+1)
        companies[m.count+1] = m.name
ENDIF

DISPLAY MEMORY LIKE *


продажа пгс
?????? ???????????