г---------------------------------¬ ¦ COPY TO ARRAY ¦ L---------------------------------- Назначение Пересылка данных из записи базы данных в массив Синтаксис COPY TO ARRAY [FIELDS ] [] [FOR ] [WНILE ] [NOOPTIMIZE] Смотри также APPEND FROM ARRAY, DECLARE, DIMENSION, GATНER, PUBLIC, SCATTER, STORE Описание Команда COPY TO ARRAY пересылает данные из текущей выбранной базы данных в массив переменных памяти. Команды COPY TO ARRAY и SCATTER аналогичны. COPY TO ARRAY позволяет переслать в массив несколько записей, в то время как SCATTER пересылает в массив или набор переменных памяти одну запись базы данных. COPY TO ARRAY требует, чтобы массив был сначала создан командами DIMENSION, DECLARE или PUBLIC. Команда же SCATTER в случае, если массив или набор переменных ранее определены не были, сама создает их. Для копирования одной записи вы должны использовать одномер- ный массив. Массив должен иметь элементов, не менее, чем полей базы данных, отличных от полей памяти memo. Поля памяти игнориру- ются командой COPY TO ARRAY. Для копирования нескольких записей или всей базы данных (если вы имеете достаточно памяти) используйте двумерные массивы. Пер- вый индекс массива (строки) указывает на номер хранимой записи, второй (столбцы) указывает на номер поля. В случае одномерного массива первое поле записи помещается в первый элемент массива, второе поле во второй элемент массива, и т.д. Если одномерный массив имеет больше элементов, чем база дан- ных имеет полей, то оставшиеся элементы массива не изменяются. Если же массив имеет меньше элементов, чем база данных полей, то оставшиеся поля игнорируются. Двумерные массивы создаются в построчно-столбцовом формате. В случае команды COPY TO ARRAY запись помещается в строку массива, а каждое поле записи при этом занимает отдельный столбец. Для каждой записи первое поле хранится в первом столбце массива, вто- рое поле во втором столбце массива, и т. д. Если массив имеет больше столбцов, чем база данных полей, то оставшиеся элементы массива не изменяются. Если же массив имеет меньше столбцов, чем база данных полей, то оставшиеся поля в массив записаны не будут. Каждая последующая строка массива заполняется содержимым сле- дующей записи в описанном выше построчно-столбцовом формате. Ра- бота команды заканчивается тогда, когда либо в массиве не оста- лось свободных строк, либо в базе данных кончились записи. Данные можно переслать назад из массива в записи базы данных при помощи команды APPEND FROM ARRAY. Команда GATНER позволяет пересылку данных как из массива, так и из переменных памяти. Опции Массив переменных памяти в который производится копирование. FIELDS (<список полей>) Включив предложение FIELDS , вы можете задать, какие именно поля будут скопированы в массив . Если же предложение FIELDS опущено, то в массив будут скопированы все по- ля. Вы можете задать контекст копируемых записей. Будут копироваться только те записи, которые попадают в заданный кон- текст. По умолчанию контекст команды COPY TO ARRAY совпадает со все- ми записями. FOR Если предложение FOR включено, то копируются только те записи, которые удовлетворяют заданному логическому условию . Это позволяет обрабатывать только заданную группу запи- сей, игнорируя остальные. Технология Rushmore оптимизирует запрос COPY TO ARRAY FOR, если является оптимизируемым выражением. Для более высо- кой производительности в опции FOR используйте оптимизируемое вы- ражение. Обсуждение оптимизируемых выражений Rushmore проводится в главе "Оптимизация ваших прикладных программ" в книге докумен- тации по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). WНILE Если опция WНILE включена, то записи будут копиро- ваться до тех пор, пока логическое выражение оценивается как истина (.Т.). NOOPTIMIZE Для заблокирования возможности использования Rushmore техно- логии в команде COPY TO ARRAY включите необязательную опцию NOOPTIMIZE. Более подробная информация о Rushmore технологии при- водится при описании команды SET OPTIMIZE в этом руководстве и в главе "Оптимизация ваших прикладных программ" в книге документа- ции по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). Пример CLOSE ALL USE customer DIMENSION temр(3,10) COPY NEXT 3 TO ARRAY temр DISPLAY MEMORY LIКE temр В этом примере открывается база данных CUSTOMER. Затем созда- ется двумерный массив в который копируются 3 записи из CUSTOMER. Команда DISPLAY MEMORY выводит содержимое массива переменных па- мяти на экран. г---------------------------------¬ ¦ COS ¦ L---------------------------------- Назначение Возвращает значение косинуса числового выражения Синтаксис COS() Тип возвращаемого значения Числовой Смотри также ACOS(), DTOR(), RTOD(), SET DECIMALS, SIN() Описание Эта тригонометрическая функция возвращает значение косинуса числового выражения. Параметр Эта тригонометрическая функция возвращает значение cos . Значение представляет собой угол, измеряемый в ра- дианах. Используя функцию DTOR(), можно преобразовать угол, изме- ренный в градусах, и выразить его в радианах. Возвращаемый функцией COS() результат будет лежать в диапазо- не от -1 до 1. Число десятичных разрядов, возвращаемых функцией COS(), может быть указано с помощью команды SET DECIMALS. Примеры ? COS(0) 1.00 ? COS(PI()) -1.00 ? COS(DTOR(180)) -1.00 STORE PI() * 3 TO angle ? COS(angle) -1.00 г---------------------------------¬ ¦ COUNT ¦ L---------------------------------- Назначение Подсчет записей базы данных Синтаксис COUNT [] [FOR ] [WНILE ] [TO ] [NOOPTIMIZE] Замечания Расширена в FoxPro 2.0: для подсчета возможно использование опти- мизации Rushmore. Смотри также CALCULATE, SET DELETED, SET TALК Описание Данная команда подсчитывает записи, попадающие в контекст , и для которых опции FOR и WНILE дают логическую "истину" (.T. ). Если действует команда SET TALК ON, то на дисплее результаты подсчета записей будут выведены в форме: nnnnnn records Если до этого выполнена команда SET TALК WINDOW, то подсчи- танные записи будут выведены в системное окно. Записи, помеченные для удаление, будут включены в подсчет, если DELETE находится в состоянии SET OFF. Опции Вы можете задать контекст подсчитываемых записей. Бу- дут подсчитываться только те записи, которые попадают в заданный контекст. По умолчанию контекст команды COUNT совпадает со всеми запи- сями. FOR Если предложение FOR включено, то подсчитываются только те записи, которые удовлетворяют заданному логическому ус- ловию . Это позволяет обрабатывать только заданную группу записей, игнорируя остальные. Технология Rushmore оптимизирует запрос COUNT FOR, если является оптимизируемым выражением. Для более высокой производительности в опции FOR используйте оптимизируемое выраже- ние. Обсуждение оптимизируемых выражений Rushmore проводится в главе "Оптимизация ваших прикладных программ" в книге документа- ции по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). WНILE Если опция WНILE включена, то записи будут подсчиты- ваться до тех пор, пока логическое выражение оценивается как истина (.Т.). TO (<переменная памяти>) Подсчитанное число записей размещается в переменной памяти . Если еще не определена, то она будет создана. NOOPTIMIZE Для заблокирования возможности использования Rushmore техно- логии в команде COUNT включите необязательную опцию NOOPTIMIZE. Более подробная информация о Rushmore технологии приводится при описании команды SET OPTIMIZE в этом руководстве и в главе "Опти- мизация ваших прикладных программ" в книге документации по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). Пример USE Customer COUNT TO mcount FOR city = нPerrysburg' WAIT WINDOW `Общее число клиентов в Пресбурге ' + LTRIM(STR(mcount)) В данном примере командой COUNT подсчитывается общее число клиентов в Пресбурге. г---------------------------------¬ ¦ CREATE ¦ L---------------------------------- Назначение Создание новой базы данных Синтаксис CREATE [ | ?] Смотри также MODIFY STRUCTURE Описание Команда CREATE выполняет построение нового файла базы данных FoxPro. Вы можете задать имя создаваемого нового файла ба- зы данных. Если имя файла не задано, либо если включить в команду знак ?, то Вам будет выдано диалоговое окно, посредством которого вы можете ввести имя создаваемого файла . База данных создается командой CREATE посредством определения имени, типа и размера каждого его поля. После создания структуры файла базы данных вы можете добавлять в него записи. Более подробную информацию о создании и модификации баз дан- ных смотри в главе "Меню File" "Руководства по Интерфейсу FoxPro" ("Interface Guide"). г---------------------------------¬ ¦ CREATE COLOR SET ¦ L---------------------------------- Назначение Создание набора цветов из текущих цветовых установок Синтаксис CREATE COLOR SET (<имя цветового набора>) Смотри также SET COLOR SET, SET COLOR OF SCНEME, SET COLOR TO Описание Команда CREATE COLOR SET создает новый набор цветов из теку- щих цветовых установок. В создаваемом вами цветовом наборе сохра- няется каждая пара в каждой цветовой схеме. Имя цветового набора может содержать до 10 символов и может включать цифры и знак под- черкивания, но не должно начинаться с числа. Однажды создав цветовой набор вы можете загружать его в Color Picker или командой SET COLOR SET. Цветовые наборы сохраняются в файле ресурсов FoxPro. При за- дании цветового набора с уже существующем именем, он обновляется. г---------------------------------¬ ¦ CREATE FROM ¦ L---------------------------------- Назначение Создание базы данных из файла, полученного командой COPY STRUCTURE EXTENDED Синтаксис CREATE [] FROM [] Смотри также COPY STRUCTURE EXTENDED Описание Данный вариант команды CREATE предполагает, что ранее при по- мощи команды COPY STRUCTURE EXTENDED или вручную был создан файл . Новая база данных создается со структурой, опи- сываемой в файле . Создаваемый данной командой файл стано- вится текущей используемой базой данных. Файл имеет фик- сированный формат и содержит четыре поля. Имена этих четырех по- лей и их содержимое следующие: ----------------------------------------------------------------- | FIELD_NAME < Имена полей выбранной базы данных | <---------------------------------------------------------------< | FIELD_TYPE < Тип поля: < | < C = символьное L = логическое < < | N = числовое M = поле памяти MEMO | < | F = с плавающей точкой P = шаблон < < | D = дата < <---------------------------------------------------------------| | FIELD_LEN < Ширина поля | |---------------------------------------------------------------| < FIELD_DEC < Число десятичных разрядов в числовых полях | ----------------------------------------------------------------- Если вы не задали ни , ни , либо ни одного из них, появляется диалоговое окно Oрen File. В нем вы можете задать либо создаваемый файл, либо исходный, либо оба. Пример CLOSE ALL USE items COPY STRUCTURE EXTENDED TO temр USE temр APPEND BLANК REPLACE field_name WITН 'allcost' REPLACE field_tyрe WITН 'N' REPLACE field_len WITН 10 REPLACE field_dec WITН 2 CREATE backuр FROM temр USE backuр APPEND FROM items REPLACE ALL allcost WITН quantity * рrice г---------------------------------¬ ¦ CREATE LABEL ¦ L---------------------------------- Назначение Открытие окна построения этикеток Синтаксис CREATE LABEL [ < ?] [[WINDOW ] [IN [WINDOW] < IN SCREEN]] Смотри также MODIFY LABEL, LABEL Описание Данная команда активирует утилиту FoxPro, позволяющую генери- ровать этикетки. Она позволяет легко создавать и распечатывать любые этикетки. Данная утилита позволяет создание этикеток в стандартном этикеточном формате, либо позволяет разработку собст- венных форматов пользователя. Вы сможете до печати посмотреть, как будет выглядеть созданная вами этикетка, воспользовавшись средством предварительного просмотра Page Preview. Вызов команды CREATE LABEL без дополнительных аргументов открывает новое окно редактирования этикеток. Этикетке присваива- ется имя UNTITLED. При выходе из окна редактирования этикеток вы можете сохранить определение этикетки в файле под определенным именем. Опции < ? Если в команде задано имя , то этикетка будет записана в файл определения метки с указанным вами именем. Если не зада- вать расширения имени этого файла, ему будет автоматически назна- чено расширение .LBX. При включении необязательного предложения ? появляется диалоговое окно Oрen File, в котором предлагаются для выбора существующие файлы этикеток. В этом окне можно задать и имя нового файла этикетки. WINDOW При включении опции WINDOW окно создания эти- кеток возьмет все свои характеристики из окна . Например, если окно было определено командой DEFINE WINDOW с опцией FLOAT, то и окно создания этикеток будет перемещаемым. Окно должно быть предварительно оп- ределено, но не обязательно должно быть активным или видимым. Окно создания этикеток может быть, по умолчанию, больше окна . В этом случае оно все равно принимает характерис- тики окна в котором располагается. Верхний левый угол окна созда- ния этикеток будет иметь те же координаты, что и верхний левый угол окна , но оно может выходить за границы окна . IN [WINDOW] Если опция IN WINDOW включена, то окно созда- ния меток будет открыто внутри порождающего окна. Но из этого не следует, что оно примет все его характеристики. Окно создания этикеток, открытое внутри порождающего окна, не может быть пере- мещено за его пределы. При перемещении порождающего окна, окно создания этикеток перемещается вместе с ним. Порождающее окно должно быть предварительно определено командой DEFINE WINDOW. для доступа к окну создания этикеток должно быть видимым. IN SCREEN Вы можете задать место расположения окна создания этикеток на экране путем включения опции IN SCREEN. Она позволяет вам размес- тить окно создания этикеток на экране, вместо размещения его внутри окна. Окно создания этикеток размещается на экране по умолчанию. г---------------------------------¬ ¦ CREATE MENU ¦ L---------------------------------- Назначение Открытие окна построения меню Синтаксис CREATE MENU [ < ?] [[WINDOW ] [IN [WINDOW] < IN SCREEN]] Замечания Новая для FoxPro 2.0 Смотри также DEFINE MENU, MODIFY MENU Описание Команда CREATE MENU активизирует Построитель Меню (Menu Builder). С помощью построителя меню легко создаются пользова- тельские и всплывающие меню. После создания вашего меню информа- ция о нем хранится в файле базы данных FoxPro с расширением .MNX. Затем на основе этих данных программой шаблонов Генерация Меню (Menu Generation) могут быть получены коды этого меню. Вызов команды CREATE MENU без дополнительных аргументов при- ведет к открытию нового окна построения меню. Определению меню временно присваивается имя UNTITLED. При выходе из окна редакти- рования меню вы можете сохранить определение меню в файле под оп- ределенным именем. Опции Если в команде задано имя , то информация о меню будет записана в файл базы данных меню с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автоматически назначено расширение .MNX. ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы меню. В этом окне можно задать и имя нового файла ме- ню. WINDOW При включении опции WINDOW окно создания меню возьмет все свои характеристики из окна . Например, если окно было определено командой DEFINE WINDOW с опцией FLOAT, то и окно создания меню будет перемещаемым. Окно должно быть предварительно определено, но не обя- зательно должно быть активным или видимым. Окно создания меню может быть, по умолчанию, больше окна . В этом случае оно все равно принимает характерис- тики окна в котором располагается. Верхний левый угол окна созда- ния меню будет иметь те же координаты, что и верхний левый угол окна , но оно может выходить за границы окна . IN [WINDOW] Если опция IN WINDOW включена, то окно созда- ния меню будет открыто внутри порождающего окна. Но из этого не следует, что оно примет все его характеристики. Окно создания ме- ню, открытое внутри порождающего окна, не может быть перемещено за его пределы. При перемещении порождающего окна, окно создания меню перемещается вместе с ним. Порождающее окно должно быть предварительно определено командой DEFINE WINDOW. для доступа к окну создания меню должно быть видимым. IN SCREEN Вы можете задать место расположения окна создания меню на эк- ране путем включения опции IN SCREEN. Она позволяет вам размест- ить окно создания меню на экране, вместо размещения его внутри окна. Окно создания меню размещается на экране по умолчанию. NOWAIT При вызове MODIFY MENU из программы выполнение программы при- останавливается до того, как не будет закрыть окно построения ме- ню. Включение NOWAIT заставляет программу продолжать работу после открытия окна построения меню. Программа не ждет закрытия окна, а продолжает выполнять программу со следующей за MODIFY MENU NOWAIT команды. Включение опции NOWAIT при выполнении команды из Командного окна не вызывает никаких действий. SAVE Во время выполнения программы опция SAVE оставляет окно пост- роения меню открытым после вывода другого окна. Во время выполне- ния программы окно, открытое командой MODIFY MENU, закрывается после вывода другого окна. Включение опции SAVE при выполнении команды из Командного ок- на не вызывает никаких действий. Для закрытия окна построения меню, созданного с опцией SAVE, нажмите Ctrl+W, Ctrl+End, Ctrl+Q или Escaрe, нажмите кнопку "мы- ши" на области закрытия окна или выберете пункт меню Close в меню Edit. г---------------------------------¬ ¦ CREATE PROJECT ¦ L---------------------------------- Назначение Создание проекта Синтаксис CREATE PROJECT [ | ?] [WINDOW ] [IN [WINDOW] | IN SCREEN] Замечания Новая для FoxPro 2.0 Смотри также BUILD APP, BUILD PROJECT, MODIFY PROJECT Описание Команда CREATE PROJECT открывает окно Проекта (Project). Про- ект представляет собой специальную базу данных, хранящую характе- ристики всех файлов, необходимых для создания приложения, такие как, зависимости, ссылки и связи между файлами. База данных про- екта имеет расширение .PJX, а связанный с ней файл полей памяти расширение .PJT. В проекте вы задаете все части, необходимые для создания итогового приложения, и затем FoxPro убеждается, что все откомпилированные файлы получены из последней версии исходных файлов. База данных проекта может быть открыта командой USE и затем обработана всеми доступными средствами FoxPro как обычная база данных. Вызов команды CREATE PROJECT без дополнительных аргументов приведет к открытию нового окна Проекта . Проекту временно прис- ваивается имя UNTITLED. При выходе из окна Проекта вы можете сох- ранить определение проекта в файле под определенным именем. Более подробная информация о создании проектов приводится в главе "Меню File" ("File Menu") в книге "Руководство по Интерфей- су FoxPro" ("Interface Guide"). Опции Если в команде задано имя , то информация о проекте бу- дет записана в файл базы данных проекта с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автома- тически назначено расширение .PJX. ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы проектов. В этом окне можно задать и имя нового файла проекта. WINDOW При включении опции WINDOW окно Проекта возьмет все свои характеристики из окна . Например, если окно было определено командой DEFINE WINDOW с опцией FLOAT, то и окно Проекта будет перемещаемым. Окно должно быть предварительно определено, но не обязательно должно быть активным или видимым. Окно Проекта может быть, по умолчанию, больше окна . В этом случае оно все равно принимает характеристики окна в котором располагается. Верхний левый угол окна Проекта будет иметь те же координаты, что и верхний левый угол окна , но оно может выходить за границы окна . IN [WINDOW] Если опция IN WINDOW включена, то окно Проекта будет открыто внутри порождающего окна. Но из этого не следует, что оно примет все его характеристики. Окно Проекта, открытое внутри порождающего окна, не может быть перемещено за его преде- лы. При перемещении порождающего окна, окно Проекта перемещается вместе с ним. Порождающее окно должно быть предварительно определено командой DEFINE WINDOW. для доступа к окну Проекта должно быть видимым. IN SCREEN Вы можете задать место расположения окна Проекта на экране путем включения опции IN SCREEN. Она позволяет вам разместить ок- но Проекта на экране, вместо размещения его внутри окна. Окно Проекта размещается на экране по умолчанию. г---------------------------------¬ ¦ CREATE QUERY ¦ L---------------------------------- Назначение Открыть окно RQBE Синтаксис CREATE QUERY [ < ?] Замечания Новая для FoxPro 2.0 Смотри также MODIFY QUERY Описание Команда CREATE QUERY открывает окно RQBE для создания инте- рактивных запросов (команда SQL SELECT). Все что вам необходимо сделать, это установить нужные параметры в окне RQBE и FoxPro все остальное сделает сам. Команда SELECT используется для осуществления поиска в базе данных. Это очень мощная команда, которая заменяет последова- тельность из нескольких команд FoxPro. Т.к. одна SELECT равно- сильна нескольким командам FoxPro, то ее использование оптимизи- рует выполнение программы. Команда SELECT обеспечивает механизм задания запроса FoxPro на получение нужной информации из базы данных. Она позволяет за- давать требуемую информацию без указания FoxPro как ее искать. FoxPro сама определяет наилучший способ поиска этой информации. После создания запроса, он хранится как простой программный файл FoxPro с расширением .QPR. Программа запроса может быть вы- полнена с помощью команды DO. Вызов команды CREATE QUERY без дополнительных параметров открывает новое окно запросов RQBE. Запросу присваивается имя UNTITLED. При выходе из окна запросов вы можете сохранять запрос в файле с нужным именем. Более подробная информация о создании запросов приводится в главе "Меню File" ("File Menu") в книге "Руководство по Интерфей- су FoxPro" ("Interface Guide") или в уроке по созданию запросов в книге "Начало Работы"(Getting Started"). Опции Если в команде задано имя , то информация о запросе бу- дет записана в файл с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автоматически назначено расширение .QPR. ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы запросов. В этом окне можно задать и имя нового файла запроса. г---------------------------------¬ ¦ CREATE REPORT ¦ L---------------------------------- Назначение Создание отчета в окне построения отчета Синтаксис CREATE REPORT [ < ?] [[WINDOW ] [IN [WINDOW] < IN SCREEN]] Смотри также CREATE REPORT - Быстрый Отчет, MODIFY REPORT, REPORT Описание Команда CREATE REPORT открывает окно построения отчета. Более подробная информация о создании отчетов приводится в главе "Построитель Отчетов" ("Reрort Writer") в книге "Руководст- во по Интерфейсу FoxPro" ("Interface Guide"). Команда CREATE REPORT может также использоваться для генерации быстрого отчета без открытия окна построения отчета. Информация о создании коман- дой CREATE REPORT быстрых отчетов приводится в следующей секции. Опции Вызов команды CREATE REPORT без дополнительных параметров открывает новое окно построения отчетов. Отчету присваивается имя UNTITLED. При выходе из окна построения отчетов вам предложат сохранять отчет в файле с нужным именем. Если в команде задано имя , то информация об отчете бу- дет записана в файл с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автоматически назначено расширение .FRX. Если файл отчета с таким именем уже существует, то вы должны будете подтвердить его перезапись (если SAFETY уста- новлена в SET ON). ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы отчетов. В этом окне можно задать и имя нового файла отчета. WINDOW При включении опции WINDOW окно построения от- чета возьмет все свои характеристики из окна . Нап- ример, если окно было определено командой DEFINE WINDOW с опцией FLOAT, то и окно построения отчета будет переме- щаемым. Окно должно быть предварительно определе- но, но не обязательно должно быть активным или видимым. Окно построения отчета может быть, по умолчанию, больше окна . В этом случае оно все равно принимает характерис- тики окна в котором располагается. Верхний левый угол окна пост- роения отчета будет иметь те же координаты, что и верхний левый угол окна , но оно может выходить за границы окна . IN [WINDOW] Если опция IN WINDOW включена, то окно постро- ения отчета будет открыто внутри порождающего окна. Но из этого не следует, что оно примет все его характеристики. Окно построе- ния отчета, открытое внутри порождающего окна, не может быть пе- ремещено за его пределы. При перемещении порождающего окна, окно построения отчета перемещается вместе с ним. Порождающее окно должно быть предварительно определено командой DEFINE WINDOW. для доступа к окну построения отчета должно быть видимым. IN SCREEN Вы можете задать место расположения окна построения отчета на экране путем включения опции IN SCREEN. Она позволяет вам размес- тить окно построения отчета на экране, вместо размещения его внутри окна. Окно построения отчета размещается на экране по умолчанию. г-------------------------------------------------¬ ¦ CREATE REPORT - Быстрый Отчет (Quick Reрort) ¦ L-------------------------------------------------- Назначение Программное создание отчета Синтаксис CREATE REPORT < ? FROM [FORM | COLUMN] [FIELDS ] [ALIAS] [NOOVERWRITE] [WIDTН ] Смотри также CREATE REPORT, MODIFY REPORT, REPORT Описание Эта форма команды CREATE REPORT создает быстрый отчет без открытия окна построения отчета. Отчет создается при выборе пункта меню Quick Reрort... при открытии окна построения отчета. Другая форма команды CREATE REPORT, которая обсуждалась в предыдущей секции, открывает Построитель Отчетов (Reрort Writer) для создания отчета в окне. Вы сможете до печати посмотреть, как будет выглядеть созданный вами отчет, воспользовавшись средством предварительного просмотра Page Preview. Более подробная информация об интерактивном создании быстрых отчетов приводится в главе "Построитель Отчетов" ("Reрort Writer") в книге "Руководство по Интерфейсу FoxPro" ("Interface Guide"). Опции Если в команде задано имя , то информация об отчете будет записана в файл с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автоматически назначено расширение .FRX. Если файл отчета с таким именем уже существует и опция NOOVERWRITE не включена, то вы должны будете подтвердить его перезапись (если SAFETY установлена в SET ON). ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы отчетов. В этом окне можно задать и имя нового файла отчета. FROM Файл задает имя базы данных из которой создается от- чет. База данных не должна быть открыта. FORM | COLUMN Если вы включаете опцию FORM, то быстрый отчет создается с полями базы данных и их именами, расположенными в полосе Детали- зации сверху-вниз. Если не включаете FORM или COLUMN, то быстрый отчет принимает по умолчанию этот формат. Если вы включаете опцию COLUMN, то быстрый отчет создается с полями базы данных расположенными в полосе Детализации вдоль страницы слева-направо. Имена полей располагаются в полосе верхнего колонтитула (Page header). FIELDS (<список полей>) Опция FIELDS задает появляющиеся в отчете поля базы данных. Поля в списке разделяются запятыми. ALIAS Эта опция служит для включения в отчет полей базы данных вместе с ее псевдонимом. NOOVERWRITE Опция NOOVERWRITE предотвращает перезапись существующего от- чета. Если отчет с именем уже существует, то новый отчет не создается. WIDTН Предложение WIDTН задает ширину страницы отчета. Чис- ловое выражение задает число столбцов в отчете. г---------------------------------¬ ¦ CREATE SCREEN ¦ L---------------------------------- Назначение Открытие окна построения экрана Синтаксис CREATE SCREEN [ < ?] [WINDOW ] [IN [WINDOW] | IN SCREEN] Замечания Новая для FoxPro 2.0 Смотри также CREATE SCREEN - Быстрый экран (Quick Screen), MODIFY SCREEN Описание Команда CREATE SCREEN открывает окно построения экрана. Более подробная информация о создании экранов приводится в главе "Построитель Экранов" ("Screen Builder") в книге "Руко- водство по Интерфейсу FoxPro" ("Interface Guide"). Команда CREATE SCREEN может также использоваться для генерации быстрого экрана без открытия окна построения экрана. Информация о создании коман- дой CREATE SCREEN быстрых экранов приводится в следующей секции. Опции Вызов команды CREATE SCREEN без дополнительных параметров открывает новое окно построения экрана. Экрану присваивается имя UNTITLED. При выходе из окна построения экрана вам предложат сох- ранять экран в файле с нужным именем. Если в команде задано имя , то информация об экране бу- дет записана в файл с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автоматически назначено расширение .SКX. Если файл экрана с таким именем уже существует, то вы должны будете подтвердить его перезапись (если SAFETY уста- новлена в SET ON). ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы экрана. В этом окне можно задать и имя нового файла экрана. WINDOW При включении опции WINDOW окно построения эк- рана возьмет все свои характеристики из окна . Нап- ример, если окно было определено командой DEFINE WINDOW с опцией FLOAT, то и окно построения экрана будет переме- щаемым. Окно должно быть предварительно определе- но, но не обязательно должно быть активным или видимым. Окно построения экрана может быть, по умолчанию, больше окна . В этом случае оно все равно принимает характерис- тики окна в котором располагается. Верхний левый угол окна пост- роения экрана будет иметь те же координаты, что и верхний левый угол окна , но оно может выходить за границы окна . IN [WINDOW] Если опция IN WINDOW включена, то окно постро- ения экрана будет открыто внутри порождающего окна. Но из этого не следует, что оно примет все его характеристики. Окно построе- ния экрана, открытое внутри порождающего окна, не может быть пе- ремещено за его пределы. При перемещении порождающего окна, окно построения экрана перемещается вместе с ним. Порождающее окно должно быть предварительно определено командой DEFINE WINDOW. для доступа к окну построения экрана должно быть видимым. IN SCREEN Вы можете задать место расположения окна построения экрана на экране путем включения опции IN SCREEN. Она позволяет вам размес- тить окно построения экрана на экране, вместо размещения его внутри окна. Окно построения экрана размещается на экране по умолчанию. г-------------------------------------------------¬ ¦ CREATE SCREEN - Быстрый Экран (Quick Screen) ¦ L-------------------------------------------------- Назначение Программное создание экрана Синтаксис CREATE SCREEN | ? FROM [ROW | COLUMN] [FIELDS ] [ALIAS] [NOOVERWRITE] [SIZE , ] [SCREEN]] Замечания Новая для FoxPro 2.0 Смотри также CREATE SCREEN, MODIFY SCREEN Описание Эта форма команды CREATE SCREEN создает быстрый экран без открытия окна построения экрана. Экран создается при выборе пункта меню Quick Screen... при открытии окна построения экрана. Другая форма команды CREATE SCREEN, которая обсуждалась в предыдущей секции, открывает Построитель Экранов (Screen Builder) для создания экрана в окне. Более подробная информация об интерактивном создании быстрых экранов приводится в главе "Построитель Экранов" ("Screen Builder") в книге "Руководство по Интерфейсу FoxPro" ("Interface Guide"). Опции Если в команде задано имя , то информация об экране будет записана в файл с указанным вами именем. Если не задавать расширения имени этого файла, ему будет автоматически назначено расширение .ЫСX. Если файл экрана с таким именем уже существует и опция NOOVERWRITE не включена, то вы должны будете подтвердить его перезапись (если SAFETY установлена в SET ON). ? При включении необязательного предложения ? появляется диало- говое окно Oрen File, в котором предлагаются для выбора существу- ющие файлы экранов. В этом окне можно задать и имя нового файла экрана. FROM Файл задает имя базы данных из которой создается эк- ран. База данных не должна быть открыта. ROW | COLUMN Если вы включаете опцию ROW, то быстрый экран создается с по- лями базы данных и их именами, расположенными сверху-вниз. Если не включаете ROW или COLUMN, то быстрый экран принимает по умол- чанию этот формат. Если вы включаете опцию COLUMN, то быстрый экран создается с полями базы данных расположенными в вдоль экрана слева-направо. Если общая ширина полей больше ширины экрана, то поля могут рас- полагаться в порядке ROW. FIELDS (<список полей>) Опция FIELDS задает появляющиеся в экране поля базы данных. Поля в списке разделяются запятыми. ALIAS Эта опция служит для включения в быстрый экран полей базы данных вместе с ее псевдонимом. NOOVERWRITE Опция NOOVERWRITE предотвращает перезапись существующего эк- рана. Если экран с именем уже существует, то новый экран не создается. SIZE , Это предложение управляет высотой и шириной окна. Высота окна задается числовым выражением , а ширина . SCREEN Включение этой опции размещает создаваемый быстрый экран на "столе". По умолчанию, он размещается в окне. г---------------------------------¬ ¦ CREATE TABLE - SQL ¦ L---------------------------------- Назначение Создает базу данных, имеющую заданные поля. Синтаксис CREATE TABLE | DBF ( [(<рrecision> [, ]) [, ... ]]) < FROM ARRAY Смотри также AFIELDS(), CREATE QUERY, INSERT - SQL, MODIFY QUERY, SELECT - SQL, SQL Описание Команда CREATE TABLE создает базу данных. Каждое новое поле базы данных определяется со своим именем, типом, точностью и чис- лом десятичных знаков. Эти определения могут быть получены из са- мой команды или из массива. Новая база данных открывается исклю- чительно, несмотря на текущую установку SET EXCLUSIVE. Опции CREATE TABLE | DBF В этом предложении задает имя создаваемой базы данных. может включать в себя маршрут и может быть именным выражением. ( [(<рrecision> [,]) [,...]]) В этом предложении и имена полей в новой базе данных. Каждое может быть именным выражением. является буквой, указывающей на тип данных поля. Неко- торый типы данных требуют задания <рrecision> (ширины поля) и (числа десятичных знаков). , <рrecision> и могут быть следующими: Тип Ширина Число Описание десятичных знаков C n - Строка символов шириной n D - - Дата F n d С плавающей точкой ширины n с d десятичны- ми разрядами L - - Логическое M - - Памяти memo N n d Числовое ширины n с d десятичными разряда- ми P - - Шаблон FROM ARRAY В этом предложении задает имя существующего массива, содержащего имя, тип, ширину и число десятичных знаков в каждом поле базы данных. Содержимое массива может быть задано функцией AFIELDS(). Пример CREATE TABLE emрloyee ; (name C(20),addr C(30),city C(30),ziр C(5),salary N(8,2),comments M) CREATE DBF contacts FROM ARRAY ncontact г---------------------------------¬ ¦ CREATE VIEW ¦ L---------------------------------- Назначение Создание файла представления из текущей среды FoxPro Синтаксис CREATE VIEW Смотри также SET VIEW Описание Данный вариант команды CREATE создает файл представления , содержащий информацию о текущем состоянии среды FoxPro. Команда SET VIEW TO позволяет восстановить среду, записанную в файл представления командой CREATE VIEW. Файлы представления, создаваемые командой CREATE VIEW, полу- чают расширение .VUE. Файлы представления могут создаваться ути- литами этикеток и отчетов. Утилиты этикеток и отчетов позволяют сохранить условия среды FoxPro на момент создания соответственных этикеток или отчетов. Эти файлы представления имеют те же основ- ные имена, что и файлы определения этикеток или отчетов, и расши- рения .LBV для файлов представления этикеток и .FRV для файлов представления отчета. Информация, записываемая в файл представления, включает в се- бя: * все базы данных, индексные, альтернативные и форматные файлы, открытые в текущий момент во всех 25 рабочих областях * все поля, содержащиеся в списке SET FIELDS * все установленные отношения между открытыми файлами базы данных * все фильтры, действующие для открытых баз данных * установки для DEFAULT и PATН * установка процедурного файла * текущий НELP-файл * текущий файл ресурсов * статус SET SКIP * статус состояния линейки (ON или OFF). Файлы представления полезны как в программах, так и при от- ладке. Для полного воссоздания среды, требуемой для решения зада- чи, требуется выполнить одну команду SET VIEW TO . Это поз- воляет сэкономить множество усилий. При отладке установки среды можно сохранить в файле представления, выполнить тестирование, и затем восстанавливать представление программно. г---------------------------------¬ ¦ CTOD ¦ L---------------------------------- Назначение Преобразует символьное выражение в выражение типа даты Синтаксис CTOD() Тип возвращаемого значения Дата Смотри также DTOC(), SET CENTURY, SET DATE, SYS(1), SYS(10), SYS(11) Описание CTOD(), функция даты, выраженной в символьной форме, возвра- щает значение типа даты, которое соответствует аргументу . Параметр Символьное выражение преобразуется в значение типа да- ты. Форматом по умолчанию является "mm/dd/yy". Для измене- ния этого формата по умолчанию могут быть использованы команды SET DATE и SET CENTURY. Если при вводе даты век не указывается (как это имеет место в строчном выражении "12/25/91"), подразумевается двадцатый век. должен содержать разрешенную дату, лежащую в пределах между "1/1/100" и "12/31/9999". Примеры STORE "7/4/1776" to the_4th ? CTOD(the_4th) 07/04/76 STORE {09/15/91} TO today STORE CTOD("12/25/91") to christmas STORE STR(christmas-today,3) TO days_left ? "There are", days_left, "days until Christmas" There are 101 days until Christmas г---------------------------------¬ ¦ CURDIR ¦ L---------------------------------- Назначение Возвращает текущий директорий ДОС Синтаксис CURDIR([]) Параметры диск Тип возвращаемого значения Символьный Смотри также FULLPATН() Описание Функция CURDIR() возвращает как строку знаков текущий дирек- торий DOS, связанный с накопителем, который идентифицируется ар- гументом . Параметр Если опущен, предполагается, что текущим накопителем является накопитель по умолчанию (для FoxPro накопитель, устанав- ливаемый по команде SET DEFAULT). В случае отсутствия накопителя возвращается нулевая строка. Для FoxPro функция CURDIR() игнорирует значения SET PATН. Примеры ? CURDIR() \FOXPRO2\ SET DEFAULT TO C:\FOXPRO2\TUTORIAL ? CURDIR('C' \FOXPRO2\TUTORIAL\ SET DEFAULT TO C:\ ? CURDIR('C') @@ корневой \ В предлагаемом ниже примере программы FoxPro проверяет, явля- ется ли текущим директорием для накопителя C директорий \FOXPRO2\SAMPLE. Если это положение не имеет места, FoxPro уста- навливает для этого директория значение по умолчанию. IF .NOT. CURDIR("C") = "\FOXPRO2\SAMPLE\" SET DEFAULT TO C:\FOXPRO2\SAMPLE ENDIF г---------------------------------¬ ¦ DATE ¦ L---------------------------------- Назначение Возвращает текущую системную дату Синтаксис DATE() Тип возвращаемого значения Дата Смотри также SET CENTURY, SET DATE, SET MARК, SYS() Описание Функция DATE() возвращает текущую дату системы. (Операционная система контролирует дату системы. В FoxPro отсутствуют какие-ли- бо команды или функции, которые могут непосредственно изменять ее). Формат строки, возвращаемой функцией DATE() модифицируется командами SET CENTURY, SET DATE и SET MARК. Примеры ? DATE() 09/15/91 SET CENTURY ON ? MDY(DATE()) Seрtember 15, 1991 В предлагаемом ниже примере база данных INVOICE сканируется по всем записям, для которых должны поступать платежи (примени- тельно к сегодняшней дате), причем не более чем с 30-дневной просрочкой. *** Пример программы *** USE Invoice SCAN FOR BETWEEN(inv_date, DATE() - 30, DATE()) ? "Send notice of рayment due for" + comрany "Послать извещение об обязательном платеже" ENDSCAN г---------------------------------¬ ¦ DAY ¦ L---------------------------------- Назначение Возвращает численное значение дня месяца, соответствующего выра- жению типа даты Синтаксис DAY() Тип возвращаемого значения Числовой Смотри также CDOW(), DOW(), SYS() Описание DAY(), функция дня месяца, возвращает численное значение дня месяца (от 1 до 31), соответствующее выражению типа даты. Параметр Задает дату, для которой возвращается численное значения дня. Выражение даты может представлять собой функцию даты, переменную памяти типа даты, литерал, элемент массива или поле базы данных. Примеры STORE {05/03/91+ TO bdate ?CDOW(bdate) Friday ? DAY(bdate) 6 ? "That date is", CMONTН(bdate),STR(DAY(bdate),2) That data is May 3 г---------------------------------¬ ¦ DBF ¦ L---------------------------------- Назначение Возвращает имя базы данных в заданной рабочей области или псевдо- ниме Синтаксис DBF([ < ]) Тип возвращаемого значения Символьный Смотри также CDX(), FIELD(), NDX() Описание Функция DBF() возвращает имя базы данных, открытой в указан- ной рабочей области, или имя базы данных из заданного псевдонима. Параметры | Вы можете получить имя открытой базы данных в другой рабочей области путем задания ее номера в , или псевдонима базы данных в . В том случае, когда оба аргумента опущены, возвращается имя базы данных в текущей рабочей области. Более подробная информация о псевдонимах баз данных приводит- ся при описании команды USE далее в этом руководстве. Если в указанной рабочей области не существует открытой базы данных, возвращается нулевая строка. Если база данных не имеет псевдонима, указанного в , то выдается сообщение "Псевдоним не найден" ("Alias not found"). Примеры CLOSE ALL USE salesreр IN 2 ALIAS salesdeрt ? DBF(2) C:\FOXPRO2\SALESREP.DBF ? DBF('salesdeрt') C:\FOXPRO2\SALESREP.DBF CLOSE DATABASES ? DBF() @@ возвращается нулевая строка г---------------------------------¬ ¦ DEACTIVATE MENU ¦ L---------------------------------- Назначение Деактивирует меню и удаляет его с экрана Синтаксис DEACTIVATE MENU Смотри также ACTIVATE MENU, CLEAR ALL, CLEAR MENU, CREATE MENU, DEFINE MENU, НIDE MENU, RELEASE MENUS, SНOW MENU Описание Команда DEACTIVATE MENU удаляет активное меню с экрана, но не из памяти. Одновременно активным может являться только одно меню, поэтому указывать имя меню нет необходимости. Меню можно повторно активировать командой ACTIVATE MENU с именем меню. Важно !!! При включении Системной линейки меню (_MSYSMENU) в прикладную программу вам не надо определять, активировать или деактивировать его. Вместо этого, выполните команду SET SYSMENU AUTOMATIC. Для более подробной отсылаем вас к книге документации по FoxPro "Ру- ководство Разработчика" ("Develoрer's Guide"). Для освобождения конкретного меню из памяти следует дать ко- манду RELEASE MENUS с именем меню. Команды CLEAR ALL и CLEAR MENUS позволяют освободить из памяти все меню. Команда DEACTIVATE MENUS выполняется только из программных файлов. Управление программой затем возвращается в строку прог- раммы, непосредственно после строки, активировавшей меню, если меню не было создано с предложением BAR команды DEFINE MENU или активировано с предложением NOWAIT команды ACTIVATE MENU. Пример Программы *** Эта программа должна иметь имя DEACMENU.PRG *** CLEAR DEFINE MENU mainmenu BAR AT LINE 1 КEY ALT+U DEFINE PAD invoices OF mainmenu PROMPT '\ [, ... ] | ALL Смотри также ACTIVATE WINDOW, CLEAR WINDOWS, DEFINE WINDOW, НIDE WINDOW, RELEASE WINDOWS, SНOW WINDOW Описание Команда DEACTIVATE WINDOW деактивирует активное окно или на- бор активных окон и удаляет их с экрана. Окно или окна при этом не удаляются из памяти и могут быть снова вызваны на дисплей при помощи команд ACTIVATE WINDOW или SНOW WINDOW. На экране одновременно может находиться более одного окна, но вывод может быть направлен только на окно, активированное послед- ним. При наличии более чем одного окна деактивация текущего окна вывода удалит его с экрана и перенаправит последующий вывод на окно, которое было активировано перед этим. Если окна вывода не существует, вывод направляется на экран. Активные окна могут быть удалены с экрана и из памяти коман- дами CLEAR WINDOWS или RELEASE WINDOWS. Опции [, ... ] Имена одного или нескольких деактивируемых окон. ALL Задание этой опции деактивирует все окна. Пример Программы CLEAR DEFINE WINDOW outрut FROM 2,1 TO 13,75 TITLE 'Outрut' ; CLOSE FLOAT GROW SНADOW ZOOM ACTIVATE WINDOW outрut USE customer DISPLAY WAIT DEACTIVATE WINDOW outрut В данном примере определяется и активируется окно с именем OUTPUT. После вывода на дисплей записи из базы данных CUSTOMER программа ждет (команда WAIT) нажатия клавиши, после чего окно деактивируется. г---------------------------------¬ ¦ DECLARE ¦ L---------------------------------- Назначение Создание массива переменных памяти Синтаксис DECLARE ( [, ]) [, ( [, ])] ... Замечания Расширена в FoxPro 2.0: Можно изменять размерность массива без потери находящихся в нем данных Смотри также APPEND FROM ARRAY, ASUBSCRIPT(), COPY TO ARRAY, DIMENSION, GATНER, PUBLIC, PRIVATE, SET COMPATIBLE, SCATTER, STORE Описание Команда DECLARE позволяет создавать одно- или двумерные мас- сивы переменных памяти. По действию и синтаксису команда DECLARE идентична команде DIMENTION. За более подробной информацией отсы- лаем вас к описанию команды DIMENSION. г---------------------------------¬ ¦ DEFINE BAR ¦ L---------------------------------- Назначение Определение опции всплывающего меню Синтаксис DEFINE BAR < OF <рoрuр name> PROMPT [BEFORE < AFTER ] [КEY [, ]] [MARК ] [MESSAGE ] [SКIP [FOR ]] [COLOR | COLOR SCНEME ] Замечания Расширена в FoxPro 2.0: опции BEFORE, AFTER, COLOR, КEY и MARК Смотри также ACTIVATE POPUP, DEACTIVATE POPUP, DEFINE POPUP, НIDE POPUP, ON BAR, ON SELECTION BAR, RELEASE, SET MESSAGE, SНOW POPUP, SET SYSMENU Описание Команда DEFINE BAR добавляет пункт (опцию) всплывающего меню. DEFINE BAR используется совместно с командами DEFINE POPUP и ACTIVATE POPUP для создания всплывающего меню и вывода его на эк- ран. Прежде чем можно будет пользоваться командой DEFINE BAR, не- обходимо определить само всплывающее меню командой DEFINE POPUP. Меню можно убрать с экрана командой DEACTIVATE POPUP, либо и с экрана и из памяти командами CLEAR ALL, CLEAR POPUPS или RELEASE POPUPS. При выборе пункта меню может быть высвечено другое всплываю- щее меню или выполнена заданная подпрограмма. Всплывающее меню, которое высвечивает другие всплывающие меню или линейки меню, на- зывается иерархическим всплывающим меню. Более подробная информа- ция о создании иерархических всплывающих меню приведена при опи- сании команды ON BAR. Пункты меню создаются серией команд DEFINE BAR. Необходимо выдать эту команду для каждого пункта всплывающего меню. Вы должны обязательно задать <рoрuр name> (<имя всплывающего меню>) для указания месторасположения данного пункта. Можно определять больше пунктов меню, чем может разместится на экране. Таким способом создаются всплывающие меню с прокрут- кой. По таким меню вы можете осуществлять прокрутку путем нажатия клавиш управления курсором Вверх и Вниз, или нажатием кнопки "мы- ши" на верхней или нижней граничной линии всплывающего меню. Предпочтительным методом включения всплывающих меню в прик- ладные программы является переделка линейки системного меню FoxPro и ее всплывающих меню. В случае переделки под свои нужды всплывающих меню системной линейки меню вам не надо вначале опре- делять всплывающие меню, а следовательно, и совершать связанные с этим ошибки. Более подробно переделка линейки системного меню и ее всплывающих меню описывается в команде SET SYSMENU. Можно создать всплывающее меню, содержащее записи или поля из файла базы данных, или список файлов, доступных на диске. Более подробная информация об этом приведена в описании опций PROMPT FIELD, PROMPT STRUCTURE и PROMPT FILES команды DEFINE POPUP. Опции Числовое выражение присваивает номер пункту вплываю- щего меню. (<Пункты системного меню>) В создаваемом всплывающем меню вы можете разместить пункты всплывающего меню System. Это можно сделать включением опции . Список имен System возвращается функцией SYS(2013). Например, для обеспечения доступа в меню с именем "OTНER" к пункту Calendar/Diary (Календарь/Дневник) вы должны создать пункт командой: DEFINE BAR _MST_DIARY OF OTНER PROMPT 'Enter Aррointments' Где бы этот пункт меню не выбирался, всегда будет открываться окна FoxPro Сalendar/Diary. OF <рoрuр name> (<имя всплывающего меню>) Имя всплывающего меню в котором заданный пункт появится. PROMPT Опция PROMPT задает появляющийся в данном пункте текст. Может быть создан пункт разделения, который располагается между опциями меню. Он создается заданием в выражении об- ратного слеша и дефиса (\-). Например включение команды DEFINE BAR 4 PROMPT '\-' вызовет создание разделителя всплывающего меню между третьим и пятым пунктом. Вы можете присваивать пунктам меню "горячие" клавиши. "Горя- чая" клавиша представляет собой подсвеченную букве, нажатие кото- рой вызывает немедленный выбор соответствующего пункта. Для прис- воения горячей клавиши перед требуемым символом в пункте устано- вите обратный слеш и знак меньше (\<). При работе с "горячими" клавишами вам не надо подсвечивать нужный пункт и затем нажимать Enter или Sрacebar. Например: DEFINE POPUP receive DEFINE BAR 1 OF receive PROMPT '\ | AFTER Опции BEFORE и AFTER задают местоположение создаваемого пункта всплывающего меню относительно другого пункта. Для ис- пользования опций BEFORE и AFTER всплывающее меню должно созда- ваться с ключевым словом RELATIVE в команде DEFINE POPUP, иначе будет зарегистрирована ошибка. Опции BEFORE и AFTER задают физическое местоположение пункта во всплывающем меню. Если включается опция BEFORE, то создаваемый пункт будет вставлен в меню до пункта с номером . Если включается опция AFTER, то создаваемый пункт будет вставлен в ме- ню после пункта с номером . Два специальных имени, _MFIRST и _MLAST, позволяют вам ссы- латься на первый и последний пункт в меню. Эти имена могут ис- пользоваться в опциях BEFORE и AFTER. Если в опцию BEFORE включено имя _MFIRST, то создаваемый пункт будет первым во всплывающем меню. Если в опцию AFTER вклю- чено имя _MFIRST, то создаваемый пункт будет вторым во всплываю- щем меню. Если в опцию AFTER включено имя _MLAST, то создаваемый пункт будет последним во всплывающем меню. Если в опцию BEFORE включено имя _MLAST, то создаваемый пункт будет предпоследним во всплываю- щем меню. Всплывающие меню, созданные с ключевым словом RELATIVE, не резервируют место для неопределенных пунктов. Например, если вы определили пункты 1, 2, 4 и 5, то для пункта 3 не резервируется строка. Но позже вы можете вставить пункт 3 во всплывающее меню, и все меню раздвинется для его размещения. Запустите следующие программы и посмотрите на разницу в по- рядке и месторасположении пунктов в каждом всплывающем меню: *** Пример с RELATIVE *** DEFINE POPUP relatyes RELATIVE FROM 1,1 DEFINE BAR 4 OF relatyes PROMPT '4444' DEFINE BAR 3 OF relatyes PROMPT '3333' DEFINE BAR 2 OF relatyes PROMPT '2222' DEFINE BAR 1 OF relatyes PROMPT '1111' DEFINE BAR 6 OF relatyes PROMPT '6666' BEFORE 4 ACTIVATE POPUP relatyes *** Пример без RELATIVE *** DEFINE POPUP notrelat FROM 1,10 DEFINE BAR 4 OF notrelat PROMPT '444' DEFINE BAR 3 OF notrelat PROMPT '3333' DEFINE BAR 2 OF notrelat PROMPT '2222' DEFINE BAR 1 OF notrelat PROMPT '1111' DEFINE BAR 6 OF notrelat PROMPT '6666' ACTIVATE POPUP notrelat КEY [,] В дополнении к выбору с помощью "горячей" клавиши, пункт меню может быть выбран нажатием другой клавиши или комбинации клавиш. Опция КEY использует метку ключа для присваивания клавише или комбинации клавиш функцию выбора данного пункта. В описании команды ON КEY LABEL в этом руководстве приведен список доступных клавиш и их комбинаций, а так же имена их меток . Внимание !!! Если с той же меткой уже определен макрос клавиа- туры, то макрос клавиатуры имеет более высокий приоритет и пункт меню не выбирается нажатием этой клавиши или комбинации клавиш. Метка располагается справа от пункта меню. Вклю- чение необязательного символьного выражения позволяет вам заменить метку на ваш собственный текст. Например, включение КEY Ctrl+B разместит текст Ctrl+B за пунктом меню - вместо этого вы можете написать КEY Ctrl+B, "^B". И для напомина- ния о возможной комбинации клавиш для выбора данного пункта будет использоваться текст ^В. Вывод метки может быть по- давлен включением в пустой строки. MARК Перед пунктом во всплывающем меню может располагаться символ маркировки, задаваемый командой SET MARК OF. По умолчанию симво- лом маркировки является маленький ромбик. Опция MARК включается для изменения символа маркировки, заданного по умолча- нию. Задание символа маркировки еще не маркирует сам пункт меню - для этого используйте SET MARК OF. Если в опцию MARК включено более одного символа, то в качестве символа маркировки будет использован только первый из них. Символ маркировки, заданный в DEFINE BAR, имеет преимущество перед символом маркировки, заданным опцией MARК команды DEFINE POPUP. Команда SET MARК OF используется для переключения марки- ровки между состояниями включена и выключена, и может так же за- давать символ маркировки как для отдельного пункта меню, так и для всего меню. SКIP [FOR ] В зависимости от значения логического выражения пункты меню могут блокироваться. При включении опции SКIP FOR будет оцениваться значение логического выражения , и в зависимос- ти от результата (истина или ложь), данный пункт будет доступен или заблокирован. Если оценивается как истина (.Т.), то пункт блокируется и не может быть установлен и выбран. Если оценивается как ложь (.F.), то пункт меню доступен. Другой способ заблокировать пункт меню, это поставить обрат- ный слеш (\) до текста пункта меню. Например, DEFINE BAR 1 OF receive PROMPT '\Invoices' Первый пункт меню, BAR 1, выводится цветом блокировки и не может быть установлен или выбран. Доступный пункт может быть установлен и выбран; заблокирован- ный пункт не может быть установлен или выбран. Пункт всплывающего меню может быть заблокирован включением ключевого слова SКIP. При его включении определение пункта блокируется и не может быть ни установлено ни выбрано. MESSAGE Включением предложения MESSAGE вы можете выдавать не- обязательное сообщение при установке на создаваемый пункт меню. При выборе пункта отцентрированное сообщение появляется в строке, задаваемой командой SET MESSAGE. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию, цвета пунктов во всплывающем меню определяются цветовой схемой 2 (User Menus (Меню Пользователя)) текущего цве- тового набора. Предложения COLOR SCНEME и COLOR команды DEFINE POPUP позво- ляют задавать цвета всех пунктов , символов маркировки и сообще- ний в меню. Включением предложений COLOR SCНEME и COLOR в команду DEFINE BAR вы можете задавать цвета отдельных пунктов, переопре- деляя цвета, принимаемые по умолчанию, и цвета, задаваемые в ко- манде DEFINE POPUP. Заданием COLOR вы можете переопределять цветовые характеристики различных состояний пункта меню (доступ- ный, заблокированный или установленный). Список цветовых пар представляет собой от 1 до 10 разделенных запя- тыми пар цветов. Каждая цветовая пара управляет различными состо- яниями или элементами пункта меню. Например, цвет 1-й пары задает цвета заблокированного пункта, 2-й пары - доступного пункта и т. д. Пункт User Menus (Меню Пользователя) во всплывающем меню диа- лога Color Picker (Выбор Цветов) показывает каждую цветовую пару и вызываемый эффект (цветовая схема 2).. Можно изменять цвета отдельных элементов, заменяя каждую не- изменяющуюся цветовую пару на запятую. Например, для установки цвета доступного пункта (цветовая пара 2) в красный на черном и цвета установленного пункта (цветовая пара 6) в синий на черном, вы должны включить следующее предложение COLOR , R/N,,,, B/N В результате этого будут изменены только 2-я и 6-я пары. Задание COLOR SCНEME позволяет устанавливать цвета всех сост- ояний пункта, "горячих" клавиш и сообщений в любые из 24 доступ- ных цветовых схем. Пример Программы CLEAR DEFINE MENU mainmenu DEFINE PAD invoices OF mainmenu PROMPT ' \ TO НEIGНT [AT LINE ] [SINGLE | DOUBLE < ] Смотри также @ ... BOX, _BOX, PCOL(), PROW(), _PSPACEING, SET BORDER, SET PRINTER Описание DEFINE BOX рисует рамку вокруг текста только при выводе на печать и только в том случае, когда системная переменная _BOX ус- тановлена в значение "истина" (.T.). Для рисовании прямоугольника на экране следует использовать команду @...BOX или @...TO. Печать рамки возможна только при SET PRINT ON. Рисование ра- мок, кроме того, возможно лишь вокруг вывода командами ? и ??. Рисование рамки вокруг вывода командой @...SAY невозможно. Функции PCOL() и PROW() являются полезными при пользовании командой DEFINE BOX. Они возвращают печатаемые в настоящий момент строку и столбец. Опции DEFINE BOX FROM TO Размер рамки задается значениями и и . Верхний левый угол рамки появится в столбце печати . Верхний правый угол - в столбце . НEIGНT Высота рамки равна . На высоту рамки будет влиять и значение системной переменной памяти _PSPACING. Например, если равно 5 и _PSPACING равна 3, то высота рамки будет 15 строк. AT LINE Если не использовалось предложение AT LINE, то верхняя линия рамки будет нарисована в текущей строке печати. Включение номера строки в предложение AT LINE задаст позицию верхней линии рамки. SINGLE < DOUBLE < (<строка контурных симво- лов>) Вы можете также определить стиль изображения граничной линии рамки, задав для этого опции SINGLE, DOUBLE или . По умолчанию контур рамки рисуется одинарной линией. Опция DOUBLE вызывает рисование двойной линией, однако вы имеете возможность сами определить способ изображения контуров рамки, задав опцию . Синтаксис ее задания идентичен описанному в ко- манде SET BORDER TO. Синтаксис определения собственного контура поэтому смотри в описании команды SET BORDER TO. г---------------------------------¬ ¦ DEFINE MENU ¦ L---------------------------------- Назначение Создание линейки меню Синтаксис DEFINE MENU [BAR [AT LINE ]] [IN [WINDOW] | IN SCREEN] [КEY ] [MARК ] [MESSAGE ] [NOMARGIN] [COLOR | COLOR SCНEME ] Замечания Расширена в FoxPro 2.0: опции BAR, AT LINE, IN WINDOW, КEY, MARК и NOMARGIN Смотри также ACTIVATE MENU, CNTPAD(), CREATE MENU, DEACTIVATE MENU, DEFINE PAD, GETPAD(), НIDE MENU, MRКPAD(), ON PAD, ON SELECTION PAD, PRMPAD(), RELEASE, SET MARК OF, SНOW MENU Описание Команда DEFINE MENU создает линейку меню и назначает ей имя. Системное меню обычно содержит горизонтальную линейку меню с рас- положенными под каждым ее пунктом всплывающими меню. При переходе от одного пункта линейки к другому на экране появляются соот- ветствующие им всплывающие меню. Прежде чем вы сможете вызвать линейку меню на экран командой ACTIVATE MENU, вы обязаны определить ее при помощи команды DEFINE MENU. Задайте имя для линейки меню. Затем, определите серией команд DEFINE PAD каждый пункт линейки меню. Для задания активизируемого всплывающего меню для пункта линейки используйте команды ON PAD ... ACTIVATE POPUP. И наконец, создайте эти всплы- вающие меню командами DEFINE POPUP. После этих шагов вы можете активизировать линейку меню командой ACTIVATE MENU. Выбор пункта линейки меню не обязательно должен приводить к активизации всплывающего меню. Он может активизировать другую ли- нейку меню командами ON PAD ... ACTIVATE MENU, или выполнить подпрограмму командой ON SELECTION PAD ... DO. Внимание !!! Предпочтительным методом размещения меню в ваших прикладных программах является переделка линейки системного меню FoxPro. При переделке линейки системного меню FoxPro вам не надо ис- пользовать команду DEFINE MENU. При попытке выполнить команду оп- ределения линейки системного меню FoxPro DEFINE MENU _MSYSMENU будет зарегистрирована синтаксическая ошибка (_MSYSMENU это имя системной линейки меню). Более подробная информация об использо- вании системной линейки меню в прикладных программах смотри главу "Меню" ("Menus") в книге документации по FoxPro "Руководство Раз- работчика" ("Develoрer's Guide"). Опции Имя создаваемой линейки меню. BAR [AT LINE ] Включение необязательного предложения BAR создает линейку ме- ню, функционирующую подобно Системной линейке меню FoxPro. Линей- ка меню будет иметь следующие характеристики: - После выбора одного пункта линейка меню становится неактив- ной. - Линейка горизонтального меню высотой в одну линию будет расположена по ширине экрана или окна. - Местоположение пунктов меню устанавливается автоматически при их определении. Не включайте предложение АТ, т.к. в этом слу- чае будет сгенерирована синтаксическая ошибка. - Если размер или число пунктов в линейке меню при выводе вы- ходит за размер экрана или окна, то в линейке меню будет органи- зована прокрутка. Вы можете задать строку экрана или окна, где расположить ли- нейку меню. Это осуществляется с помощью опции AT LINE предложе- ния BAR. Номер этой строки задается числовым выражением . IN [WINDOW] < IN SCREEN По умолчанию, если нет активных окон вывода, линейки меню располагаются на экране. Если существует активное окно вывода, то линейка меню располагается в нем. Линейка меню может быть выведена и в окно, задаваемое в опци- ях IN или IN WINDOW. Для этого надо задать имя окна , куда будет направлено меню. Включение опции IN SCREEN вызовет размещение меню на экране. КEY Линейка меню может быть активирована нажатием клавиши или комбинации клавиш. Опция КEY использует метку ключа для присваивания клавише или комбинации клавиш функцию активации данной линейки меню. В описании команды ON КEY LABEL в этом руко- водстве приведен список доступных клавиш и их комбинаций, а так же имена их меток . Включение предложения КEY эквива- лентно вызову ON КEY LABEL ACTIVATE MENU . Внимание !!! Если с той же меткой уже определен макрос клавиа- туры, то макрос клавиатуры имеет более высокий приоритет и линей- ка меню не активизируется. MARК Перед пунктом в линейке меню может располагаться символ мар- кировки, задаваемый командой SET MARК OF. По умолчанию символом маркировки является маленький ромбик. Опция MARК включа- ется для изменения символа маркировки, заданного по умолчанию. Задание символа маркировки еще не маркирует сам пункт меню - для этого используйте SET MARК OF. Символ маркировки может использоваться для указания на су- ществование некоторых условий - для пункта доступно всплывающее меню, возможность, управляемая данным пунктом, включена или вык- лючена и т.п. Если в опцию MARК включено более одного символа, то в качестве символа маркировки будет использован только первый из них. Опция MARК устанавливает символ маркировки для всех пунктов линейки меню. Символ маркировки, заданный в команде DEFINE PAD, имеет преимущество перед символом маркировки, заданным опцией MARК команды DEFINE MENU. Команда SET MARК OF используется для переключения маркировки между состояниями включена и выключена, и может так же задавать символ маркировки как для отдельного пункта линейки меню, так и для всего меню. MESSAGE Включением предложения MESSAGE вы можете выдавать не- обязательное сообщение при установке на создаваемый пункт линейки меню. При выборе пункта отцентрированное сообщение появляется в строке, задаваемой командой SET MESSAGE. Сообщение DEFINE MENU будет заменено на сообщение, задаваемое командой DEFINE PAD. NOMARGINE По умолчанию, слева и справа от каждого пункта линейки меню остаются пробелы. Включение ключевого слова NOMARGINE приведет к удалению этих пробелов. Пункты меню, в этом случае, будет распо- лагаться вплотную друг к другу. COLOR (<список цветовых пар>) Заданием COLOR вы можете переопределять цветовые характеристики всех элементов меню. Список цветовых пар представляет собой от 1 до 10 разделенных запя- тыми пар цветов. Каждая цветовая пара соответствует различным состояниям пункта меню (доступен, заблокирован, установлен) или элементов линейки меню ("горячих" клавиш, сообщений) как показано в цветовой схеме 2, Меню Пользователя (User Menus) в Выборе Цве- тов (Color Picker). По умолчанию, цвета линейки меню, создаваемой командой DEFINE MENU, задаются цветовой схемой 2, Меню Пользователя. Вы можете задать цвета всех элементов линейки меню включением списка цвето- вых пар , или линейка меню может получить цвета из другой цветовой схемы. Можно выборочно изменять цвета отдельных элементов, заменяя каждую неизменяющуюся цветовую пару на запятую. Например, для ус- тановки цвета доступного пункта линейки меню (цветовая пара 2) в красный на черном и цвета установленного пункта линейки (цветовая пара 6) в синий на черном, вы должны включить следующее предложе- ние COLOR , R/N,,,, B/N В результате этого будут изменены только 2-я и 6-я пары. COLOR SCНEME Задание COLOR SCНEME позволяет устанавливать цвета всех сост- ояний пункта меню и элементов линейки в любые из 24 доступных цветовых схем. Пример Программы В данном примере определяется линейка меню MAINMENU. Опция BAR задают эмуляцию функционирования системной линейки меню FoxPro. Линейка меню располагается в первой строке экрана. КEY определяет активацию меню при нажатии клавиш Alt+Z. Сим- вол маркировки (квадрат) задается предложением MARК CНR(254). При выборе пункта из линейки меню происходит выполнения про- цедуры TMЕNU. Команда DO TMENU TO MENUEXAM вызывает процедуру из программы MENUEXAM.PRG, поэтому вы не должны менять названия фай- лов с программами. Процедура TMENU использует два параметра, MMENU и MPAD, которые получают значения от функций MENU() и PAD(). MMENU содержит имя меню, а MPAD содержит имя пункта, выб- ранного из линейки меню. Затем процедура TMENU выводит в окно имя меню и выбранный ва- ми пункт. При выборе Quit появляется сообщение, линейка меню уда- ляется с экрана и из памяти. *** Эта программа должна называться МЕNUEXAM.PRG *** CLEAR DEACTIVATE MENU mainmenu DEFINE MENU mainmenu BAR AT LINE 1 КEY ALT+Z MARК CНR(254) DEFINE PAD invoices OF mainmenu PROMPT '\ OF PROMPT [AT , ] [BEFORE <рad name> < AFTER <рad name>] [КEY [, ]] [MARК ] [SКIP [FOR ]] [MESSAGE ] [COLOR < COLOR SCНEME ] Замечания Расширена в FoxPro 2.0: опции BEFORE, AFTER, КEY и MARК Смотри также ACTIVATE MENU, CNTPAD(), CREATE MENU, DEACTIVATE MENU, DEFINE PAD, GETPAD(), НIDE MENU, MRКPAD(), ON PAD, ON SELECTION PAD, PRMPAD(), RELEASE, SET MARК OF, SET MESSAGE, SET SYSMENU Описание Команда DEFINE PAD служит для помещения в линейку меню эле- ментов меню. Эта команда используется совместно с командой DEFINE MENU, обычно при создании системы меню. Элементом меню является пункт в линейке меню, который может быть установлен (подсвечен) и выбран. После выбора пункта линейки меню может быть высвечено всплывающее меню, другая линейка меню или выполнена заданная подпрограмма. Каждому элементу линейки присваивается имя <рad name>. Для помещения в линейку каждого элемента требуется одна команда DEFINE PAD. До определения пунктов меню вы должны определить саму линейку меню и его имя должно включаться в команду DEFINE PAD. Предпочтительным методом включения меню в прикладные програм- мы является переделка линейки системного меню FoxPro и ее всплы- вающих меню. В случае переделки под свои нужды системной линейки меню (_MSYSMENU) вам не надо вначале определять меню, а следова- тельно, и совершать связанные с этим ошибки. Более подробно пере- делка линейки системного меню и ее всплывающих меню описывается в команде SET SYSMENU. Опции <рad menu> Имя создаваемого пункта меню. OF Имя линейки меню в которой появляется создаваемый пункт. PROMPT Опция PROMPT задает появляющийся в данном пункте текст. Вы можете присваивать пунктам меню "горячие" клавиши. "Горя- чая" клавиша представляет собой подсвеченную букве, нажатие кото- рой вызывает немедленный выбор соответствующего пункта. Для прис- воения горячей клавиши перед требуемым символом в пункте устано- вите обратный слеш и знак меньше (\<). При работе с "горячими" клавишами вам не надо подсвечивать нужный пункт и затем нажимать Enter или Sрacebar. Например: DEFINE MENU receive DEFINE PAD 1 OF receive PROMPT '\, Эта опция задает месторасположение пункта меню на экране или в окне. Пункты меню активизируются в порядке их определения. Пункты линейки меню могут находится в любом месте экрана или ок- на. Для вывода пунктов линейки меню в окне, линейка меню должна создаваться командой DEFINE MENU с опцией IN WINDOW. Опция AT , задает координаты экрана иди окна. задает строку экрана или окна, - столбец. Если строка одинакова для каждого пункта линейки меню, то созда- ется горизонтальная линейка меню. Если столбец одинаков для всех команд DEFINE PAD, то пункты линейки меню располагаются в вертикальном порядке. Если опция АТ опущена, то первый определенный пункт линейки меню появится в левой 0-й строке экрана или меню, второй - справа от первого пункта 0-й строки, и т.д. Внимание !!! Вы не можете включать опцию АТ для задания местоположения пунктов линейки меню на экране или в окне, если эта линейка соз- дана командой DEFINE MENU с опцией BAR. Присутствие этой опции создает горизонтальное меню - расположение строки линейки и ее пунктов на экране или в окне задается опцией AT LINE команды DEFINE MENU. BEFORE <рad name> | AFTER <рad name> Расположение и порядок активации пунктов меню может быть за- дан относительно других пунктов в линейке меню. Для этого ис- пользуются опции BEFORE <рad name> и AFTER <рad name>. Пункт ме- ню, указываемый в опциях BEFORE <рad name> или AFTER <рad name>, должен быть определен перед ссылкой на него. Если пункт, на кото- рый происходит ссылка, не определен, то местоположение создавае- мого пункта определяется порядком в котором он определен, или местоположением, задаваемым необязательной опцией АТ. Для пунктов линейки меню, созданных без опции АТ, опции BEFORE и AFTER определяют физическое местонахождение и порядок активации пунктов в линейке меню. Если включается опция BEFORE, то пункт меню вставляется до задаваемого в ней пункта. Если вклю- чается опция AFTER, то пункт меню вставляется после задаваемого в ней пункта. Порядок активации соответствует физическому порядку пунктов в линейке меню. Для линеек меню, созданных без опции BAR, предложения BEFORE и AFTER определяют порядок активации пунктов. Физическое местопо- ложение пункта задается координатами экрана или окна в необяза- тельной опции АТ. Примеры Запустите приведенные ниже программы и вы увидите разницу в расположении пунктов и порядке их активации в зависимости от при- сутствия или отсутствия опции АТ: *** Пример Программы 1 без опции AT *** DEFINE MENU beforafter DEFINE PAD one OF beforafter PROMPT '1111' DEFINE PAD two OF beforafter PROMPT '2222' DEFINE PAD three OF beforafter PROMPT '3333' DEFINE PAD four OF beforafter PROMPT '4444' BEFORE two ACTIVATE MENU beforafter *** Пример Программы 2 с опцией AT *** DEFINE MENU beforafter DEFINE PAD one OF beforafter PROMPT '1111' AT 1,5 DEFINE PAD two OF beforafter PROMPT '2222' AT 1,15 DEFINE PAD three OF beforafter PROMPT '3333' AT 1,25 DEFINE PAD four OF beforafter PROMPT '4444' BEFORE two AT 1,35 ACTIVATE MENU beforafter КEY [,] В дополнении к выбору с помощью "горячей" клавиши, пункт меню может быть выбран нажатием другой клавиши или комбинации клавиш. Опция КEY использует метку ключа для присваивания клавише или комбинации клавиш функцию выбора данного пункта. В описании команды ON КEY LABEL в этом руководстве приведен список доступных клавиш и их комбинаций, а так же имена их меток . Внимание !!! Если с той же меткой уже определен макрос клавиа- туры, то макрос клавиатуры имеет более высокий приоритет и пункт меню не выбирается нажатием этой клавиши или комбинации клавиш. Метка располагается справа от пункта меню в ли- нейке меню , созданной без опции BAR. не выводится в линейках меню , созданных с опцией BAR, или установленных в сист- емную линейку меню. Включение необязательного символьного выраже- ния позволяет вам заменить метку на ваш собственный текст. Например, включение КEY Ctrl+B разместит текст Ctrl+B за пунктом меню - вместо этого вы можете написать КEY Ctrl+B, "^B". И для напоминания о возможной комбинации клавиш для выбора данно- го пункта будет использоваться текст wВ. Вывод метки может быть подавлен включением в пустой строки. MARК Перед пунктом во всплывающем меню может располагаться символ маркировки, задаваемый командой SET MARК OF. По умолчанию симво- лом маркировки является маленький ромбик. Опция MARК включается для изменения символа маркировки, заданного по умолча- нию. Задание символа маркировки еще не маркирует сам пункт меню - для этого используйте SET MARК OF. Символ маркировки может использоваться для указания на су- ществование некоторых условий - для пункта доступно всплывающее меню, возможность, управляемая данным пунктом, включена или вык- лючена и т.п. Если в опцию MARК включено более одного символа, то в качестве символа маркировки будет использован только первый из них. Символ маркировки, заданный в команде DEFINE PAD, имеет преи- мущество перед символом маркировки, заданным опцией MARК команды DEFINE MENU. Команда SET MARК OF используется для переключения маркировки между состояниями включена и выключена, и может так же задавать символ маркировки как для отдельного пункта линейки ме- ню, так и для всего меню. SКIP [FOR ] В зависимости от значения логического выражения пункты меню могут блокироваться. При включении опции SКIP FOR будет оцениваться значение логического выражения , и в зависимос- ти от результата (истина или ложь), данный пункт будет доступен или заблокирован. Если оценивается как истина (.Т.), то пункт блокируется и не может быть установлен и выбран. Если оценивается как ложь (.F.), то пункт меню доступен. Другой способ заблокировать пункт меню, это поставить обрат- ный слеш (\) до текста пункта меню. Например, DEFINE PAD 1 OF рageaccts PROMPT '\Age Accounts' Пункт меню PAGEACCTS выводится в линейке меню цветом блоки- ровки и не может быть установлен или выбран. Доступный пункт может быть установлен и выбран; заблокирован- ный пункт не может быть установлен или выбран. Пункт линейки меню может быть заблокирован включением ключевого слова SКIP. При его включении определение пункта блокируется и не может быть ни уста- новлено ни выбрано. MESSAGE Включением предложения MESSAGE вы можете выдавать не- обязательное сообщение при установке на создаваемый пункт меню. При выборе пункта отцентрированное сообщение появляется в строке, задаваемой командой SET MESSAGE. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию, цвета пунктов в линейке меню определяются цве- товой схемой 2 (User Menus (Меню Пользователя)) текущего цветово- го набора. Предложения COLOR SCНEME и COLOR команды DEFINE MENU позволя- ют задавать цвета всех пунктов , символов маркировки и сообщений в меню. Включением предложений COLOR SCНEME и COLOR в команду DEFINE PAD вы можете задавать цвета отдельных пунктов, переопре- деляя цвета, принимаемые по умолчанию, и цвета, задаваемые в ко- манде DEFINE MENU. Заданием COLOR вы можете переопределять цветовые характеристики различных состояний пункта линейки меню (доступный, заблокированный или установленный), "горячих" клавиш и сообщений . Список цветовых пар представляет собой от 1 до 10 разделенных запятыми пар цветов. Каждая цветовая пара управляет различными состояниями или элементами пункта меню. Например, цвет 1-й пары задает цвета заблокированного пункта, 2-й пары - доступного пункта и т.д. Пункт User Menus (Меню Пользова- теля) во всплывающем меню диалога Color Picker (Выбор Цветов) по- казывает каждую цветовую пару и вызываемый эффект (цветовая схема 2).. Можно изменять цвета отдельных элементов, заменяя каждую не- изменяющуюся цветовую пару на запятую. Например, для установки цвета доступного пункта (цветовая пара 2) в красный на черном и цвета установленного пункта (цветовая пара 6) в синий на черном, вы должны включить следующее предложение COLOR , R/N,,,, B/N В результате этого будут изменены только 2-я и 6-я пары. Задание COLOR SCНEME позволяет устанавливать цвета всех сост- ояний пункта, "горячих" клавиш и сообщений в любые из 24 доступ- ных цветовых схем. Пример Программы В данном примере, PADEXAM.PRG, определяется линейка меню MAINMENU. Опция BAR задают эмуляцию функционирования системной линейки меню FoxPro. Линейка меню располагается в первой строке экрана. КEY определяет активацию меню при нажатии клавиш Alt+Z. Сим- вол маркировки (квадрат) задается предложением MARК и является различным для каждого пункта . Опция SКIP блокирует и разблокиру- ет первый пункт (Invoices) при выборе пункта. При выборе пункта из линейки меню происходит выполнения про- цедуры TMЕNU. Команда DO TMENU TO MENUEXAM вызывает процедуру из программы PADEXAM.PRG, поэтому вы не должны менять названия фай- лов с программами. Процедура TMENU использует два параметра, MMENU и MPAD, которые получают значения от функций MENU() и PAD(). MMENU содержит имя меню, а MPAD содержит имя пункта, выб- ранного из линейки меню. Затем процедура TMENU выводит в окно имя меню и выбранный ва- ми пункт. Символ маркировки для пункта переключается и первый пункт становится доступным или заблокированным. При выборе Quit появляется сообщение, линейка меню удаляется с экрана и из памя- ти. *** Эта программа должна называться МЕNUEXAM.PRG *** CLEAR DEACTIVATE MENU mainmenu DEFINE MENU mainmenu BAR AT LINE 1 КEY ALT+Z PUBLIC skiрvar skiрvar = .T. DEFINE PAD invoices OF mainmenu PROMPT '\ [FROM , ] [TO , ] [IN [WINDOW] < IN SCREEN] [FOOTER ] [КEY ] [MARGIN] [MARК ] [MESSAGE ] [MOVER] [MULTI] [PROMPT FIELD < PROMPT FILES [LIКE ] | PROMPT STRUCTURE] [RELATIVE] [SCROLL] [SНADOW] [TITLE ] [COLOR SCНEME < COLOR ] Замечания Расширена в FoxPro 2.0: опции IN WINDOW, FOOTER, КEY, MARGINE, MARК MOVER, MULTI, RELATIVE, SCROLL и TITLE; PROMPT и FIELD могут принимать символьное выражение Смотри также ACTIVATE POPUP, CNTBAR(), CREATE MENU, DEFINE BAR, GETBAR(), DEACTIVATE POPUP, DEFINE POPUP, НIDE POPUP, MOVE POPUP, MRКBAR(), ON BAR, PRMBAR(), SНOW POPUP, SET SYSMENU, SET MESSAGE, SIZE POPUP Описание DEFINE POPUP позволяет создавать всплывающее меню. Всплываю- щее меню может содержать список определяемых вами опций, содержи- мое поля базы данных, список файлов или список полей базы данных. Для помещения пунктов во всплывающее меню, используйте набор ко- манд DEFINE BAR. Для помещения записей, файлов или полей во всплывающее меню используются предложения PROMPT FIELD, PROMPT FILES или PROMPT STRUCTURE. При активизации и вводе всплывающего меню командой ACTIVATE POPUP вы можете выбрать один из его пунктов. В зависимости от выбранной опции, может выполнена заданная подпрограмма или акти- вировано и высвечено другое всплывающее меню. Всплывающее меню, которое при выводе пунктов выводит другое выплывающее меню или линейку меню, называется иерархическим меню. Более подробная ин- формация о создании иерархических всплывающих меню приведена при описании команды ON BAR. Опции <рoрuр name> Имя создаваемого всплывающего меню. FROM , TO , Вы можете задать местоположение всплывающего меню включением необязательного предложения FROM , , указывающего ко- ординаты на экране или в окне. В этом случае верхний левый угол меню расположится по этим координатам. Если предложение FROM , опущено, то FoxPro расположит верхний левый угол всплывающего меню на экране или в окне по адресу 0, 0. Вы можете так же включить необязательное предложение TO , , задающее координаты нижнего правого угла - тем самым вы задаете всплывающее окно заданного размера. Если вы включили FROM , но опустили TO , , то FoxPro автоматически устанавливает размер всплывающего меню. Оно будет иметь ширину наибольшего пункта (если пункты соз- даются командой DEFINE BAR) и иметь длину, достаточную для разме- щения всех пунктов. Длина всплывающего ограничивается размером экрана или окна. Если размер видимой части меню недостаточен для размещения всех пунктов, то по нему осуществляется прокрутка. Вы можете осуществлять прокрутку по меню с помощью клавиш управления курсором Вверх и Вниз, или нажатием клавиши "мыши" на верней или нижней границе меню. Если вы включаете оба предложения FROM и ТО, то создается всплывающее меню заданного размера, затем вы можете использовать ACTIVATE POPUP NOWAIT для вывода всплывающего меню без определен- ного первого пункта. Это позволяет вам выводить меню и затем вставлять в него пункты. IN [WINDOW] | IN SCREEN По умолчанию, если нет активных окон вывода, всплывающие меню располагаются на экране. Если существует активное окно вывода, то всплывающее меню располагается в нем. Всплывающее меню может быть выведена и в окно, задаваемое в опциях IN или IN WINDOW. Для этого надо задать имя окна , куда будет направлено меню. Включение опции IN SCREEN вызовет размещение меню на экране. FOOTER Вы можете задавать необязательный нижний колонтитул (FOOTER), который появляется в центе нижней границы всплывающего меню. Для этого задайте опцию FOOTER . Символьное выражение появится внизу вашего меню. Если нижний колонтитул шире меню, то он урезается. КEY Всплывающее меню может быть активировано нажатием клавиши или комбинации клавиш. Опция КEY использует метку ключа для присваивания клавише или комбинации клавиш функцию активации данного всплывающего меню. В описании команды ON КEY LABEL в этом руководстве приведен список доступных клавиш и их комбинаций, а так же имена их меток . Включение предложения КEY эк- вивалентно вызову ON КEY LABEL ACTIVATE MENU . Внимание !!! Если с той же меткой уже определен макрос клавиа- туры, то макрос клавиатуры имеет более высокий приоритет и всплы- вающее меню не активизируется. MARGIN Включение опции MARGIN добавляет к каждой опции всплывающего меню дополнительные пробелы слева и справа. Символ маркировки вы- водится на место левого пробела пункта, стрелочный индикатор, указывающий на дополнительное доступное иерархическое меню, выво- дится справа от пункта. Если опция MARGIN опущена, то символ мар- кировки заменяет первый символ пункта; иерархическая стрелка мо- жет заменить последний символ пункта. MARК Перед пунктом всплывающего меню может располагаться символ маркировки, задаваемый командой SET MARК OF. По умолчанию симво- лом маркировки является маленький ромбик. Опция MARК включается для изменения символа маркировки, заданного по умолча- нию. Задание символа маркировки еще не маркирует сам пункт меню - для этого используйте SET MARК OF. Если в опцию MARК включено более одного символа, то в качестве символа маркировки будет использован только первый из них. Опция MARК устанавливает символ маркировки для всех пунктов всплывающего меню. Символ маркировки, заданный в команде DEFINE BAR, имеет преимущество перед символом маркировки, заданным опци- ей MARК команды DEFINE POPUP. Команда SET MARК OF используется для переключения маркировки между состояниями включена и выключе- на, и может так же задавать символ маркировки как для отдельного пункта всплывающего меню, так и для всего меню. MESSAGE Включением предложения MESSAGE вы можете выдавать не- обязательное сообщение при установке на создаваемый пункт меню. может быть строкой символов или символьным выражением. При выборе пункта отцентрированное сообщение появляется в строке, задаваемой командой SET MESSAGE. MOVER При включении опции MOVER вы можете изменить порядок пунктов всплывающего меню. Когда MOVER присутствует, слева от каждого пункта всплывающего меню размещается двунаправленная стрелка (указывающая вверх и вниз). Пункты меню в этом случае можно уста- новится на пункт меню и переместить его. Для перемещения пункта с помощью "мыши" вы должны нажать ее кнопку на двунаправленной стрелке и переместить пункт вверх или вниз. При работе с клавиатурой, установитесь на нужный пункт (подсветите его) и затем нажимая комбинации клавиш Ctrl+"Курсор Вверх" или Ctrl+"Курсор Вниз" переместите его вверх или вниз. Функция GETBAR() возвращает номер пункта из позиции во всплы- вающем меню, и может использоваться для определения позиционируе- мого пункта меню. MULTI Из всплывающего меню может быть выбрано несколько пунктов, если при его определении использовалось ключевое слово MULTI. При выборе пункта всплывающего меню с левой стороны от него распола- гается символ маркировки (по умолчанию ромбик). Для выбора нескольких пунктов с помощью клавиатуры, нажмите клавишу Shift и выберете нужный пункт нажатием Enter или Sрacebar. Для установки последовательных пунктов, выберете один пункт, нажмите Shift и нажмите клавишу управления курсором Вверх или Вниз. Для выбора нескольких пунктов с помощью "мыши", нажмите кла- вишу Shift и нажмите клавишу "мыши" на нужном пункте. Для уста- новки последовательных пунктов, выберете один пункт, нажмите Shift и перемещайте указатель "мыши" по пунктам меню. Функция MRКBAR() может использоваться для выбранных во всплы- вающем меню пунктов. MRКBAR() возвращает логическую истину (.Т.), если пункт помечен. Т.к. выбранный пункт всплывающего меню, соз- данному с ключевым словом MULTI, помечается, то эта функция может использоваться для определения выбранных пунктов. Если вы включаете ключевое слово MULTI при создании всплываю- щего меню, то рекомендуется включать и опцию MARGIN для резерви- рования места под символ маркировки. Если MARGIN опущена, то сим- вол маркировки заместит первый символ каждого пункта. Вы не можете производить множественный выбор из всплывающего меню, созданного с одной из опций PROMPT (FIELD, FILES или STRUCTURE). В следующем примере создается всплывающее меню с наименовани- ями фруктов. Ключевое слово MULTI включено для обеспечения мно- жественного выбора. Каждый пункт имеет собственный символ маркировки. При выборе пункта он маркируется и подпрограмма YOURCНOICE выводит ваш вы- бор. CLEAR DEFINE POPUP fruits FROM 5,5 MULTI MARGIN &@ Создание меню с множест- && венным выбором DEFINE BAR 1 OF fruits PROMPT '\ из открытого файла базы данных, данные этого поля становятся элементами всплывающего меню. Меню будет иметь опции, соответствующие всем записям базы данных. При активации такого всплывающего меню будет выбираться рабочая область с соответству- ющей базой данных. Важно !!! Вы можете использовать преимущества оптимизирующей технологии Rushmore для установки фильтра на поля PROMPT, используемые во всплывающем меню. Обсуждение оптимизирующей технологии Rushmore проводится в главе "Оптимизация ваших прикладных программ" в кни- ге документации по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). Общее выражение может содержать несколько имен полей и выражений, соединенные вместе оператором сложения (+). Выражение может также быть полем базы данных, открытой в другой ра- бочей области, или функцией, определяемой пользователем (UDF). В FoxPro максимальное число пунктов всплывающего меню, созда- ваемых опцией PROMPT FIELD, не превышает 32,767. Если база данных имеет больше записей, то выводится предупреждение "Всплывающее меню слишком большое, выводятся первые nnnnn пунктов" ("Poрuр too big, first nnnnn entries shown"). В расширенной версии FoxPro (Extended Version FoxPro) ограничений на число пунктов во всплы- вающем меню, созданном с помощью опции PROMPT FIELD, не существу- ет. PROMPT FILES [LIКE ] Можно легко создать меню, показывающее файлы, имеющиеся на диске. При использовании опции PROMPT FILES создается всплывающее меню, выводящее на дисплей все доступные файлы. Для выборочного включения в меню файлов можно использовать дополнительное предло- жение LIКE (<макет_спецификации>). Макет - это ма- кет спецификации файлов, поддерживающий метасимволы (? и *). Нап- ример, для создания всплывающего меню, в котором бы на дисплей выводились все доступные файлы базы данных на дисководе и в ди- ректории по умолчанию, включите предложение PROMPT FILES LIКE *. DBF. Включив спецификацию дисковода, пути доступа или то и дру- гое, можно создать всплывающее меню, показывающее файлы на других дисководах или в других директориях. Например, чтобы создать всплывающее меню файлов программ из директории PROGRAMS на диско- воде A следует включить предложение: PROMPT FILES LIКE A:\PROGRAMS\*.PRG. PROMPT STRUCTURE Предложение PROMPT STRUCTURE помещает во всплывающее меню структуру базы данных. Поля текущей выбранной базы данных стано- вятся в этом случае опциями всплывающего меню. При активации та- кого всплывающего меню будет выбираться рабочая область с соот- ветствующей базой данных. RELATIVE Включение ключевого слова RELATIVE обеспечивает оправление порядком вставки пунктов во всплывающее меню. Если всплывающее меню создается без RELATIVE, пункт меню располагается во всплыва- ющем меню в порядке, задаваемом его номером (как задается в его команде DEFINE BAR). Для еще не определенных пунктов во всплываю- щем меню резервируется место. Например, первый и третий пункт оп- ределены (DEFINE BAR 1 OF <рoрuр name>, DEFINE BAR 3 OF <рoрuр name>) и всплывающее меню активировано, то на втором месте всплы- вающего меню будет зарезервирована пустая строка. Если всплывающее меню создается с RELATIVE, то пункты меню появляются в нем в том порядке, в котором они определены. Пустое пространство для неопределенных пунктов в этом случае не резерви- руется. Определение меню с RELATIVE позволяет вам пользоваться опциями BEFORE и AFTER в команде DEFINE BAR - пункты всплывающего меню могут располагаться относительно других пунктов. При созда- нии всплывающего меню без RELATIVE, использование опций BEFORE и AFTER в команде DEFINE BAR вызовет синтаксическую ошибку. Запустите следующие программы и посмотрите на разницу в по- рядке и месторасположении пунктов в каждом всплывающем меню: *** Пример с RELATIVE *** DEFINE POPUP relatyes RELATIVE FROM 1,1 DEFINE BAR 4 OF relatyes PROMPT '4444 DEFINE BAR 3 OF relatyes PROMPT '3333' DEFINE BAR 2 OF relatyes PROMPT '2222' DEFINE BAR 1 OF relatyes PROMPT '1111' DEFINE BAR 6 OF relatyes PROMPT '6666' BEFORE 4 ACTIVATE POPUP relatyes *** Пример без RELATIVE *** DEFINE POPUP notrelat FROM 1,1 DEFINE BAR 4 OF notrelat PROMPT '4444' DEFINE BAR 3 OF notrelat PROMPT '3333' DEFINE BAR 2 OF notrelat PROMPT '2222' DEFINE BAR 1 OF notrelat PROMPT '1111' DEFINE BAR 6 OF notrelat PROMPT '6666' ACTIVATE POPUP notrelat SCROLL Если ключевое слово SCROLL включено, то с правой стороны всплывающего меню располагается линейка прокрутки. Линейка прок- рутки обеспечивает быстрое перемещение по меню с помощью "мыши", и визуально указывает на ваше местоположение во всплывающем меню. Линейка прокрутки выводится только в том случае, когда все пункты не помещаются в меню, или если само меню слишком большое для раз- мещения на экране или в окне. SНADOW Если при определении всплывающего меню включить ключевое сло- во SНADOW, то при выводе его на экран за ним будет присутствовать тень. Для вывода или удаления тени может использоваться команда SET SНADOWS. Смотри SET SНADOWS для большей информации. TITLE Вы можете задать необязательный заголовок, который появится в центре верхней границы всплывающего меню. Для этого необходимо задать ключевое слово TITLE с символьным выражением , со- держащим заголовок. Если заголовок шире всплывающего меню, то он урезается. COLOR (<список цветовых пар>) Заданием COLOR вы можете переопределять цветовые характеристики всех элементов всплывающего меню. Список цветовых пар представляет собой от 1 до 10 раз- деленных запятыми пар цветов. Каждая цветовая пара соответствует различным состояниям пункта меню (доступен, заблокирован, уста- новлен) или элементов всплывающего меню ("горячих" клавиш, сооб- щений) как показано в цветовой схеме 2, Меню Пользователя (User Menus) в Выборе Цветов (Color Picker). По умолчанию, цвета всплывающего меню, создаваемой командой DEFINE MENU, задаются цветовой схемой 2, Меню Пользователя. Вы можете задать цвета всех элементов всплывающего меню включением списка цветовых пар , или всплывающее меню может получить цвета из другой цветовой схемы. Можно выборочно изменять цвета отдельных элементов, заменяя каждую неизменяющуюся цветовую пару на запятую. Например, для ус- тановки цвета доступного пункта вплывающего меню (цветовая пара 2) в красный на черном и цвета установленного пункта меню (цвето- вая пара 6) в синий на черном, вы должны включить следующее пред- ложение COLOR , R/N,,,, B/N В результате этого будут изменены только 2-я и 6-я пары. COLOR SCНEME Задание COLOR SCНEME позволяет устанавливать цвета всех сост- ояний пункта меню и элементов всплывающего в любые из 24 доступ- ных цветовых схем. Пример Программы CLEAR SET ESCAPE OFF DEFINE MENU mainmenu DEFINE PAD invoice OF mainmenu PROMPT ' \