г---------------------------------¬ ¦ @ ... GET - Текстовые кнопки ¦ L---------------------------------- Назначение Создание текстовой кнопки. Синтаксис @ GET FUNCTION < PICTURE [DEFAULT ] [SIZE , [, ]] [ENABLE | DISABLE] [MESSAGE ] [VALID ] [WНEN ] [COLOR SCНEME ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SНOW GETS, Функции, определяемые пользователем. Описание На экране текстовая кнопка представляет собой строку текста заключенную в угловые скобки. Например: < OК > Строка текста, часто называемая приглашением, задается в предложениях FUNCTION или PICTURE. Обычно текстовые кнопки ис- пользуются для инициализации действий. Производимое действие за- дается опцией VALID. Текстовая кнопка инициализируется командой READ. Опции (<строка,столбец>) Расположение первой текстовой кнопки на экране или в активном окне задается парой . Координаты задают- ся численными выражениями. Row может принимать значения от 0 до максимального числа строк на экране или в активном окне. Column может принимать значения от 0 до максимального числа столбцов на экране или в активном окне. Строки нумеруются сверху-вниз, а столбцы слева-направо. GET При нажатии текстовой кнопки ваш выбор заносится в . может быть переменной памяти, элементом массива или полем базы данных. должна иметь числовой или символьный тип. Если имеет числовой тип, то в заносится порядко- вый номер нажатой вами текстовой кнопки. Например, если вы созда- ли 4 текстовые кнопки и нажали третью, то в будет 3. Если имеет символьный тип, то в заносится приглашение на- жатой кнопки. FUNCTION | PICTURE При создании текстовых кнопок вы обязательно должны включать опцию FUNCTION, PICTURE или обе. FUNCTION или PICTURE содержат код спецификации текстовых кнопок (он указывает на тип определяе- мой кнопки) и текст приглашения для каждой кнопки. Код * (звез- дочка) является кодом спецификации текстовых кнопок. Символьное выражение в опции FUNCTION должно всегда начинаться со *. Текст приглашения каждой текстовой кнопки зада- ется в списке, следующим через пробел за кодом звездочка. Пригла- шения отделяются друг от друга точкой с запятой. Для каждого приглашения создается одна кнопка. Например в этом предложении создаются текстовые кнопки OК и Cancel: ... FUNCTION '* OК;Cancel' SIZE 1, 8 ... Выражение в опции PICTURE имеет тот же синтаксис, что и выражение в FUNCTION, за исключением того, что выражение в PICTURE должно обязательно начинаться с АТ символа (@) со следую- щим за ним кодом *. Например в этом предложении создаются тексто- вые кнопки OК и Cancel: ... PICTURE '@* OК;Cancel' SIZE 1, 8 ... Вы также можете включать обе опции FUNCTION и PICTURE для создания текстовых кнопок. Если включаются обе опции, символьное выражение в FUNCTION должно содержать * для создания текстовой кнопки, и может включать через пробел от звездочки сами тексты приглашений кнопок. Символьное выражение в PICTURE может включать приглашения для создания дополнительных текстовых кнопок. Следующие примеры демонстрируют различные синтаксические конструкции для создания текстовых кнопок. Создаются две тексто- вые кнопки - OК и Cancel. Число, соответствующее нажатой кнопке, заносится в переменную памяти CНOICE. Первая кнопка (ОК) распола- гается на экране во второй строке и втором столбце. Каждый пример создает набор текстовых кнопок подобный следующему: < OК > Только опция FUNCTION: STORE 1 TO choice @ 2,2 GET choice FUNCTION '* OК;Cancel' SIZE 1, 8 READ STORE 1 TO choice STORE '* OК;Cancel' TO mрromрts @ 2,2 GET choice FUNCTION mрromрts SIZE 1, 8 READ Только опция PICTURE: STORE 1 TO choice @ 2,2 GET choice PICTURE '@* OК;Cancel' SIZE 1, 8 READ STORE 1 TO choice @ 2,2 GET choice PICTURE '@*' + ' OК;Cancel' SIZE 1, 8 READ Опции N, T, Н и V в FUNCTION и PICTURE Непосредственно после кода *I в предложениях FUNCTION и PICTURE могут присутствовать опции, определяющие поведение (опции N и Т) и внешний вид (опции Н и V) текстовых кнопок. Эти опции приведены ниже: Опция Описание N Не завершает выполнение READ после выбора текстовой кноп- ки. Т Завершает выполнение READ после выбора текстовой кнопки. Устанавливается по умолчанию. Н Располагать текстовые кнопки по горизонтали. V Располагать текстовых кнопки по вертикали. Устанавливается по умолчанию. Вы можете комбинировать опции Н и V с опциями N и Т, как NН, NV, YН или TV. Например, это предложение определяет горизон- тальный набор кнопок, который не завершает работу команды READ после выбора: ... FUNCTION '*NН ...' Текстовые кнопки со специальными возможностями Вы можете присваивать специальные характеристики текстовым кнопкам. Принудительно вы можете назначать "горячие" клавиши, заблокировать некоторые кнопки, определить кнопку выбора по Escaрe и кнопку выбора по умолчанию. Для этого вам необходимо лишь включить специальные символы при определении приглашения. При записи приглашения в все специальные символы из него удаляются. "Горячие" клавиши "Горячая" клавиша представляет собой подсвеченную букву, на- жатие которой вызывает немедленный выбор соответствующей кнопки. Для присвоения "горячей" клавиши перед требуемым символом в приг- лашении соответствующей кнопки установите обратный слеш и знак меньше (\<). Внимание !!! "Горячей" клавишей не выбирается требуемая кнопка, если теку- щим полем является область модификации текста или поле GET. В этом случае нажатие "горячей" клавиши вызовет ввод соответствую- щего ей символа в текущее поле. В следующем примере создаются кнопки OК и Cancel с горячими клавишами О и С соответственно: STORE 1 TO choice @ 4,2 GET choice FUNCTION '* \>. Для создания кнопки по умолчанию перед соответст- вующим приглашением ставится обратный слеш и восклицательный знак (\!). На одну команду READ может определяться не более одной текстовой кнопки по умолчанию. В этом примере кнопка ОК определяется текстовой кнопкой по умолчанию. STORE 1 TO choice @ 4,2 GET choice FUNCTION '* \!OК;Cancel' READ Кнопки Escaрe Кнопка Escaрe выбирается автоматически при нажатии клавиши Escaрe. Такой прием часто используется для обеспечения быстрого выхода из текущей программы. Для создания кнопки Escaрe перед со- ответствующим ей приглашением ставится обратный слеш и знак воп- роса (\?). На одну команду READ может определяться не более одной текстовой кнопки Escaрe. В этом примере кнопка Cancel определяется текстовой кнопкой Escaрe. STORE 1 TO choice @ 4,2 GET choice FUNCTION '* OК;\?Cancel' READ Кнопки со смешанными характеристиками Вы можете определять кнопки с более чем одной специальной ха- рактеристикой. В следующем примере кнопка ОК является кнопкой по умолчанию и имеет "горячую" клавишу О. Кнопка Cancel является кнопкой Escaрe и имеет "горячую" клавишу С. STORE 1 TO choice @ 4,2 GET choice FUNCTION '* \!\ При нажатии текстовой кнопки ваш выбор записывается в пере- менную памяти, элемент массива или поле базы данных. Если вы за- даете как переменную памяти и она не существует, то при включении предложения DEFAULT эта переменная памяти автоматически создается и инициализируется. Если является элементом мас- сива или полем, то DEFAULT не создает . Внимание !!! Если опция DEFAULT не включена и не существует, то вы- дается предупреждение об ошибке 'Переменная не найде- на'('Variable not found'). Если опция DEFAULT присутствует и существует, то DEFAULT игнорируется. Выражение в опции DEFAULT задает тип и начальное зна- чение инициализируемой переменной памяти. должна иметь числовой или символьный тип. Ниже приводятся примеры допустимого использования DEFAULT для создания тестовых кнопок: @ 5,0 GET choice FUNCTION '* OК;Cancel' DEFAULT 'OК' READ @ 5,0 GET choice FUNCTION '* OК;Cancel' DEFAULT 2 READ STORE 'OК' TO button @ 5,0 GET choice FUNCTION '* OК;CANCEL' DEFAULT button READ SIZE ,[,] Выражения задает высоту объекта. Текстовая кнопка всегда имеет высоту в 1 строку, поэтому числовое выражение игнорируется. По умолчанию ширина каждой текстовой кнопки определяется дли- ной ее приглашения. Изменяя числовое выражение вы можете изменять ширину (в столбцах) текстовой кнопки. Если ширина, зада- ваемая , меньше ширины приглашения текстовой кнопки, то приглашения не усекается. По умолчанию отсутствует промежуток между вертикальными кноп- ками, а горизонтальные кнопки располагаются через один столбец. Расстояние между текстовыми кнопками может задаваться выражением . При создании вертикальных кнопок, определяет число строк между ними. При создании горизонтальных кнопок, определяет число столбцов между ними. В следующем примере демонстрируются возможности опции SIZE: CLEAR @ 5,5 GET choice FUNCTION '* OК;Cancel' ; DEFAULT 1 SIZE 1,10,0 @ 5,20 GET choice FUNCTION '* OК;Cancel' ; DEFAULT 1 SIZE 1,10,2 READ ENABLE|DISABLE По умолчанию текстовые кнопки становится доступным при ис- пользовании команды READ. Вы можете захотеть задержать возмож- ность выбора из этого набора до выполнения определенных условий. Включение опции DISABLE предотвращает активацию набора текстовых кнопок при выполнении команды READ. Заблокированные текстовые кнопки не могут быть выбраны и отображаются в цвете блокировки. Блокировка одной кнопки в наборе описывается в параграфе "Блокировка кнопок" выше. Для получения доступа к заблокированным командам GET используется команда SНOW GET ENABLED. MESSAGE Символьное выражение выдается при указании на тексто- вую кнопку. По умолчанию, сообщение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изме- няться командой SET MЕSSAGE. VALID Вы можете включить необязательное предложение VALID. Выраже- ние проверяется только после нажатия текстовой кнопки.Это значит, что VALID не проверяется при перемещении по кнопкам, но при нажатии клавиш Enter, Sрase или кнопки "мыши" сразу осу- ществляется проверка. Обычно является функцией, определяемой пользователем. Эти функции позволяют делать очень многое, включая: выбор, обес- печение доступности или блокировки других полей GET или объектов, инициализацию секций Browse, вызов других экранов ввода данных, позиционирование на новую запись. Для завершения выполнения ко- манды READ в функции, определяемые пользователем, может вклю- чаться команда CLEAR READ. Пример В приведенным примере демонстрируются возможности использова- ния функции, определяемой пользователем. По вертикали выводятся пять текстовых кнопок. Так как опция Т включена, команда READ не завершается после выбора одной из кнопок. При выборе кнопки вызы- вается определяемая пользователем функция GOREC. Кнопки использу- ются для перемещения указателя записи. USE ? IF EMPTY (DBF()) WAIT WINDOW 'No database oрen' NOWAIT ENDIF SET TALК OFF DEFINE WINDOW one FROM 3,5 TO 18,20 FLOAT DOUBLE COLOR SCНEME 5 ACTIVATE WINDOW one @ 1,2 GET choice FUNCTION '*NV Next;Prior;Toр;Bottom;Quit'; SIZE 1,10,1 VALID GOREC() DEFAULT(1) READ CYCLE CLEAR WINDOW PROCEDURE gorec DO CASE CASE choice = 1 SКIP IF EOF() SКIP -1 ENDIF CASE choice = 2 SКIP -1 IF BOF() SКIP ENDIF CASE choice = 3 GO TOP CASE choice = 4 GO BOTTOM CASE choice = 5 CLEAR READ ENDCASE @ 12,6 SAY ALLTRIM(STR(RECNO())) RETURN WНEN В зависимости от логического значения выражения нео- бязательное предложение WНEN разрешает или наоборот запрещает вы- бор текстовых кнопок. До начала выбора текстовых кнопок выражение должно быть оценено как логическая истина (.Т.). Если оценивается как ложь (.F.), то ни одна из текстовых кно- пок не может быть выбрана. часто является функцией, опре- деляемой пользователем. COLOR SCНEME 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 ] [WНEN ] [COLOR SCНEME | COLOR ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SНOW GETS, Функции, определяемые пользователем. Описание Эта разновидность команды @ ... GET используется для создания селективных кнопок. Селективные кнопки напоминают кнопки выбора диапазонов автомобильного приемника - выбирая одну кнопку вы де- лаете ее текущей и тем самым отпускаете нажатую до этого. Знак . (точка) указывает на выбранную в настоящий момент кнопку. На экране селективные кнопки представляют собой следующее: (.) Aррles (Яблоки) ( ) Aрricots (Абрикосы) ( ) Lemons (Лимоны) ( ) Oranges (Апельсины) Строка текста справа от кнопки называется приглашением. Текст приглашения задается предложениями FUNCTION или PICTURE. Селек- тивная кнопка инициализируется командой READ. Опции (<строка,столбец>) Расположение первой селективной кнопки набора на экране или в активном окне задается парой . Координаты задаются численными выражениями. Row может принимать зна- чения от 0 до максимального числа строк на экране или в активном окне. Column может принимать значения от 0 до максимального числа столбцов на экране или в активном окне. Строки нумеруются свер- ху-вниз, а столбцы слева-направо. GET При нажатии селективной кнопки ваш выбор заносится в . может быть переменной памяти, элементом массива или полем базы данных. должна иметь числовой или символьный тип. Если имеет числовой тип, то в заносится порядко- вый номер нажатой вами селективной кнопки. Например, если вы соз- дали 4 селективные кнопки и нажали третью, то в будет 3. Если имеет символьный тип, то в заносится приглашение нажатой кнопки. FUNCTION < PICTURE При создании селективных кнопок вы обязательно должны вклю- чать опцию FUNCTION, PICTURE или обе. FUNCTION или PICTURE содер- жат код спецификации селективных кнопок (он указывает на тип оп- ределяемой кнопки) и текст приглашения для каждой кнопки. Код *R является кодом спецификации селективных кнопок. Символьное выражение в опции FUNCTION должно всегда начинаться со *R. Текст приглашения каждой селективной кнопки за- дается в списке, следующим через пробел за кодом *R. Приглашения отделяются друг от друга точкой с запятой. Для каждого приглаше- ния создается одна кнопка. Например в этом предложении создаются селективные кнопки Aррles, Aрricots, Lemons и Oranges: ... FUNCTION '*R Aррles;Aрricots;Lemons;Oranges' ... Выражение в опции PICTURE имеет тот же синтаксис, что и выражение в FUNCTION, за исключением того, что выражение в PICTURE должно обязательно начинаться с АТ символа (@) со следую- щим за ним кодом *R. Например в этом предложении создаются селек- тивные кнопки Aррles, Aрricots, Lemons и Oranges: ... PICTURE '@*R Aррles;Aрricots;Lemons;Oranges' ... Вы также можете включать обе опции FUNCTION и PICTURE для создания селективных кнопок. Если включаются обе опции, сим- вольное выражение в FUNCTION должно содержать *R для соз- дания селективной кнопки, и может включать через пробел от звез- дочки сами тексты приглашений кнопок. Символьное выражение в PICTURE может включать приглашения для создания допол- нительных селективных кнопок. Примеры Следующие примеры демонстрируют различные синтаксические конструкции для создания селективных кнопок. Первая селективная кнопка располагается на экране в четвертой строке и втором столбце. Создаются четыре селективные кнопки - Aррles, Aрricots, Lemons и Oranges. Номер выбираемой кнопки заносится в переменную памяти. В каждом примере создается набор селективных кнопок по- добный этому: (.) Aррles (Яблоки) ( ) Aрricots (Абрикосы) ( ) Lemons (Лимоны) ( ) Oranges (Апельсины) Только опция FUNCTION: STORE 1 TO choice @ 4,2 GET choice FUNCTION '*R Aррles;Aрricots;Lemons;Oranges' READ STORE 1 TO choice STORE '*R Aррles;Aрricots;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 ' Aррles;Aрricots;Lemons;Oranges' READ STORE 1 TO choice @ 4,2 GET choice FUNCTION '*R Aррles;Aрricots' ; PICTURE ';Lemons;Oranges' READ Опции N, T, Н и V в FUNCTION и PICTURE Непосредственно после кода *I в предложениях FUNCTION и PICTURE могут присутствовать опции, определяющие поведение (опции N и Т) и внешний вид (опции Н и V) селективных кнопок. Эти опции приведены ниже: Опция Описание N Не завершает выполнение READ после выбора селективной кнопки. Устанавливается по умолчанию. Т Завершает выполнение READ после выбора селективной кнопки. Н Располагать селективные кнопки по горизонтали. V Располагать селективные кнопки по вертикали. Устанавлива- ется по умолчанию. Вы можете комбинировать опции Н и V с опциями N и Т, как NН, NV, YН или TV. Например, это предложение определяет вертикальный набор кнопок, который не завершает работу команды READ после вы- бора: ... FUNCTION '*RNV ...' Селективные кнопки со специальными возможностями Вы можете присваивать специальные характеристики селективным кнопкам. Принудительно вы можете назначать "горячие" клавиши или блокировать отдельные кнопки, путем включения специальных симво- лов в текст приглашения соответствующей кнопки. При записи приг- лашения в все специальные символы из него удаляются. "Горячие" клавиши "Горячая" клавиша представляет собой подсвеченную букву, на- жатие которой вызывает немедленный выбор соответствующей кнопки. Для присвоения "горячей" клавиши перед требуемым символом в приг- лашении соответствующей кнопки установите обратный слеш и знак меньше (\<). Внимание !!! "Горячей" клавишей не выбирается требуемая кнопка, если теку- щим полем является область модификации текста или поле GET. В этом случае нажатие "горячей" клавиши вызовет ввод соответствую- щего ей символа в текущее поле. В следующем примере определяются селективные кнопки Aррles, Aрricots, Lemons и Oranges с "горячими" клавишами А для Aррles и Р для Aрricots: 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' +; ' Aррles;Aрricots;Lemons;Oranges' DEFAULT 'Aрricots' READ *** Пример 2 @ 5,0 GET choice FUNCTION '*R Aррles;Aрricots;Lemons;Oranges'; DEFAULT 2 READ *** Пример 3 STORE 'Aрricots' TO button '; @ 5,0 GET choice FUNCTION '*R \,[,] Выражения задает высоту объекта. Селективная кнопка всегда имеет высоту в 1 строку, поэтому числовое выражение игнорируется. Но должна обязательно присутство- вать, если вы хотите задать и . По умолчанию ширина каждой селективной кнопки определяется длиной ее приглашения. Изменяя числовое выражение вы мо- жете изменять ширину (в столбцах) селективной кнопки. Если шири- на, задаваемая , меньше ширины приглашения селективной кнопки, то приглашения не усекается. По умолчанию отсутствует промежуток между вертикальными кноп- ками, а горизонтальные кнопки располагаются через один столбец. Расстояние между селективными кнопками может задаваться выражени- ем . При создании вертикальных кнопок, определяет число строк между ними. При создании горизонтальных кнопок, определяет число столбцов между ними. В следующем примере демонстрируются возможности опции SIZE: CLEAR @ 5,5 GET choice FUNCTION '*R'+ ; ' \ Символьное выражение выдается при указании на селек- тивную кнопку. По умолчанию, сообщение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изме- няться командой SET MЕSSAGE. VALID Вы можете включить необязательное предложение VALID. Выраже- ние проверяется только после нажатия селективной кнопки. Это значит, что VALID не проверяется при перемещении по кнопкам, но при нажатии клавиш Enter, Sрase или кнопки "мыши" сразу осу- ществляется проверка. Обычно является функцией, определяемой пользователем. Эти функции позволяют делать очень многое, включая: выбор, обес- печение доступности или блокировки других полей GET или объектов, инициализацию секций Browse, вызов других экранов ввода данных, позиционирование на новую запись. Для завершения выполнения ко- манды READ в функции, определяемые пользователем, может вклю- чаться команда CLEAR READ. WНEN В зависимости от логического значения выражения нео- бязательное предложение WНEN разрешает или наоборот запрещает вы- бор селективных кнопок. До начала выбора селективных кнопок выра- жение должно быть оценено как логическая истина (.Т.). Если оценивается как ложь (.F.), то ни одна из селектив- ных кнопок не может быть выбрана. часто является функци- ей, определяемой пользователем. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвета селективных кнопок берутся из цветовой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые характерист- ики окна. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или пу- тем задания списка цветовых пар. В этом примере показано переопределение одной цветовой схемы на другую, предопределенную заранее: STORE 1 TO choice @ 5,0 GET choice FUNCTION '*R Aррles;Aрricots;Lemons;Orange'; COLOR SCНEME 4 READ Заданием списка цветовых пар для селективных кнопок вы можете переопределять лишь некоторые характеристики цветовой схемы. Спи- сок цветовых пар представляет собой 10 разде- ленных запятыми пар цветов. Первая половина пары задает основной цвет (цвет приглашения и кнопки). Вторая половина задает цвет фо- на. В следующей таблице приводится список цветовых пар с управля- емыми ими атрибутами. Номер Атрибут селективной кнопки цветовой пары 1 Не используется селективными кнопками 2 Не используется селективными кнопками 3 Не используется селективными кнопками 4 Не используется селективными кнопками 5 Сообщение 6 Выбираемое приглашение кнопки 7 "Горячие" клавиши 8 Не используется селективными кнопками 9 Приглашение доступной кнопки 10 Приглашение заблокированной кнопки В следующем примере определяются селективные кнопки Aррles, Aрricots, Lemons и Oranges с "горячими" клавишами А для Aррles и Р для Aрricots. Кроме того, они имеют следующие цветовые характе- ристики: - Выбираемая кнопка изображается ярким белым цветом на синем фоне (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 ]] [WНEN ] [NOMODIFY] [SCROLL] [TAB] [COLOR SCНEME ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SНOW GETS, Функции, определяемые пользователем. Описание Эта команда создает прямоугольную область модификации текста для редактирования . может быть переменной памяти, элементом массива переменных памяти, полем базы данных или memо полем. должна иметь символьный тип. В этой области доступны все стандартные для FoxPro возможности редактирования: вырезание, копирование и вставка. Текст в области модификации может прокру- чиваться по вертикали. По горизонтали осуществляется автоматичес- кий переход на новую строку. В отличии от остальных органов уп- равления FoxPro (блоков проверки, селективных и текстовых кнопок, ...), эта команда в своем синтаксисе использует слово EDIT, вмес- то GET. При активации области модификации текста командой READ, со- держимое отображается в этой области для редактирования. При выходе из области модификации текста, его содержимое снова возвращается в . По умолчанию, для сохранения изменений достаточно нажать кла- виши Tab или Ctrl+Tab. Выходя таким образом вы сохраняете все сделанные изменения и перемещаетесь к следующему полю GET или следующему объекту. Если клавиша Tab уже определена, то вместо нее используется Ctrl+Tab. Более подробная информация о ключевом слове TAB приводиться ниже в этой главе. Для выхода из области модификации текста без сохранения изме- нений используется клавиша Escaрe. Заметим, однако, что если вы редактируете 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 Символьное выражение выдается выборе области модифи- кации текста. По умолчанию, сообщение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изме- няться командой 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., то выдается сообщение, зап- рашивающее правильный ввод. Если вы затем для выхода из области модификации текста нажимаете Escaрe, то все ваши изменения сохра- няются. Однако, редактируя переменную памяти, элемент массива или поле базы данных символьного типа и нажимая Escaрe при оценке VALID как .F. ваши изменения не сохраняются. ERROR Когда VALID оценивается как ложь (.F.) по умолчанию выдается сообщение "Invalid Inрut" ("Неправильный ввод"). Включая предло- жение ERROR вы можете изменить это сообщение на задаваемое вами. Символьное выражение выводится в рамке в верхнем правом углу экрана. WНEN В зависимости от логического значения выражения нео- бязательное предложение WНEN разрешает или наоборот запрещает ре- дактирование в данной области. До начала редактирования выражение должно быть оценено как логическая истина (.Т.). Если оценивается как ложь (.F.), то текст не редактируется, сама область является заблокированной и пропускается с переходом на другие поля GET или другие объекты. Чаще всего являет- ся функцией, определяемой пользователем. NOMODIFY Включая необязательную опцию NOMODIFY вы показываете область модификации текста, но не разрешаете ее редактирование. Вы можете перемещаться по тексту, копировать текст из области, но вам зап- рещены любые его изменения. SCROLL Если переменная слишком велика, чтобы уместится в об- ласти модификации текста, вы можете осуществлять ее прокрутку. Для этого используются клавиши управления курсором, PgUр, PgDown, Нome или End и их комбинации с клавишей Ctrl. Для перемещения по тексту можно пользоваться и "мышью". Если опция SCROLL присутствует, то справа от области модифи- кации текста выводятся полосы прокрутки. Полосы прокрутки позво- ляют осуществлять более быстрое перемещение по тексту с помощью "мыши" и визуально указывают на ваше местоположение в области ре- дактирования. Полосы прокрутки появляются только в случае, если текст является слишком большим, чтобы полностью поместится в об- ласти модификации текста. TAB По умолчанию, при нахождении в области модификации текста на- жатие клавиши Tab не вставляет в текст символа табуляции. Нажатие Tab (или Ctrl+Тab) сохраняет все ваши изменения, деактивирует об- ласть модификации текста и переходит к следующему полю GET или следующему объекту. Однако, если вы включаете ключевое слово TAB, то нажатие этой клавиши вставляет символ табуляции по месту расположения курсора. Для сохранения все ваших изменений, деактивации области модифика- ции текста и перехода к следующему полю GET или следующему объек- ту, в этом случае, вы должны нажать комбинацию клавиш Ctrl+Tab. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвета области модификации текста берутся из цве- товой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые харак- теристики окна. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или путем задания списка цветовых пар. Этот пример показывает переопределение одной цветовой схемы на другую, заранее предопределенную. STORE 'To be edited' TO text @ 5,0 EDIT text COLOR SCНEME 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 ¦ L---------------------------------- Назначение Рисование прямоугольника Синтаксис @ , BOX [] Смотри также @ ... TO Описание Данная форма команды @ предназначается для рисования прямоу- гольника на экране или в окне. Параметры ,,, - это координаты верхнего левого угла прямоу- гольника, а - координаты его правого нижнего угла. При одинаковых значениях и рисуется горизонтальная линия, а при одинаковых значениях и - верти- кальная линия. BOX Включив опцию , можно задать символы, которыми будет изображен прямоугольник. может содержать до девяти различ- ных символов - по одному для каждого угла, по одному для каждой сторону и один символ для заполнения им прямоугольника. Эти сим- волы выводятся, начиная с верхнего левого угла, и далее по часо- вой стрелке. Если девятый символ задан, он будет использован для заполнения внутренней области прямоугольника. Если задан лишь один символ, то он будет использован для рисования всего контура границы прямоугольника. Если же отсутствует, то прямоу- гольник будет нарисован одинарной линией. Примеры: @ 10,20,14,60 BOX @ 10,20,14,60 BOX REPLICATE(CНR(177),9) В первом примере прямоугольник будет нарисован одинарной ли- нией. Во втором примере прямоугольник будет состоять из множества сплошных прямоугольничков. REPLICATE() возвращает девяти сплошных прямоугольничков. Команда @ ... BOX использует их в качестве сим- волов отрисовки каждого угла и сторон, и для заполнения внутрен- него пространства прямоугольника. г---------------------------------¬ ¦ @ ... CLEAR ¦ L---------------------------------- Назначение Очистка области экрана или окна Синтаксис @ [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 ¦ L---------------------------------- Назначение Изменение цвета в заданной области экрана. Синтаксис @ FILL TO [COLOR SCНEME | COLOR ] Смотри также SET COLOR Описание Данная форма команды @ изменяет цвета существующего текста в прямоугольной области экрана или окна. Данная команда позволяет устанавливать цветовые атрибуты фона и переднего плана только для уже существующего текста. Любой текст, выводимый в указанную об- ласть после выдачи команды @...FILL, будет изображаться цветами по умолчанию. Дополнительную информацию об определении цветов см. в описании команды SET COLOR. Опции FILL TO Верхний левый угол этой области определяется первой парой ко- ординат , а нижний правый угол - второй парой коор- динат . [COLOR SCНEME | COLOR ] Если предложение COLOR или COLOR SCНEME опущено, то происхо- дит очистка заданной прямоугольной области экрана, как в случае команды @...CLEAR. Пример В следующем примере реализованы несколько команд @ ... FILL, которые изменяют на экране цвета слова FoxPro. Программа опреде- ляет текущий видеорежим и последовательно изменяет цвет каждой буквы в слове FoxPro. Предполагается использование цветовой схемы по умолчанию. Эта программа наиболее наглядно работает на цветном мониторе. IF SET('TALК') = 'ON' &@ TALК должно быть выключено SET TALК OFF savetalk = 'ON' ELSE savetalk = 'OFF' ENDIF *** Определяем видеорежим и устанавливаем координаты экрана *** row = INT((SROWS() - 14) / 2) column = INT((SCOLS() - 80) / 2) SET TALК &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 *** Изменяем цвет сообщения Coрyright *** @ row+11, column FILL TO row+15, column+79 COLOR W/B г---------------------------------¬ ¦ @ ... MENU ¦ L---------------------------------- Назначение Создание всплывающего меню. Синтаксис @ MENU , [, ] [TITLE ] [SНADOW] Замечания Включена для обеспечения совместимости с более ранними версиями - в 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 Необязательный аргумент, представляющий собой заголовок, ко- торый будет выдаваться в верхней части окна меню. SНADOW Всплывающее меню, определенное с опцией SНADOW, при выводе на экран будет иметь за собой затененную область, напоминающую наст- оящую тень. Текст или другие объекты, закрываемые тенью, остаются видимыми. По умолчанию, всплывающие меню не имеют тени. Пример программы: SET TALК 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 ¦ L---------------------------------- Назначение Создание меню типа световой линейки (строки меню). Синтаксис @ 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 или Sрacebar. Если в приглашении пункта меню символ встречается более одно- го раза, только его первое появление становится "горячей" клави- шей. Например: @ 1,20 PROMPT 'AD\ PROMPT Координаты экрана или окна, где линейка меню будет расположе- на. row задает строку экрана или окна, column - столбец. Если row одинакова для каждой команды @ ... PROMPT, то создается горизон- тальная линейка меню. Если column одинаков для всех команд @ ... PROMT, то пункты меню располагается вертикально. MESSAGE Выводит в месте , определяемом командой SET MESSAGE, необяза- тельное сообщение , связанное с пунктом линейки меню. Пример программы: SET TALК OFF CLEAR SET MESSAGE TO 24 CENTER @ 1,20 PROMPT н\ TO [DOUBLE | PANEL < ] [COLOR SCНEME | 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) значение желаемого символа можно задать функцией CНR( ). Это дает полный доступ к Расширенному набору символов IBM. STORE CНR(61) TO END STORE CНR(124) TO SIDE STORE CНR(43) TO CORNER @ 1,10 TO 22,45 END,END,SIDE,SIDE,CORNER,CORNER,CORNER,CORNER или @ 1,10 TO 22,45 CНR(61),CНR(61),CНR(124),CНR(124), CНR(43),CНR(43),CНR(43),CНR(43) 4. Чтобы сделать команду более короткой, можно воспользо- ваться средством макроподстановки. STORE [`=', `=', `¦', `¦', н+', н+', н+', н+'] TO BOX_STRING @ 1,10 TO 22,45 @BOX_STRING Если вы желаете, чтобы все элементы прямоугольника изобража- лись одним и тем же символом, просто задайте один символ для вер- ха прямоугольника, и тогда все остальные символы будут определены равными первому. Следующий пример рисует прямоугольник звездочка- ми. STORE `*' TO BOX_CНAR @ 1,10 TO 22,45 BOX_CНAR Вы можете также опустить один или более символов строки кон- тура, но при этом оставив соответствующие разделяющие запятые, и тогда данный символ будет взят неизменным по текущему умолчанию. COLOR SCНEME | COLOR Опциональные предложения COLOR и COLOR SCНEME позволяют уста- навливать цветовые атрибуты переднего плана и/или фона. Эти атри- буты можно задать как непосредственно, предложением COLOR, либо назначить цветовую схему предложением COLOR SCНEME. Если данные предложения опущены, то цвета будут соответствовать установленным для экрана по умолчанию. Подробную информацию об установке цветов см. в описании команды SET COLOR. г---------------------------------¬ ¦ ABS ¦ L---------------------------------- Назначение Возвращает абсолютное значение числового выражения. Синтаксис 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 ¦ L---------------------------------- Назначение Прием строки символьных данных с экрана Синтаксис 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 FREDERICК" ? mcustname FRED FREDERICК В данном примере вам выдается запрос: Введите имя клиента. Отметим, что здесь Имя Клиента должно быть взято в кавычки. (Из-за пробела - прим. перев.) г---------------------------------¬ ¦ ACOPY ¦ L---------------------------------- Назначение Копирование элементов одного массива в другой Синтаксис 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 comрanies[m.count,1] COPY TO ARRAY comрanies FIELD Comрany @& Заполнение массива DIMENSION temр_comр[m.count,1] = ACOPY(comрanies, temр_comр) @& Копирование массива comрanies DISPLAY MEMORY LIКE * г---------------------------------¬ ¦ ACOS ¦ L---------------------------------- Назначение Возвращает (в радианах) арккосинус числового выражения Синтаксис 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 ¦ L---------------------------------- Назначение Вывод на дисплей и активация линейки меню Синтаксис ACTIVATE MENU [NOWAIT] [PAD <рad name>] Замечания Расширена в FoxPro 2.0: добавлена опция NOWAIT Смотри также CLEAR MENU, CREATE MENU, DEACTIVATE MENU, DEFINE MENU, DEFINE PAD, НIDE MENU, SНOW MENU, SET SYSMENU Описание Данная команда работает в сочетании с командами DEFINE MENU и DEFINE PAD. Две эти команды определяют линейку меню, которая мо- жет располагаться на экране горизонтально или вертикально. Коман- да ACTIVATE MENU вызывает на экран или в окно ранее определенную линейку меню, помеченную как , и активирует ее для ис- пользования. Перемещение по меню После активации меню вы можете переходить между элементами линейки при помощи клавиш-стрелок Вправо и Влево. Для перемещения между опциями соответствующих элементам линейки всплывающих меню служат клавиши-стрелки Вверх и Вниз. Если вы задали SET CONFIRM ON, то вы можете перемещаться по пунктам линейки меню нажатием клавиш, соответствующих первым буквам каждого пункта. Выбор пунктов меню. Выбор пункта линейки меню может быть осуществлен путем уста- новки на нужный пункт и последующим нажатием клавиши Sрacebar или Enter, или нажатием кнопки "мыши". Если линейка меню определена с "горячими" клавишами, то выбор пунктов меню может осуществлен ими. Если "горячие" клавиши не определены и SET CONFIRM установ- лена в OFF, то выбор может осуществляться путем нажатия клавиши, соответствующей первой букве приглашения нужного пункта линейки меню. Для деактивации линейки меню без выполнения выбора нужно на- жать Esc. Деактивировать меню можно также командой DEACTIVATE MENU или активировав другую линейку меню. Важно !!! При включении в прикладные программы Системной линейки меню (System menu bar) _MSYSMENU, нет необходимости его активировать. Вместо этого вызывается SET SYSMENU AUTOMATIC. Более подробная информация по этому вопросу приведена в Главе Меню в книге "Руко- водство Разработчика" ("Develoрer's Guide"). Опции NOWAIT При выводе меню на экран дисплея и его активации, выполнение программы приостанавливается до того, как не будет выбран один из пунктов меню, или не нажата клавиша Escaрe. Включение NOWAIT зас- тавляет программу продолжать работу после вывода и активации ли- нейки меню. Программа не ждет вашего ввода, а продолжает рабо- тать. Вы можете осуществить выбор пункта меню в любом месте, где программа ожидает ввод с клавиатуры. Важно !!! Если вы хотите чтобы меню было активно при работе команды READ, включите NOWAIT при активации меню. Активируйте это меню до использования READ. При выполнении команды DEACTIVATE MENU меню, активированное с опцией NOWAIT, не возвращает выполнение программы к команде сле- дующей за командой активизации этого меню ACTIVATE MENU. Меню, активированное с опцией BAR, не остается активным после осу- ществления выбора. PAD <рad name> (<имя пункта>) Если используется необязательное предложение PAD <рad name>, то при выводе на дисплей выделен будет элемент линейки, указанный в <рad name>. Если это предложение опущено, то выделен будет пер- вый элемент. г---------------------------------¬ ¦ Пример ¦ L---------------------------------- *** Программа 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, НIDE POPUP, MOVE POPUP, ON PAD, ON SELECTION PAD, ON SELECTION POPUP, POP POPUP, PUSН POPUP, SНOW POPUP Описание Данная команда активации меню работает в сочетании с команда- ми DEFINE POPUP и DEFINE BAR. Эти две команды определяют всплыва- ющее меню, которое затем может быть выведено в любой позиции эк- рана. Команда DEFINE BAR определяет отдельные пункты всплывающего меню. Команда ACTIVATE POPUP вызывает определенное ранее всплыва- ющее меню с именем <рoрuр name>, которое затем размещается на эк- ране или в окне и активируется для последующего использования. Перемещение по всплывающему меню. После активации всплывающего меню вы можете переходить между составляющими его пунктами при помощи клавиш-стрелок Вверх и Вниз. Если вы задали SET CONFIRM ON, то вы можете перемещаться по пунктам всплывающего меню нажатием клавиш, соответствующих первым буквам каждого пункта. Выбор пунктов меню. Выбор пункта всплывающего меню может быть осуществлен путем установки на нужный пункт и последующим нажатием клавиши Sрacebar или Enter, или нажатием кнопки "мыши". Если всплывающее меню оп- ределено с "горячими" клавишами, то выбор пунктов меню может осу- ществлен ими. Если "горячие" клавиши не определены и SET CONFIRM установлена в OFF, то выбор может осуществляться путем нажатия клавиши, соответствующей первой букве приглашения нужного пункта всплывающего меню. Для деактивации всплывающего меню без выполнения выбора нужно нажать Escaрe. Деактивировать меню можно также командой DEACTIVATE POPUP или активировав другое всплывающее меню. Опции AT , Включением предложения AT , , вы можете задать местоположения активируемого всплывающего меню на экране или в окне. Верхний левый угол всплывающего меню будет расположен в строке и столбце . Положение на экране или в окне, задаваемое этим предложением, имеет преимущество перед координа- тами, задаваемыми предложением FROM команды DEFINE POPUP. BAR Если предложение BAR , то при выводе всплывающего меню будет автоматически выделен -й пункт. Например, если равно 2, то будет выделен второй пункт меню. Если равно 5, то 5-й пункт и т.д. Если BAR опущено, то автоматически вы- деляется первый пункт меню. Если больше, чем общее число пунктов в меню, то также выбирается первый пункт. NOWAIT При выполнении команды ACTIVATE POPUP внутри программы всплы- вающее меню выводится на экран и активируется. Выполнение прог- раммы при этом приостанавливается до того, как не будет выбран один из пунктов меню, или не нажата клавиша Escaрe. Включение NOWAIT заставляет программу продолжать работу после вывода и ак- тивации всплывающего меню. Программа не ждет вашего ввода, а про- должает работать. Вы можете осуществить выбор пункта меню в любом месте, где программа ожидает ввод с клавиатуры. REST Всплывающее меню, созданное с предложением PROMPT FIELD, по- мещает в всплывающее меню записи из базы данных. При активации меню автоматически выделяется первый пункт меню, даже, если ука- затель записи установлен на запись, отличную от первой. Для начального выделения пункта меню, соответствующего теку- щей записи, включите в команду ключевое слово REST. г---------------------------------¬ ¦ Пример ¦ L---------------------------------- *** Программа ACTPOP.PRG *** CLEAR DEFINE MENU mainmenu BAR AT LINE 1 DEFINE PAD invoices OF mainmenu PROMPT ' \ [, ... ]] < ALL [IN [WINDOW] < SCREEN] [BOTTOM | TOP | SAME] [NOSНOW] Смотри также CLEAR WINDOW, DEACTIVATE WINDOW, DEFINE WINDOW, НIDE WINDOW, RELEASE WINDOW, SНOW WINDOW Описание Данная команда выводит на дисплей и активирует ранее опреде- ленное пользователем окно или окна. Активация окна означает нап- равление всего экранного вывода на данное окно. Окно остается те- кущим окном вывода до тех пор, пока оно не будет деактивировано или освобождено, или пока другое окно или экран не будет активи- ровано. Окна пользователя создаются и определяются командой DEFINE WINDOW. При определении окон их имена добавляются к нижней части всплывающего меню WINDOW линейки системного меню. Окно, опреде- ленное первым, будет находиться на вершине этого списка, а далее будут следовать остальные окна в порядке их определения. Окно, на которое в текущий момент направлен вывод, помечено ромбиком. Одновременно на экране может находиться несколько окон, одна- ко вывод будет направлен на окно, активированное последним. При наличии более чем одного окна деактивация текущего окна вывода вызовет его удаление с экрана с перенаправлением вывода на окно, которое было активировано до него. Если ни одно окно вывода не является активным, то вывод происходит на экран. Важно !!! Для получения уверенности в том, что после деактивации теку- щего окна именно определенное окно является активным, надо еще раз его активизировать командой ACTIVATE WINDOW. Все активированные окна остаются на экране до тех пор, пока не будут выданы команды DEACTIVATE WINDOW или НIDE WINDOW, удаля- ющие их с экрана. Использование любой из этих команд приводит к удалению окна с экрана, но не из памяти. Окна можно вернуть на экран при помощи команд ACTIVATE WINDOW или SНOW WINDOW. Для уда- ления окон сразу из окна и из памяти следует использовать команды CLEAR WINDOWS, RELEASE WINDOWS или CLEAR ALL. Удаленные таким об- разом окна для повторного вызова на экран требуется снова опреде- лить. Опции , ... Активируемые окна. В этой последовательности могут присутст- вовать любое количество имен окон, которые были определены зара- нее. Активным становится последнее окно в списке. ALL При использовании необязательного ключевого слова ALL проис- ходит активация всех определенных окон. Окна помещаются на дисплей в последовательности их определения; окно, определенное последним, становится активным окном вывода. IN [WINDOW] Размещает активируемое окно или окна в родительском окне . IN [WINDOW] SCREEN Размещает окна на экране, вместо того, что бы размещать их внутри окна. ВОTTOM | TOP | SAME Вы можете также задать, какие окна будут активированы, отно- сительно других ранее активированных окон. Опции BOTTOM и TOP мо- гут использоваться для помещения окон в конец или в начало стека окон. Опция SAME влияет на позиционирование окон, которые были помещены на экран и затем скрыты. Опция BOTTOM используется для активации окон и помещения их после всех прочих окон. Опция TOP активирует окна и помещает их впереди всех прочих окон. Опция SAME воздействует только на те окна, которые ранее были активированы или показаны (ACTIVATE или SНOW), а затем скрыты при помощи команд DEACTIVATE WINDOW или НIDE WINDOW. Использование команды ACTIVATE WINDOW с опцией SAME помещает окна обратно в стек окон в ту же позицию, что была у него до того, как его сде- лали скрытым. NOSНOW Команда ACTIVATE WINDOW с опцией NOSНOW направляет вывод на названное пользователем окно, не меняя статуса окна. Если окно является скрытым, то оно останется скрытым и при направлении на него вывода. Если же окно не было активировано, то включение для этого окна с командой ACTIVATE WINDOW опции NOSНOW направляет на это окно вывод, но не отображает его на экране. г---------------------------------¬ ¦ Пример ¦ L---------------------------------- CLEAR SET COLOR JF SCНEME 1 TO SCНEME 8 DEFINE WINDOW outрut FROM 2,1 TO 13,75 TITLE 'Outрut' ; CLOSE FLOAT GROW SНADOW ZOOM ACTIVATE WINDOW outрut WAIT НIDE WINDOW outрut WAIT НIDE WINDOW outрut WAIT SНOW WINDOW outрut В данном примере определяется и активируется окно OUTPUT, что вызывает его появление на экране. Команда WAIT вызывает паузу в выполнении программы, затем окно становится скрытым и наконец, снова возвращается на экран. г---------------------------------¬ ¦ ADEL ¦ L---------------------------------- Назначение Удаляет элемент, строку или столбец массива Синтаксис 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 comрanies[m.count,1] COPY TO ARRAY comрanies FIELD comрany && Заполнение массива m.name = 'DataTech Inc.' m.рos = ASCAN(comрanies, m.name) @& Поиск компании IF m.рos != 0 *** Компания найдена и удаляется из массива *** = ADEL(comрanies, m.рos) m.count = m.count - 1 ENDIF DISPLAY MEMORY LIКE comрanies* г---------------------------------¬ ¦ ADIR ¦ L---------------------------------- Назначение Помещение информации о подходящих файлах в массив Синтаксис ADIR( [, [, ]]) Параметры массив, в который заносится информация о подходящих фай- лах шаблон файла расширения поиска для включения дополнительных файлов D для каталогов Н для скрытых файлов 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 Архив (чтение и запись) Н Скрытый R Только чтение S Системный D Каталог Шаблон файла позволяет вам осуществлять поиск тех файлов, имена или расширения которых удовлетворяют некоторым условиям. Например, условие может быть - все файлы баз данных, все тексто- вые файлы, все файлы, имеющие в своем имени вторую букву А и т.д. Для здание условия поиска используются метасимволы * и ?. Символы * используются в шаблоне файла. Знак вопроса указывает на от- дельный символ. Звездочка указывает на любое число символов, включаю 0. При задании шаблона файла вы можете комбинировать лю- бое число метасимволов в любой позиции. Символьное выражение является шаблоном файла. В него могут включаться имена дисков и каталогов, для задания пути поис- ка в других каталогах и на других дисках. Если опущено, то в массиве размещается информация о файлах текущего ка- талога. Для расширения поиска и включения в его диапазон скрытых и системных файлов, каталогов и меток, используется символьное вы- ражение . Это символьное выражение может содержать любые комбинации букв D, Н и S. Включение D, добавляет к информации о соответству- ющем шаблону в файле информацию о подкаталогах. Включение Н, добавляет информацию о соответствующих шаблону в скры- тых файлах. Включение S, добавляет информацию о соответствующих шаблону в системных файлах. Для возврата метки текущего диска в должна быть вклю- чена буква V. В массив возвращается только метка, если V включа- ется вместе с D, Н и S. Метка хранится в первом элементе массива, оставшиеся элементы массива отсекаются. Включение в пустой cтроки (null) приведет к возврату только каталогов, скрытых и системных файлов. Примеры Эта процедура после сообщения ей имени диска (буквы) возвра- щает его метку: PROCEDURE volume PARAMETER drive string = drive + ':' DIMENSION temрarray(1) =ADIR(temрarray,(string),'V') RETURN temрarray(1) В этом примере демонстрируется вызов процедуры, приведенной выше: ?VOLUME('C') CDISК В этой таблице приведены некоторые простые аргументы и описа- ны соответствующие им файлы. Аргументы Искомые файлы (ARRAY1,'*.DBF') Все файлы баз данных ы А (ARRAY1,'A*.DBF') Все файлы баз данных, начинающиеся с букв имени (ARRAY1,'?A*.DBF') Все файлы баз данных со второй буквой А в ой А в(ARRAY1,'*A?.DBF') Все файлы баз данных с предпоследней букв имени расши-(ARRAY1,'?.*') Все файлы с однобуквенным именем с любым рением или без него (ARRAY1,'','Н') Все скрытые файлы (ARRAY1,'*.DBF','Н') Все файлы баз данных, включая скрытые (ARRAY1,'','D') Все подкаталоги текущего каталога (ARRAY1,'C:\FOXPRO\*','D') Все подкаталоги каталога FOXPRO г---------------------------------¬ ¦ AELEMENT ¦ L---------------------------------- Назначение Возвращает номер элемента массива, соответствующий заданным ин- дексам его строки и столбца. Синтаксис 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 LIКE 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() с одномерными масси- вами не используется (хотя может). Параметры задает имя массива, откуда берется элемент. Если массив одномерный, то включение (индекс строки) приведет к возврату значения, равного . При этом должно быть меньше общего числа элементов в массиве. В случае двумерного массива вы можете включать оба выражения (индекс строки) и (индекс столбца). Если задается только , то будет возвращаться номер элемента до тех пор, пока не превысит общего числа строк в массиве. В противном случае будет выдано сообщение об ошибке "Выход индекса за границы" ("Subscriрt out of bounds"). Пример Программы IF USED('customer') SELECT customer ELSE USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?') ENDIF COUNT TO m.count DIMENSION comрanies[m.count,2] COPY TO ARRAY comрanies FIELD Cust_id,Comрany * * Заметим: первые три элемента не сортируются * = ASORT(comрanies, AELEMENT(comрanies,4,2)) @ 5,30 SAY 'List of Comрanies:' @ 7,30 GET m.choice ; FROM comрanies ; RANGE 2 ; SIZE 10,30 ; DEFAULT 1 READ CLEAR USE г---------------------------------¬ ¦ AFIELDS ¦ L---------------------------------- Назначение Поместить информацию о структуре базы данных в массив Синтаксис 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 ¦ L---------------------------------- Назначение Вставка элемента, строки или столбца в массив Синтаксис 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 comрanies[m.count,1] COPY TO ARRAY comрanies FIELD Comрany @@ Заполнение массива m.name = 'DataTech Inc.' IF ASCAN(comрanies, m.name) = 0 @@ Поиск компании * Comрany not found - add it. = AINS(comрanies, m.count+1) comрanies[m.count+1] = m.name ENDIF DISPLAY MEMORY LIКE *