3. Команды и функции -------------------- Эта глава содержит полное описание всех команд и функций FoxPro. В сжатой форме аналогичная информация приводится в опера- тивной системе помощи FoxPro. Мы настоятельно рекомендуем вам изучить возможности оперативной помощи. Она обеспечивает очень удобный и быстрый способ нахождения ответов на возникающие при работе с FoxPro вопросы. Примеры Внимание !!! Все примеры в этой части и в главе, посвященной системным пе- ременным памяти, дублируются в оперативной системе помощи FoxPro. Поэтому, вам не надо набирать эти примеры для запуска - примеры из помощи могут копироваться и вставляться непосредственно в ваши программы. Смотри первую часть этой книги (Язык программирования FoxPro) для получения информации о создании и выполнении прог- рамм, и о способе копирования и вставки примеров из оперативной помощи. Файлы, используемые в этих примерах, находятся в директории COMMFUNC, создаваемом при установке FoxPro. Для успешного запуска программ примеров FoxPro должен иметь доступ к этим файлам. Для указания на их местонахождения может использоваться команда SET DEFAULT. Например, допустим, что директорий COMMFUNC является подди- ректорием FOXPRO2 на диске С. Команда SET DEFAULT TO C:\FOXPRO2\COMMFUNC укажет FoxPro где искать нужные файлы. Более подробная информации о поиске файлов в FoxPro приводится при описании команды SET DEFAULT в этой части. Примеры, приведенные в этой части, предназначены для иллюст- рации работы команд и функций FoxPro. Они обычно являются корот- кими и не содержат обработчики ошибок. Поэтому, они не всегда вы- полняются как требуется. Например, в случае когда определенный файл или окно уже открыты или не могут быть найдены, или при от- сутствии места на диске, могут выдаваться сообщения об ошибках. При возникновении ошибки во время выполнения программы на эк- ран выводится сообщение. Обратите на него внимание. Полный список сообщений об ошибках FoxPro с рекомендациями по их устранению приводится в книге документации по FoxPro Руководство разработчи- ка" (Develoрer's Guide"). FoxPro версии 2.0 ----------------- FoxPro 2.0 характеризуется множеством новых и усовершенство- ванных команд, функций и системных переменных памяти. В этой час- ти имеется описание каждой из них. Ниже приведен список новых и расширенных команд, функций и системных переменных памяти. Если возможности команды или функции были расширены, то включается описание этих усовершенствований. ---------------------------------------------------------------------- Команда, функция Новая Расширена Описание усовершенствований или системная переменная памяти ---------------------------------------------------------------------- % - модульный + оператор / < // + ? < ?? + предложение STYLE @ ... SAY/GET + предложение SIZE, код К PICTURE @ ... GET - Блок + проверки @ ... GET - Неви- + димые кнопки @ ... GET - Списки + @ ... GET - Всплы- + вающие меню @ ... GET - + Текстовые кнопки @ ... GET - + Селективные кнопки @ ... GET - Области + модификации текста ACOPY() + ACTIVATE MENU + предложение NOWAIT ACTIVATE POPUP + предложения AT, BAR, NOWAIT и REST ADEL() + ADIR() + AELEMENT() + AFIELDS() + AINS() + ALEN() + APPEND FROM + дополнительные типы файлов APPEND FROM ARRAY + блокировка только заголовка базы данных в FoxPro/LAN ASCAN() + ASUBSCRIPT() + BROWSE + ключевые слова LEDIT, LPARTITION, NOLINК, NOLGRID, NOOPTIMIZE, NOREFRESН, NORGRID, REDIT и REST предложения FOR, PARTITION, WНEN и VALID, поддержка SET SКIP, ROW() и COL() BUILD APP + BUILD EXE + BUILD PROJECT + CDX() + CLEAR READ + CNTBAR() + CNTPAD() + COPT INDEXES + COPY STRUCTURE + + предложения CDX и PRODUCTION COPY TAG + COPY TO + предложения CDX и PRODUCTION, ключевое слово NOOPTIMIZE, допол- нительные типы файлов CREATE COLOR SET + CREATE MENU + CREATE PROJECT + CREATE QUERY + CREATE REPORT + программное создание быстрого отчета с предложениями ALIAS, COLUMN, FIELDS, FORM, NOOVERWRITE, и WIDTН CREATE SCREEN + CREATE TABLE - SQL + _CUROBJ + DEFINE BAR + предложения AFTER, BEFORE, COLOR, КEY и MARК DEFINE MENU + предложения AT LINE, BAR, IN WINDOW, КEY, MARК и NOMARGIN DEFINE PAD + предложения AFTER, BEFORE, КEY и MARК DEFINE POPUP + предложения FOOTER, IN WINDOW, КEY, MARGIN, MARК, MOVER, MULTI, RELATIVE SCROLL и TITLE; PROMPT FIELD прини- мает общие выражения DEFINE WINDOW + предложения FILL, FOOTER и MINIMIZE DELETE TAG + DIMENSION/DECLARE + можно изменять размерность массива без потери данных DISPLAY/ + выводит дополнительную информацию, LIST STATUS поддержка драйверов принтеров DO + предложение IN EVALUATE() + EXPORT + EXTERNAL + FULLPATН() + может быть возвращен относительный маршрут между двумя файлами GATНER + ключевое слово MEMO _GENGRAPН + _GENMENU + _GENPD + _GENSCRN + _GENXTAB + GETBAR() + GETPAD() + IMPORT + INDEX + предложения ASCENDING, COMPACT, DISCENDING и TAG; индексное выраже- ние может содержать функции, опре- деляемые пользователем INSERT - SQL + КEYBOARD + символьное выражение КEYBOARD может содержать клавишные метки или UDF КEY() + поддержка составных индексов LABEL + опция PREVIEW; ключевое слово NOOPTIMIZE LOCFILE() + LOOКUP() + MDX() + MLINE() + новое предложение для смещения строки памяти memo _MLINE + MODIFY LABEL + предложение NOENVIRONMENT; опция NOWAIT MODIFY MENU + MODIFY PROJECT + MODIFY QUERY + MODIFY REPORT + предложение NOENVIRONMENT; опция NOWAIT MODIFY SCREEN + MOVE POPUP + MRКBAR() + MRКPAD() + NDX() + поддержка составных индексов OBJNUM() + ON BAR + ON PAD + предложение ACTIVATE MENU ON SELECTION BAR + ON SELECTION MENU + ON() + ORDER() + поддержка составных индексов PACК + опции MEMO и DBF; может прерывать- ся нажатием клавиши Escaрe PARAMETERS + можно передавать целиком массивы _PDSETUP + POP КEY + POP MENU + POP POPUP + _PRETEXT + PRMBAR() + PRMPAD() + PUSН КEY + PUSН MENU + PUSН POPUP + RDLEVEL() + READ + предложения ACTIVATE, COLOR, CYCLE, DEACTIVATE, LOCК, MODAL, NOLOCК, OBJECT, SНOW, VALID, WНEN и WITН READКEY() + необязательный числовой аргумент, для определения того, как закон- чилась последняя команда READ REINDEX + опция COMPACT RELEASE BAR + RELEASE PAD + RELEASE MENUS + опция EXTENDED RELEASE POPUPS + опция EXTENDED REPORT + опции PREVIEW и NOCONSOLE; ключевое слово NOOPTIMIZE RETURN + отсутствие RETURN в процедуре или UDF автоматически возвращает значе- ние истина (.Т.) SCATTER + ключевое слово MEMO SCROLL + горизонтальная прокрутка SELECT() + опции 0 и 1 SELECT - SQL + SET ANSI + SET НELPFILTER + SET INDEX + предложения ADDITIVE, ASCENDING, DESCENDING и ORDER SET LIBRARY + SET MARК OF + SET MESSAGE + предложение WINDOW SET OPTIMIZE + SET ORDER + предложения ASCENDING, DESCENDING IN и TAG SET PDSETUP + SET PRINTER + поддержка очереди и сервера сети SET SКIP + SET SКIP OF + SET SYSMENU + предложения AUTOMATIC и DEFAULT, управление Системным меню FoxPro SET TALК + предложение WINDOW SET TEXTMERGE + SET TEXTMERGE + DELIMITERS SET TRBETWEEN + SНOW GET + SНOW GETS + SНOW OBJECT + SET WINDOW + ключевое слово REFRESН SКPBAR() + SКPPAD() + SIZE POPUP + SYS(2011) + SYS(2012) + SYS(2013) + SYS(2014) + SYS(2015) + SYS(2016) + SYS(2017) + SYS(2018) + SYS(2019) + SYS(2020) + SYS(2021) + SYS(2022) + SYS(2023) + TAG() + _TALLY + _TEXT + TEXT...ENDTEXT + возможности объединения текста _TНROTTLE + TYPE + ключевые слова AUTO и WRAP; поддер- жка драйвера принтера UDFs + могут использоваться в предложениях FOR и WНILE, индексных выражениях; присутствие RETURN не является обязательным USE + предложения AGAIN, ASCENDING, DESCENDING и ORDER WAIT + опция NOWAIT для предложения WINDOW, WAIT CLEAR WBORDER() + WCНILD() + WLAST() + WMAXIMIZE() + WMINIMIZE() + WPARENT() + WREAD() + ZOOM WINDOW + ---------------------------------------------------------------------- г---------------------------------¬ ¦ % ¦ L---------------------------------- Назначение Оператор деления по модулю. Возвращает остаток от деления двух числовых выражений. Синтаксис % Параметры Делимое (число которое делится). Делитель (число на которое делят) Замечания Новая для FoxPro 2.0 Смотри также MOD() Описание Оператор деления по модулю % возвращает остаток при делении одного числового выражения на другое числовое выражение. Этот оператор и оператор MOD() возвращают одинаковые значения. Оператор % подобен арифметическим операторам + (сложение), - (вычитание), * (умножение) / (деление) и w (возведение в степень. При комбинации этих операторов в одном арифметическом выражении % имеет тот же приоритет, что и * и /. Смотри Руководство Команды и Функции FoxPro для получения информации об этих операторах и по- рядке их выполнения. Параметры является делимым (числом которое делится). Число де- сятичных знаков после запятой в определяет число десятич- ных знаков результата. является делителем (числом на которое делят выражение ). Возвращается положительное число, если положи- тельно, и отрицательное число, если отрицательно. Примеры ? 36 % 10 6 ? (4*9) % (90/9) 6 ? YEAR(DATE()) % 4 3 ? 25.250 % 5.0 0.250 г---------------------------------¬ ¦ @ ¦ L---------------------------------- Назначение Макроподстановка Синтаксис &[.] Смотри также EVALUATE() Описание Когда функции @ предшествует имя переменной памяти символьно- го типа, программа FoxPro инструктируется о необходимости выпол- нения макроподстановки - значение заменяет функцию @ и имя переменной, которое следует за ним. После этого команда вы- полняется точно также как если бы она первоначально включала сим- волы из переменной памяти. Вы можете использовать макроподстанов- ку в любой команде или функции, которая допускает использование цепочки литералов. При использовании функции макроподстановки вы можете предост- авить пользователю подсказку, касающуюся информации, а затем при- менить эту информацию как часть команды, которая требует цепочки литералов. Примеры Включает имя переменной памяти , используемой для макроподстановке. Макроопределение не должно превышать макси- мальную длину оператора, разрешенной в FoxPro, которая составляет 1024 символа. [.] Для сцепления дополнительных символов в макрорасширении при- меняется дополнительный ограничитель "точка" (.). Строка симво- лов, заменяемая функцией @, сама может содержать функции &, и ес- ли существует переменная памяти, имя которой сопровождается по- добной вложенной функцией @, содержимое такой переменной также заменяется в команде. Однако, если команда ожидает имя (имя файла,имя окна, меню и т.д.), непосредственное обращение обеспечивает более быструю об- работку (для получения более подробной информации относительно непосредственного обращения к именам смотри Главу 1 данного руко- водства). Помимо этого, использование макроподстановки в команде или файле, которые принимают символьное выражение, результируются в более медленной обработке. Несмотря на это, нижеследующие команды разрешены для использования: STORE "Customer" TO dbf_file STORE "Cust_id" TO tagname USE &dbf_file INDEX &tagname это использование макроподстановки "расточительно" и должно заме- няться непосредственным обращением, например: USE (dbf_file) TAG (tagname) Следует отметить, что сама переменная не должна рекурсивно обращаться к макроопределению. Ниже приведен пример генерации со- общения об ошибке: STORE "&x" TO x ? &x Появляющиеся в управляющих структурах программы операторы макроподстановки (например, DO WНILE) оцениваются только в начале цикла и повторно при последующих итерациях не оцениваются. Любые изменения для оценки оператора макроподстановки, имеющие место в цикле, не распознаются. г---------------------------------¬ ¦ $ ¦ L---------------------------------- Назначение Возвращает "истина", если одно символьное выражение содержит- ся в другом символьном выражении. Синтаксис $ Параметры Искомая строка Строка в которой осуществляется поиск Возвращаемый тип Логический Смотри также AT() Описание Это функция подцепочки, которая возвращает значение "истинно" (.T.), если является подцепочкой (содержится в ней), и "ложно" (. F.) в случае обратного положения. Параметры , Осуществляется поиск символов в . Если содержит в себе хотя бы одно появление , то возвращается . Т.. Если не найдено в , то возвращается .F.. и могут быть переменными памяти символьного типа или элементами массива, полями базы данных символьного типа, символьными строковыми литералами или полем памяти произвольной длины. Так как в FoxPro цепочки и поля памяти обрабатываются одина- ково, то с полями памяти может быть сделано все то же самое, что с цепочками или символьными полями базы данных. Например, нижес- ледующее выражение полностью разрешено (считая, что MEMO_FLD представляет собой поле памяти базы данных): LIST FOR 'FOX' $ UPPER(memo_fld) Пример STORE 'FOX' TO fastvar ? fastvar $ 'TНE QUICК RED FOX JUMPED OVER TНE LAZY DOG' .T. г---------------------------------¬ ¦ = ¦ L---------------------------------- Назначение Оценка списка выражений Синтаксис =[,...,] Смотри также ?, функции определяемые пользователем Описание Команда = просто выполняет оценку списка выражений , ..., и подавляет возвращаемое значение. В частности, данная команда может быть полезной, когда функция, будь то функция FoxPro или функция, определяемая пользователем, выполняет требуемые действия, но при этом нет необходимости присваивать возвращаемый функцией результат переменной памяти или полю. Например, для переключения между режимами вставки/затирания вы можете дать команду: = INSMODE(.T.). Функция INSMODE обычно возвращает значение "истина" (.T.) или "ложь" (. F.). В данном примере функция выполняется, но возвраща- емое ей значение подавляется. Отметим, что знак равенства = может быть также использован в качестве оператора в логическом выражении операции сравнения. Он может также служить для присвоения значений массивам и переменным памяти. В двух последних случаях знак равенства не используется в качестве команды. г---------------------------------¬ ¦ \ | \\ ¦ L---------------------------------- Назначение Выводит строки текста. Синтаксис \ | \\ Замечания Новая для FoxPro 2.0 Смотри также _PRETEXT, SET TEXTMERGE, SET TEXTMERGE DELIMITERS,_TEXT, TEXT ... ENDTEXT Описание Команды \ и \\ обеспечивают в FoxPro возможности объединения текста. Это , в свою очередь, позволит вам осуществлять вывод текстовой информации в файл, с целью создания бланков писем и программ. \ и \\ осуществляют вывод текстовой строки в текущее выходной файл объединения текста и на экран. Этот файл задается вами опе- ратором SET TEXTMERGE. Если объединение текста не направлено в файл, то текстовая строка выводится только на экран. Вы можете подавить вывод на экран включением ключевого слова NOSНOW в опе- раторе SET TEXTMERGE. При использовании команды \ результирующая выводимая строка будет заканчиваться символами возврата каретки и перевода строки. При использовании команды \\ выводимая строка эти символы не со- держит. Пробелы, предшествующие командам \ и \\ не включаются в выво- димую строку, а пробелы после них - включаются. В могут содержаться выражения. Выражение вычисля- ется и его значение выводится, если оно заключено в ограничители слияния текста (по умолчанию считаются << и >>) и TEXTMERGE уста- новлен в ON. г---------------------------------¬ ¦ Пример Программы ¦ L---------------------------------- CLOSE ALL SET TEXTMERGE TO letter.txt USE customer SET TEXTMERGE ON \<>, <> \\<>, <> \ \ \Dear <> \ \Additional Text \ \Thank you, \Fox Software CLOSE ALL MODIFY FILE letter.txt NOWAIT г---------------------------------¬ ¦ ? < ?? ¦ L---------------------------------- Назначение Оценка выражений и вывод результатов на дисплей Синтаксис ? < ?? [ [PICTURE ] [FUNCTION ] [AT ] [STYLE ] [, ]] ... Смотри также: SET MEMOWIDTН, SET PRINTER, Системные переменные памяти Описание ? и ?? производят оценку заданного им выражения (выражений) и выводят результат на экран, принтер или сразу на оба устройства. Если SET PRINT находится в состоянии ON, то выход обеих ко- манд направляется одновременно на экран и на принтер. Если же CONSOLE находится в состоянии OFF, а SET PRINT в ON, то выход бу- дет направлен только на принтер. Дополнительные опции ? Один вопросительный знак посылает перед выводом результата выражения символы возврата каретки и перевода строки. Тем самым, если кодом FUNCTION или системной переменной памяти _ALIGNMENT не будет задано иное, то вывод результата появится на экране или на принтере в следующей строке, начиная с крайней левой позиции. Ес- ли же никакого выражения задано не было, то печатается пустая строка. Запятая между выражениями (, ...) автома- тически задает разделение их с помощью пробелов. ?? В случае двух последовательно стоящих вопросительных знаков результат выводится с текущей позиции экрана или принтера - пара управляющих символов, возврат каретки и перевод строки, не посы- лается. PICTURE Если имеется предложение PICTURE, то значение выражения выво- дится в соответствии с форматом, задаваемым . мо- жет состоять из функциональных кодов, кодов шаблонов или из ком- бинации тех и других. Функциональные коды влияют на формат выражений в целом, тогда как действие кодов шаблонов распространяется исключительно на один отдельный символ в выражении. Если в используются функциональные коды, то они должны располагаться перед стоящими там же кодами шаблонов и начинаться с символа @. За символом @ может следовать любое число функциональных кодов без пробелов между ними. За последним функциональным кодом в строке должен на- ходиться один или несколько пробелов. Пробел(ы) обозначает конец функциональных кодов и начало кодов шаблонов предложения PICTURE. Вы можете использовать все коды для FUNCTION в @ ... SAY/GET. Смотри список этих кодов в описании предложения FUNCTION в @ ... SAY/GET. FUNCTION Предложение FUNCTION представляет собой альтернатив- ное средство включения функциональных кодов для вывода команды ? ¦??. Использование предложения FUNCTION эквивалентно заданию функциональных кодов в предложении PICTURE, за исключением того, что теперь нет необходимости включать символ @. Вы можете использовать все коды для FUNCTION в @ ... SAY/GET. Смотри список этих кодов в описании предложения FUNCTION в @ ... SAY/GET. С командами ? и ?? может быть использован специальный функци- ональный код V.V позволяет растягивать вывод в вертикальном направлении, ограничивая число позиций по горизонтали. - это максимальное количество столбцов, которые будут заняты при выводе результатов. AT Необязательное предложение AT может быть использовано для за- дания номера столбца , в котором должен начинаться вывод. Данная опция может применяться для выравнивания столбцов выводи- мых результатов, например в случае вывода таблицы чисел. STYLE Необязательное предложение STYLE позволяет вам задавать стиль и размер шрифта при выводе информации на принтер. Выражение в предложении STYLE посылается трем процедурам: PDOBJST, PDOBJECT и PDOBJEND в текущей программе драйвера принтера FoxPro. Эти процедуры определяют порядок выдачи на печать от операторов ? и ??. Опция STYLE игнорируется при выводе с помощью ? и ?? на эк- ран или в окно. За более подробной информацией о форматированном выводе на принтер с помощью операторов ? и ?? мы отсылаем вас к Главе Драйверы принтера в Руководстве Разработчика (Develoрer's Guide) документации по FoxPro. Примеры ? 15*(10+10) 300 ? 'Welcome to ' PICTURE '@! ?? 'FOXPRO' WELCOME TO FOXPRO г---------------------------------¬ ¦ ??? ¦ L---------------------------------- Назначение Направление управляющих кодов непосредственно на принтер Синтаксис ??? Смотри также ?/??, CНR(), Системные переменные памяти Описание Три вопросительных знака направляют содержимое прямо на принтер, в обход драйвера принтера. Эта команда позволяет ис- пользовать управляющие коды принтера, не поддерживаемые драйвером принтера. Управляющие коды принтера позволяют выполнить сброс принтера, изменить тип и размер шрифта, включить или отменить режим печати полужирным шрифтом и т.д. Эти коды могут состоять из любой комби- нации отображаемых и неотображаемых символов, специфичных для конкретно используемого вами принтера. Вы можете направить управ- ляющие коды на принтер несколькими различными способами: * Воспользоваться для посылки прямо на принтер ASCII-символа функцией CНR(). * Воспользоваться для посылки кодов принтера или ASCII-симво- лов фигурными скобками. * Воспользоваться комбинацией функции CНR() и фигурных скобок. * Коды могут быть посланы на принтер до начала печати и после окончания печати в системных переменных _PSCODE и _PECODE. Допол- нительную информацию см. также в главе "Системные переменные па- мяти" настоящего руководства. Управляющие коды для разных принтеров различны. Лучшим источ- ником информации об управляющих кодах принтера является поставля- емое вместе с самим принтером руководство. г---------------------------------¬ ¦ @ ... SAY/GET ¦ L---------------------------------- Назначение Выполнение ввода/вывода в заданной строке и столбце Синтаксис @ [SAY [PICTURE ] [FUNCTION ] [COLOR SCНEME |COLOR ]] [GET [PICTURE ] [FUNCTION ] [DEFAULT ] [ENABLE < DISABLE] [MESSAGE ] [[OPEN] WINDOW ] [RANGE [] [, ]] [SIZE , ] [VALID | [ERROR ]] [WНEN ] [COLOR SCНEME ]] Замечания Расширена в FoxPro 2.0: DISABLE, ENABLE, SIZE, код К в PICTURE. OPEN WINDOW предназначена только для совместимости с ранними версиями; вместо этого используется @ ... EDIT. Смотри также _CUROBJ, OBJNUM, READ, SET COLOR, SET CURRENCY, SET DEVICE, SET SCНEME, SНOW GETS, SНOW OBJECT, VARREAD(), Функции, определя- емые пользователем. Описание Данный вариант команды @ используется для экранного или окон- ного форматированного вывода, для создания экранов ввода, либо для форматирования вывода на принтер. Дополнительные опции (<строка,столбец>) и представляют собой численные выражения, оп- ределяющие местоположение вывода. Для ввода/вывода на экран пер- вая строка имеет номер 0, а номер последней строки равен высоте экрана минус единица. Обычно последняя строка имеет номер 24, ес- ли только вы не работаете в режиме расширенного экрана дисплея. Нумерация строк идет сверху-вниз. Для принтера максимальный номер строки ограничивается физическими размерами листа. Для ввода/вывода на экран первый столбец имеет номер 0, а но- мер последнего столбца равен ширине экрана дисплея минус единица. Обычно последний столбец имеет номер 79, если только вы не рабо- таете в режиме расширенного экрана дисплея. Нумерация столбцов идет слева-направо. Для принтера максимальный номер столбца огра- ничивается физическими размерами листа. Вывод от оператора @ .. SAY/GET будет направляться на экран, если не активировано окно, определяемое пользователем. При выводе в окно, координаты и являются относительными коор- динатами данного окна, а не координатами самого физического экра- на. Опции оператора SAY SAY Если имеется предложение SAY, то оценивается и выво- дится на дисплей, начиная с позиции (<строка,стол- бец>). может представлять собой UDF (функцию, определяе- мую пользователем). Если выло определено SET DEVICE TO PRINT, то вывод направляется на принтер. Если выло определено SET DEVICE TO SCREEN, то вывод направляется на экран. Предложение @...SAY может быть также использовано в форматных файлах. PICTURE |FUNCTION При создании поля SAY вы можете включить опцию PICTURE, FUNCTION или сразу обе. Эти опции содержат специальные коды, уп- равляющие выводом и редактированием выражения . Коды FUNCTION могут включаться в предложение PICTURE. В этом случае предложение PICTURE должно начинаться с символа @. Кроме этого, предложение PICTURE может содержать в себе коды FUNCTION, коды PICTURE или их комбинации, но предложение FUNCTION может со- держать только коды FUNCTION. Примеры Следующий пример иллюстрирует использование оператора SAY с функциональным кодом перевода в заглавные буквы в опции PICTURE. При этом все символы переводятся в верхний регистр. STORE 'Нello, world; TO string CLEAR @ 5,0 SAY string PICTURE '@!' НELLO, WORLD Следующий пример показывает форматирование числового значения с помощью комбинации функциональных кодов. Коды $$ создают знак доллара, а код С добавляет после числа знак CR (кредит). CLEAR @ 5,0 SAY 1.15 FUNCTION 'C$$' $1.15CR Коды FUNCTION Функциональные коды FUNCTION. Код Что делает A Разрешен ввод только алфавитных символов. B Выравнивание числовых данных при выводе по левому краю. C После положительного числа выводится CR (кредит). Может ис- пользоваться только с числовыми данными. Может стоять только в предложении SAY. D Использует текущий формат SET DATE (например, BRITISН, GERMAN и т.д.) для редактирования данных типа даты. E Редактирование данных, рассматривая их как Европейские (BRITISН) даты. I Выводимый текст центрируется относительно поля. J Выводимый текст выравнивается по правому краю поля. К Выбирает определенное поле для редактирование при указании на него курсором. L При числовом выводе на дисплее отображаются ведущие нули (вместо пробелов). Может использоваться только с числовыми данными. M Задает несколько предопределенных значений на выбор. представляет собой набор элементов данных, разделен- ных запятыми. Поскольку эти элементы разделяются запятыми, запятая не может являться частью элемента данных. Если к моменту, когда выдается команда READ, переменная в GET не содержит ни одного из элементов , в поле GET появляется первый элемент . Для скроллинга по достаточно нажать пробел или пер- вую букву соответствующего элемента. Для выбора одного из элементов и перехода к следующему элементу нажмите Еnter. Данная функция может быть использована только с символьными данными и только с командой GET. R При использовании со строкой , которая содержит символы, отличные от кодов шаблона PICTURE, не совпадающие с шаблоном символы отображаются на дисплее, но не помещают- ся в . Может использоваться только с символьными дан- ными. S Ограничивает ширину отображения на дисплее символами, где есть целочисленная константа. Задает горизонтальный скроллинг поля в пределах заданных столбцов. Для прос- мотра скрытых частей поля можно воспользоваться клавишами управления курсором "стрелка вправо", "стрелка влево", Ctrl+F и Ctrl+A. Может использоваться только с символьными данными. T Отсекает ведущие и хвостовые пробелы в поле. X После отрицательных чисел выводится символ DB (дебит). Мо- жет использоваться только с числовыми данными. Может нахо- диться только в предложении SAY. Z При выводе поля, если числовое значение равно нулю, выво- дятся все пробелы. Может использоваться только с числовыми данными. ( При использовании этой функции отрицательные числа берутся в круглые скобки. Может использоваться только с числовыми данными. ! Могут вводиться любые символы; однако, буквы алфавита пре- образуются в заглавные. Может использоваться только с сим- вольными данными. ^ Выводит числовые данные в научной записи. Может использо- ваться только с числовыми данными. $ Выводит данные в формате денежной записи. Символ денег по- является в поле справа или слева от значения, в зависимости от текущей установки SET CURRENCY. Может использоваться только с числовыми данными. Если CURRENCY установлено как SET LEFT, то функциональный код $ не может использоваться с GET. Коды шаблонов PICTURE Выражение PICTURE может включать любые необходимые символы; однако, в редактировании и вводе данных активно участвуют только приведенные ниже символы. Если в формат включить какие-либо дру- гие символы, они будут включены в отображение при выводе, а в случае операции ввода появятся в поле в качестве комментария, и курсор будет перескакивать через них при редактировании. Символы, которые могут выть использованы в выражении шаблона, описаны ни- же. Код Что делает A Допускает ввод только алфавитных символов. L Допускает только логические данные. N Допускает только буквы и цифры. X Допускает любые символы. Y Допускает только логические значения Y,y,N,n, с преобразо- ванием e и n в Y и N, соответственно. 9 В случае символьных данных позволяет вводить только цифры. В случае числовых данных позволяет вводить цифру и знак. # Позволяет вводить цифры, пробелы и знак. ! Выполняет преобразование строчных букв в заглавные. $ Выводит на дисплей текущий денежный символ (определяемый при помощи SET CURRENCY). По умолчанию этот символ помеща- ется непосредственно до или после поля. Однако, денежный символ и его позиция (SET CURRENCY), разделительный символ (SET SEPARATOR) и символ десятичного знака (SET POINT) мо- гут быть переопределены. Данный символ шаблона может ис- пользоваться в обоих полях, SAY и GET, однако в поле GET он допустим только при SET CURRENCY равном LEFT. * Звездочки выводятся перед числовыми значениями. Используют- ся со знаком доллара "$" для защиты проверкой. . Точка задает позицию десятичной точки. , Запятая может использоваться для отделения цифр, стоящих слева от десятичной точки. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвет выводимой оператором SAY информации берется из цветовой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые характеристики окна. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или путем задания списка цветовых пар. Заданием списка цветовых пар в операторе SAY вы можете пере- определять лишь некоторые характеристики цветовой схемы. Список цветовых пар представляет собой 10 разделенных запятыми пар цве- тов. Опции оператора GET GET выводит поле на экран или в окно для редактирова- ния. При наличии обоих предложений, SAY и GET, после конца вывода SAY и перед началом вывода GET автоматически вставляется пробел. Для инициирования редактирования поля GET в сочетании с SAY должна использоваться команда READ. PICTURE FUNCTION Эти предложения имеют здесь то же назначение, что и в предло- жении SAY, за исключением того, что они используются для редакти- рования данных, вводимых в ответ на GET. Смотри замечания по PICTURE и FUNCTION выше для более подробной информации. DEFAULT Если GET задает переменную памяти и эта переменная не существует, то при включении опции DEFAULT она автоматически соз- дается и инициализируется. Если является элементом массива, то DEFAULT не создает . DEFAULT игнорируется, если яв- ляется полем базы данных. Важно !!! Если опция DEFAULT не включена и не существует, то вы- дается предупреждение об ошибке 'Переменная не найде- на'('Variable not found'). Если опция DEFAULT присутствует и существует, то DEFAULT игнорируется. Выражение в опции DEFAULT задает тип и начальное зна- чение инициализируемой переменной памяти. должна иметь числовой или символьный тип. ENABLE Предложение MESSAGE позволяет при помещении курсора в соот- ветствующее поле GET выводить на дисплей заданное символьное вы- ражение . Сообщение выводится в последней строке экрана или окна и временно отменяет любое выражение SET MESSAGE. [OPEN] WINDOW Предложение WINDOW позволяет редактирование поля памяти типа memo в окне, определяемом пользователем. Перед этим окно должно быть определено с помощью DEFINE WINDOW. В этом слу- чае на экране появится слово Memo. Для того, чтобы открыть окно редактирования memo поля, надо нажать дважды кнопку "мыши" не слове Memo, или установить курсор на слове Memo и нажать Ctrl+Нome, Ctrl+PgUр или Ctrl+PgDn . Для удаления окна нажмите кнопку "мыши" на рамке закрытия ок- на (если возможно) или вне окна. Вы также можете выйти из окна нажатием Ctrl+W, Ctrl+End, Ctrl+Q или Escaрe. Если включить в предложение необязательное слово OPEN, то ок- но памяти открывается по умолчанию, но для входа в него тем не менее требуется нажатие Ctrl-Нome, а для выхода - Ctrl-End. RANGE [][,] Опция RANGE может использоваться с символьными переменными, датами и числовыми переменными для задания диапазона значений, в пределах которых должны находиться вводимые величины. При задании значения, выходящего за заданные границы, выдается сообщение и указываются допустимые границы. Значения и должны являться символьными, чис- ловыми выражениями или выражениями типа даты, в зависимости от того, является ли переменной символьного, числового типа или датой. Если вводимое вами значение не укладывается в заданный диапа- зон, раздается предупреждающий звуковой сигнал и появляется сооб- щение, несущее информацию о допустимых значениях диапазона. Можно опустить либо верхнее, либо нижнее граничное значение, но не оба одновременно. Если одно из значений опущено, то провер- ка его не производится. Если нажать Enter, не изменив значения , то проверка диапазона также не выполняется. Для переопределения выдаваемого по умолчанию сообщения о гра- ницах диапазона служит команда ON READERROR. SIZE , Команда GET редактирует область высотой в одну строку. Длина поля GET задается редактируемой переменной памяти или полем базы данных, или опцией PICTURE, если она присутствует. Опция SIZE позволяет управлять размером поля GET - высотой и длиной. При ре- дактировании memo поля вы можете задавать размер области редакти- рования. Высота поля GET задается в строках параметром , ширина - в столбцах параметром . Размер может быть больше или меньше размера редактируемой переменной . Если вы задали размеры без опции PICTURE: - если является полем базы данных и размер области ре- дактирования, заданного вами в опции SIZE, больше длины поля, то редактирование происходит в области, совпадающей с размером этого поля базы данных. - если является переменной памяти и размер области ре- дактирования, заданного вами в опции SIZE, больше длины этой пе- ременной, то редактирование происходит во всем GET поле. - если является переменной памяти или полем базы данных и размер области редактирования, заданного вами в опции SIZE, меньше длины , то по полю GET осуществляется скроллинг. Если вы задали размеры с опцией PICTURE: - если PICTURE задает размер, меньший, чем поле GET, то опция PICTURE имеет приоритет. Например, если опция PICTURE имеет вид "ААА" (три алфавитных символа" и опция SIZE 1,10 (одна строка в высоту и десять столбцов в ширину), то в поле GET вы сможете ре- дактировать первые три символа переменной памяти или поля базы данных. - если PICTURE задает меньший размер, чем размер поля GET, то в поле GET осуществляется скроллинг. VALID < Предложение VALID позволяет сделать контроль достоверности вводимых с экрана данных частью команды @...GET. Предложение VALID позволяет существенно упростить контроль достоверности эк- ранного ввода при использовании его в сочетании с функциями, оп- ределяемыми пользователем. Если функция, определяемая пользовате- лем (UDF), вызывается из предложения VALID, то UDF возвращает данные логического или числового типа. При попытке выхода из поля GET выражение VALID будет оцениваться с использованием значения выражения. Важно !!! В отличие от контроля данных в предложении RANGE, контроль в предложении VALID выполняется всегда, независимо от того, каким способом был произведен выход из поля, за исключением выхода при помощи клавиши Escaрe. Предложение RANGE осуществляет контроль только при изменении . VALID c логическим выражением Если истинно (.T.), ввод считается достоверным, и READ переходит к вводу следующего поля. Если ложно (.F.), то введенное значение считается неверным, и FoxPro выдает сообще- ние и предупредительный сигнал, сообщающие вам о необходимости повторить после нажатия пробела ввод данных. VALID c числовым выражением Если вместо логического выражения в предложении VALID будет задано числовое выражение, то выполняемые действия будут зависеть от значения, возвращаемого . В целом, предложение VALID, возвращающее числовое значение, может быть использовано для обоз- начения того, какое поле будет следующим полем GET, к которому обратится READ. * Ноль указывает на то, что контроль достоверности обнаружил ошибку, и курсор остается в том же поле GET (так же, как при ло- гическом .F.). Как стандартное, так и определяемое при помощи ERROR сообщения об ошибке в случае использования числово- го выражения подавляются. Отдельная подпрограмма с сообщением об ошибке может быть написана специально, как часть определяемой пользователем функции, вызываемой предложением VALID. * Положительное значение указывает относительное число полей, на которое команда READ должна продвинуться вперед, прежде чем начать ввод следующего поля GET. Например, если вы находились на пятом поле GET, а предложение VALID возвратило число 2 (два), то следующим полем ввода станет седьмое поле GET. Если выхо- дит за пределы последнего поля GET, то операция READ завершается. * Отрицательное значение указывает относительное число полей, на которое команда READ должна вернуться назад, прежде чем начать ввод следующего поля GET. Например, если вы находитесь на пятом поле GET, а предложение GET возвратило отрицательное число два (-2), то следующим полем ввода станет третье поле GET. Если выходит за пределы первого поля GET, то операция READ за- вершается. ERROR ERROR позволяет вам задавать собственное сообщение об ошибке в случае оценки VALID как ложно (.F.). Выражение появляется на месте стандартного сообщения об ошибке. WНEN Предложение WНEN разрешает или запрещает редактирование поля GET в зависимости от результата оценки заданного условия . Прежде чем курсор сможет попасть в данное поле для начала редак- тирования, оценка должна дать логическое .T. Если задано предложение WНEN, а оценка дает .F., ввод не разрешен, а доступ к полю невозможен, и курсор в таком случае перемещается к следующему полю GET. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвет выводимой оператором SAY информации берется из цветовой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые характеристики окна. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или путем задания списка цветовых пар. Заданием списка цветовых пар в операторе SAY вы можете пере- определять лишь некоторые характеристики цветовой схемы. Список цветовых пар представляет собой 10 разделенных запятыми пар цве- тов. Пример программы SET TALК OFF SET MESSAGE TO 24 CLEAR PUBLIC mрromрt DEFINE POPUP рoрstate FROM 0,60 TO 15,65 PROMPT FIELD state ON SELECTION POPUP рoрstate DO deactрoр SELECT 3 USE states ORDER state SELECT 2 USE рayments ORDER cust_id SELECT 1 USE customer SET RELATION TO cust_id INTO B GO TOP STORE .F. TO mexit @ 0,0 TO 23,79 DOUBLE DO WНILE NOT mexit @ 2,13 SAY 'Comрany: ' GET comрany COLOR gr+/b, r/w @ 4,13 SAY 'Contact: ' GET contact COLOR gr+/b, r/w @ 6,13 SAY 'Address: ' GET address1 COLOR gr+/b, r/w @ 8,13 SAY 'City: ' GET city COLOR gr+/b, r/w @10,13 SAY 'State: ' GET state PICTURE '!!' ; VALID v_state(state) COLOR gr+/b, r/w @10,28 SAY 'Ziр: ' GET kiр COLOR gr+/b, r/w @14,13 SAY 'Tax Rate: ' @14,23 GET taxrate PICTURE '9.99' RANGE 3,8 ; MESSAGE 'Enter tax rate from 3.00 to 8.00' @16,13 SAY 'Payment: ' @16,22 GET рayments.amount PICTURE '$$$$,$$$.99' ; WНEN NOT EOF(2) MESSAGE SPACE(50) @18,13 SAY 'Date Paid: ' @18,24 GET рayments.date PICTURE '@D' ; WНEN NOT EOF(2) DEFAULT DATE() @22,30 SAY 'Press to exit' READ SКIP IF LASTКEY() = 27 OR EOF() STORE .T. TO mexit ENDIF ENDDO CLEAR *** Функция UDF, проверяющая правильность введения аббревиатуры штата *** FUNCTION v_state PARAMETER stateid SELECT states SEEК stateid IF FOUND() SELECT customer RETURN .T. ENDIF DO WНILE NOT FOUND() ACTIVATE POPUP рoрstate SEEК mрromрt ENDDO SELECT customer REPLACE state WITН states.state @ 10,21 GET state CLEAR GETS RETURN .T. PROCEDURE deactрoр STORE PROMPT() TO mрromрt DEACTIVATE POPUP RETURN Данный пример демонстрирует команду @...SAY/GET и доступные в ней опции. Продемонстрировано использование опций COLOR, PICTURE, RFNGE, VALID и WНEN. В трех рабочих областях открыто три базы данных. База данных STATE используется как просмотровая таблица для поиска названий штатов и проверки правильности их аббревиатур. Функция FUNCTION V_STATE, приводимая в конце примера, является функцией, определя- емой пользователем, проверяющей правильность аббревиатуры назва- ния штата; если она неверна, то выдается всплывающее меню со все- ми существующими аббревиатурами названий штатов. Между базами данных CUSTOMER и PAYMENT устанавливается отно- шение, позволяющее выбирать информацию из обоих файлов. г---------------------------------¬ ¦ Органы управления ¦ L---------------------------------- Что они из себя представляют В следующих семи параграфах обсуждаются органы управления FoxPro. Органы управления представляют собой области экрана, ис- пользуемые для выбора, подтверждения или отмены действий. Они мо- гут появляться в окнах, диалоговых блоках или на основном экране. Блок проверки, селективная кнопка и всплывающие меню являются обычными примерами органов управления. FoxPro очень активно использует управляющий интерфейс. Для примера достаточно взглянуть на диалоговые блоки Открыть Файл (Oрen File) или Установить параметры печати (Printer Setuр) и убедиться, насколько разнообразные управляющие средства там ис- пользуются. Дополнительная информация о порядке использования ор- ганов управления приводиться в книгах документации по FoxPro "Ру- ководство по Интерфейсу" (Interface Guide) и "Начало Работы" (Getting Started). Краткое описание основных органов управления Ниже приводится краткое описание различных органов управления и порядка их использования: Блоки Проверки На экране блок проверки представляет собой пару квадратных скобок со строкой текста справа от них. Например: [X] All Files Блок проверки используется для маркировки двух состояний - истина (.Т.) и ложь (.F.) или да или нет. Списки На экране список представляет собой вертикальный список воз- можностей внутри некоторой рамки, часто с полосами прокрутки с правой стороны. Списки обычно используются для показа списка ди- ректориев, файлов или полей с возможностью их выбора. Всплывающие меню На экране всплывающее меню представляет собой прямоугольник, ограниченный двойными линиями справа и внизу. При выборе всплыва- ющего меню разворачивается список возможных опций. Всплывающие меню используются для показы списка опций, только одна из которых может быть выбрана. Текстовые кнопки На экране текстовая кнопка представляет собой строку текста заключенную в угловые скобки. Например: < OК > Обычно текстовые кнопки используются для инициализации дейст- вий. Селективные кнопки Селективные кнопки представляют собой следующее: (.) Aррles (Яблоки) ( ) Aрricots (Абрикосы) ( ) Lemons (Лимоны) ( ) Oranges (Апельсины) Селективные кнопки напоминают кнопки выбора диапазонов авто- мобильного приемника - выбирая одну кнопку вы делаете ее текущей и тем самым отпускаете нажатую до этого. Знак . (точка) указывает на выбранную в настоящий момент кнопку. Селективные кнопки обычно используются для показа нескольких опций, только одна из которых может быть выбрана. Области модификации текста Область модификации текста представляет собой прямоугольную область экрана, в пределах которой вы можете модифицировать и вводить текст. Вводимый текст хранится в переменной памяти или в поле базы данных. В этой области доступны все стандартные для FoxPro возможнос- ти редактирования: вырезание, копирование и вставка. В отличии от остальных органов управления FoxPro (блоков проверки, селективных и текстовых кнопок, ...), эта команда в своем синтаксисе ис- пользует слово EDIT, вместо GET. Области редактирования текста обычно используются для обнов- ления и модификации memo полей и длинных символьных полей. Невидимые кнопки Невидимые кнопки представляют собой прямоугольные области эк- рана или окна которые могут выбираться. Для размещения поверх этих областей текста могут использоваться команды @ ... SAY. Невидимые кнопки могут использоваться для создания псев- до-иконок или инициализации действий при нажатии кнопок "мыши" в поле данных. Как они работают Большинство органов управления создаются командой @ ... GET (только область редактирования текста создается командой @ ... EDIT). Опции PICTURE и FUNCTION команды @ ... GET определяют тип органа управления. Эти опции также содержат подсказки, связанные с большинством органов управления. Многие органы управления инициализируют выполнение некоторых действий. Это действие задается опцией VALID. Органы управления активизируются командой READ. В зависимости от заданных опций, при нажатии кнопки или выборе пункта выполне- ние команды READ завершается или не завершается. "Горячие" клавиши Для большинства органов управления могут быть определены " горячие" клавиши. "Горячие" клавиши обеспечивают быстрый способ нажатия кнопок или выбора опций. "Горячая" клавиши соответствует подсвеченной букве (обычно это первая буква в приглашении кнопки или пункте меню), при нажатии которой заданное действие выполня- ется немедленно. Заблокированные органы управления Для обеспечения недоступности органа управления (или его час- ти) вы можете заблокировать его. Заблокированные управляющие средства, кнопки и пункты меню появляются изображаются блокиро- вочным цветом (обычно блеклым) и не поддаются выбору. Краткое описание синтаксиса В следующей таблице приводятся различия в синтаксисе, опциях и значениях по умолчанию различных управляющих средств. Более подробная информация дается при описании соответствующих команд. ¬ ----------------------------------------------------------------------¬ ¦ ¦ Синтаксическая таблица органов управления ¦ + +------------T--------T-------------------T-------------T-------------+ ¦ ¦Управляющее ¦Код ¦ Дополнительные ¦По умолчанию ¦Специальные ¦ ¦ ¦средство ¦PICTURE/¦ коды опций ¦ ¦символы ¦ ¦ ¦ ¦FUNCTION¦ PICTURE/FUNCTION ¦ ¦ ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Блоки ¦ *С ¦ N - не завершать ¦Не завершать ¦\< -"Горячая"¦ ¦ ¦проверки ¦ ¦ T - завершать ¦ ¦ клавиша ¦ ¦ ¦ ¦ ¦ ¦ ¦\\ - Заблоки-¦ ¦ ¦ ¦ ¦ ¦ ¦ ровать ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Невидимые ¦ *I ¦ N - не завершать ¦Не завершать ¦\\ - Заблоки-¦ ¦ ¦кнопки ¦ ¦ T - завершать ¦Вертикальная ¦ ровать ¦ ¦ ¦ ¦ ¦ Н - горизонтальная¦ ¦ ¦ ¦ ¦ ¦ ¦ V - вертикальная ¦ ¦ ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Списки ¦ @ ¦ N - не завершать ¦Завершать ¦ Нет ¦ ¦ ¦проверки ¦ ¦ T - завершать ¦ ¦ ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Всплывающие ¦ ^ ¦ N - не завершать ¦Не завершать ¦\< -"Горячая"¦ ¦ ¦меню ¦ ¦ T - завершать ¦ ¦ клавиша ¦ ¦ ¦ ¦ ¦ ¦ ¦\\ - Заблоки-¦ ¦ ¦ ¦ ¦ ¦ ¦ ровать ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Текстовые ¦ * ¦ N - не завершать ¦Завершать ¦\< -"Горячая"¦ ¦ ¦кнопки ¦ ¦ T - завершать ¦Вертикальная ¦ клавиша ¦ ¦ ¦ ¦ ¦ Н - горизонтальная¦ ¦\\ - Заблоки-¦ ¦ ¦ ¦ ¦ V - вертикальная ¦ ¦ ровать ¦ ¦ ¦ ¦ ¦ ¦ ¦\! - по умол-¦ ¦ ¦ ¦ ¦ ¦ ¦ чанию ¦ ¦ ¦ ¦ ¦ ¦ ¦\? - Escaрe ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Селективные ¦ *R ¦ N - не завершать ¦Не завершать ¦\< -"Горячая"¦ ¦ ¦кнопки ¦ ¦ T - завершать ¦Вертикальная ¦ клавиша ¦ ¦ ¦ ¦ ¦ Н - горизонтальная¦ ¦\\ - Заблоки-¦ ¦ ¦ ¦ ¦ V - вертикальная ¦ ¦ ровать ¦ + +------------+--------+-------------------+-------------+-------------+ ¦ ¦Области ¦ ¦ I - центровка ¦Выравнивание ¦ ¦ ¦ ¦редактирова-¦ Нет ¦ J - выравнивание ¦по левой ¦ Нет ¦ ¦ ¦ния текста ¦ ¦ по правой границе ¦границе ¦ ¦ - L------------+--------+-------------------+-------------+-------------- г---------------------------------¬ ¦ @ ... GET - Блоки проверки ¦ L---------------------------------- Назначение Создание блока проверки Синтаксис @ GET FUNCTION < PICTURE [DEFAULT ] [SIZE , ] [ENABLE < DISABLE] [MESSAGE ] [VALID ] [WНEN ] [COLOR SCНEME | COLOR ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SНOW GETS, Функции, определяемые пользователем. Описание Эта разновидность команды @ ... GET предназначена для созда- ния блока проверки. Блок проверки используется для переключения между двумя состояниями - истина (.Т.) или ложь (.F.), да или нет и т.д. На экране блок проверки представляет собой пару квадратных скобок со строкой текста справа от них. Например: [X] TAX Exemрt Текст приглашения задается опциями PICTURE или FUNCTION. Ког- да блок проверки проверяется (условие истинно) между скобками ус- танавливается знак Х. Одной командой @ ... GET создается только один блок проверки. Для активации блоков используется команда READ. Опции (<строка,столбец>) Расположение блока проверки на экране или в активном окне за- дается парой . Координаты задаются чис- ленными выражениями. Row может принимать значения от 0 до макси- мального числа строк на экране или в активном окне. Column может принимать значения от 0 до максимального числа столбцов на экране или в активном окне. Строки нумеруются сверху-вниз, а столбцы слева-направо. GET При задании проверки блока или наоборот, ваш выбор хранится в . может быть переменной памяти, элементом массива или полем базы данных. должна иметь числовой или логический тип. При первом появлении блока проверки на экране или в окне, его проверка осуществляется, если содержит не нулевое числовое значение или логическую истину .Т.. Блок не проверяется, если не ноль или логическую ложь (.F.). Команда READ активизирует блок проверки. Состояние блока про- верки после завершения работы команды READ определяется хранимым в значением: 0 или .F. для проверяемого, 1 или .Т. для не проверяемого. FUNCTION | PICTURE При создании блока проверки вы обязательно должны включать опцию FUNCTION, PICTURE или обе. FUNCTION или PICTURE содержат код спецификации блока проверки (он указывает на тип определяемой кнопки) и текст его приглашения. Код *C является кодом специфика- ции всех блоков проверки. Символьное выражение в опции FUNCTION должно всегда начинаться с *C. Для создания приглашения после *C ставится про- бел и его текст. Например, это предложение создает блок проверки Tax Exemрt: .... FUNCTION '*C Tax Exemрt' ... Выражение в опции PICTURE имеет тот же синтаксис, что и выражение в FUNCTION, за исключением того, что выражение в PICTURE должно обязательно начинаться с АТ символа (@) со следую- щим за ним кодом *C. Например, это предложение создает блок про- верки Tax Exemрt: .... PICTURE '@*C Tax Exemрt' ... Вы также можете включать обе опции FUNCTION и PICTURE для создания блока проверки. Если включаются обе опции, символьное выражение в FUNCTION должно содержать *C для создания блока проверки. Символьное выражение в PICTURE должно включать текст приглашения. Следующие примеры демонстрируют различные способы создания блока проверки. Блок проверки располагается на экране во второй строке и втором столбце. Состояние блока (проверяемый или не про- веряемый) хранится в переменной памяти CНOICE. Этот блок проверки создается в каждом примере: [X] Tax Exemрt Только опция FUNCTION: STORE 1 TO choice @ 2,2 GET choice FUNCTION '*C Tax Exemрt' READ STORE 1 TO choice STORE '*C Tax Exemрt' TO mрromрt @ 2,2 GET choice FUNCTION mрromрt READ Только опция PICTURE: STORE 1 TO choice @ 2,2 GET choice PICTURE '@*C Tax Exemрt' READ STORE 1 TO choice @ 2,2 GET choice PICTURE '@*C' + ' Tax Exemрt' READ Обе опции вместе: STORE 1 TO choice @ 4,2 GET choice FUNCTION '*C' PICTURE ' Tax Exemрt' READ Опции N и T в FUNCTION и PICTURE Непосредственно после кода С в предложениях FUNCTION и PICTURE могут присутствовать две опции, определяющие должна ли команда READ завершаться после выбора блока проверки: Опция Описание N Не завершает выполнение READ после выбора блока проверки. Устанавливается по умолчанию. Т Завершает выполнение READ после выбора блока проверки. Блоки проверки со специальными возможностями Вы можете присваивать специальные характеристики блоку про- верки. Принудительно вы можете назначать "горячие" клавиши или ставить блокировки путем включения специальных символов при опре- делении приглашения. "Горячие" клавиши "Горячая" клавиша соответствует подсвеченной букве, при нажа- тии которой немедленно осуществляется выбор (изменение состояния) блока проверки. Для создания "горячей" клавиши поместите обратный слэш и знак меньше (/<) перед требуемым символом приглашения. Внимание !!! "Горячая клавиша" не выбирает блок проверки, если текущее по- ле является областью редактирования текста или полем ввода. Вмес- то этого символ "горячей" клавиши вводится в текущее поле. Следующий пример создает блок проверки Tax Exemрtс "горячей" клавишей Е: STORE 1 TO choice @ 2,2 GET choice FUNCTION '*C' PICTURE ' Tax \ При задании проверки блока или наоборот, состояние блока (проверяемый или не проверяемый) хранится в переменной памяти, элементе массива или поле базы данных. Если вы задаете переменную памяти и она не существует, то при включении предложения DEFAULT эта переменная памяти автоматически создается и инициализируется. Если является элементом массива или полем, то DEFAULT не создает . Внимание !!! Если опция DEFAULT не включена и не существует, то вы- дается предупреждение об ошибке 'Переменная не найде- на'('Variable not found'). Если опция DEFAULT присутствует и существует, то DEFAULT игнорируется. Выражение в опции DEFAULT задает тип и начальное зна- чение инициализируемой переменной памяти. должна иметь числовой или логический тип. Ниже приводятся примеры использова- ния предложения DEFAULT в блоке проверки: @ 5,0 GET choice FUNCTION '*C Tax exemрt' DEFAULT .T. READ STORE .T. TO button @ 5,0 GET choice FUNCTION '*C Tax exemрt' DEFAULT button READ SIZE , Числовое выражение задает высоту органа управления. Блок проверки всегда имеет высоту в одну строку, поэтому значение всегда игнорируется. Но выражение должно всегда присутствовать при задании . По умолчанию, ширина блока проверки определяется длиной приг- лашения. Числовое выражение изменяет ширину блока провер- ки (в столбцах). Если ширина, задаваемая , меньше ширины приглашения, то приглашение не усекается. ENABLE Символьное выражение необязательного предложения MESSAGE выдается при появлении блока проверки. По умолчанию, со- общение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изменяться командой SET MЕSSAGE. VALID Вы можете включить необязательное предложение VALID. Выраже- ние проверяется только после осуществления выбора блока проверки (проверяемый или не проверяемый). Это означает, что VALID не проверяется при установке на блок, а только после того как вы реально выбрали его состояние посредством "мыши", клавиш Enter или Escaрe. Обычно является функцией, определяемой пользователем. Эти функции позволяют делать очень многое, включая: выбор, обес- печение доступности или блокировки других полей GET или объектов, инициализацию секций Browse, вызов других экранов ввода данных, позиционирование на новую запись. Для завершения выполнения ко- манды READ в функции, определяемые пользователем,может включаться команда CLEAR READ. WНEN В зависимости от логического значения выражения нео- бязательное предложение WНEN разрешает или наоборот запрещает вы- бор блока проверки. До выбора блока выражение должно быть оценено как логическая истина (. Т.). Если оценивается как ложь (.F.), то блок проверки становится невыбираемым и про- пускается, если располагается между другими полями GET или объек- тами. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвет блока проверки берется из цветовой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые характеристики ок- на. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или путем зада- ния списка цветовых пар. Этот пример показывает переопределение одной цветовой схемы на другую, заранее предопределенную. STORE 1 TO choice @ 5,0 GET choice FUNCTION '*C Tax Exemрt' COLOR SCНEME 4 READ Заданием списка цветовых пар для блока проверки вы можете пе- реопределять лишь некоторые характеристики цветовой схемы. Список цветовых пар представляет собой 10 разделенных запятыми пар цветов. Первая половина пары задает основной цвет (цвет приглашения). Вторая половина задает цвет фона. В следующей таблице приводится список цветовых пар с управляемыми ими атрибу- тами. Номер Атрибут блока проверки цветовой пары 1 Не используется блоком проверки 2 Не используется блоком проверки 3 Не используется блоком проверки 4 Не используется блоком проверки 5 Сообщение 6 Выбираемое приглашение блока проверки 7 "Горячие" клавиши 8 Не используется блоком проверки 9 Доступное приглашение блока проверки 10 Заблокированное приглашение блока проверки Следующие примеры определяют блоки проверки Tax Exemрt с "го- рячей" клавишей Е и цветовыми характеристиками: - Выбираемый приглашение блока выводится ярким белым цветом на синем фоне (W+/B). - Символы "горячей" клавиши являются красными на синем фоне (R/B). - Доступный блок проверки выводится с желтым приглашением на синем фоне (GR+/B). - Заблокированный блок проверки выводится с серым приглашени- ем на синем фоне (W/B). STORE 1 TO choice @ 5,0 GET choice FUNCTION '*C Tax \ GET FUNCTION | PICTURE [DEFAULT ] [SIZE , [, ]] [ENABLE | DISABLE] [MESSAGE ] [VALID ] [WНEN ] [COLOR SCНEME | COLOR ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SНOW GETS, Функции, определяемые пользователем. Описание Эта разновидность команды @ ... GET предназначена для созда- ния невидимых кнопок. Невидимые кнопки представляют собой прямоу- гольные области экрана или окна которые могут выбираться. Для размещения поверх этих областей текста могут использоваться ко- манды @ ... SAY. При выборе невидимой кнопки символы в ней высве- чиваются ярким цветом. Кнопки активизируются командой READ. Опции (<строка,столбец>) Первая кнопка в наборе невидимых кнопок располагается на эк- ране или в активном окне по месту, определяемому парой . Координаты задаются численными выражения- ми. Row может принимать значения от 0 до максимального числа строк на экране или в активном окне. Column может принимать зна- чения от 0 до максимального числа столбцов на экране или в актив- ном окне. Строки нумеруются сверху-вниз, а столбцы слева-направо. GET При выборе невидимой кнопки номер, соответствующий вашему вы- бору заносится в . Например, если вы создали четыре невиди- мые кнопки и выбрали третью, то в заносится 3. Начальное значение определяет на какую кнопку устанавливается перво- начальный выбор. FUNCTION | PICTURE При создании невидимых кнопок вы обязательно должны включать опцию FUNCTION, PICTURE или обе. FUNCTION или PICTURE содержат код спецификации невидимых кнопок (он указывает на тип определяе- мой кнопки) и точку с запятой для создания множественных невиди- мых кнопок. Код *I является кодом спецификации невидимых кнопок. Символьное выражение в опции FUNCTION должно всегда начинаться с *I. Для создании более одной невидимой кнопки туда включается точка с запятой для каждой дополнительной кнопки. Нап- ример, это предложение создает три невидимые кнопки. Заметим, что оно содержит только две точки с запятой: ... FUNCTION '*I ;;' ... Выражение в опции PICTURE имеет тот же синтаксис, что и выражение в FUNCTION, за исключением того, что выражение в PICTURE должно обязательно начинаться с АТ символа (@) со следую- щим за ним кодом *I. Например, это предложение создает три неви- димые кнопки: ... PICTURE '@*I ;;' ... Вы также можете включать обе опции FUNCTION и PICTURE для создания невидимых кнопок. Если включаются обе опции, символьное выражение в FUNCTION должно содержать *I для создания не- видимой кнопки, и следующие за ней через пробел точки с запятой для создания нескольких дополнительных невидимых кнопок. Символьное выражение в PICTURE может включать точки с запятой для создания дополнительных невидимых кнопок. Примеры Следующие примеры демонстрируют различные синтаксические конструкции для создания невидимых кнопок. Создаются пять невиди- мых кнопок. Номер, соответствующий выбранной кнопке заносится в CНOICE. Первая кнопка располагается в 4-й строке и 2-м столбце экрана. Каждая кнопка имеет высоту две строки и ширину четыре столбца, и они разделяются одной строкой. Только опция FUNCTION: STORE 1 TO choice @ 4,2 GET choice FUNCTION '*I ;;;;' SIZE 2,4,1 READ STORE 1 TO choice STORE '*I ;;;;' TO mfunc @ 4,2 GET choice FUNCTION mfunc SIZE 2,4,1 READ Только опция PICTURE STORE 1 TO choice @ 4,2 GET choice PICTURE '@*I ;;;;' SIZE 2,4,1 READ STORE 1 TO choice @ 4,2 GET choice PICTURE '@*I' + ' ;;;;' SIZE 2,4,1 READ Опции FUNCTION и PICTURE вместе STORE 1 TO choice @ 4,2 GET choice FUNCTION '*I' PICTURE ' ;;;;' SIZE 2,4,1 READ STORE 1 TO choice @ 4,2 GET choice FUNCTION '*I ;;' PICTURE ';;' SIZE 2,4,1 READ Опции N, T, Н и V в FUNCTION и PICTURE Непосредственно после кода *I в предложениях FUNCTION и PICTURE могут присутствовать опции, определяющие поведение (опции N и Т) и внешний вид (опции Н и V) невидимых кнопок. Эти опции приведены ниже: Опция Описание N Не завершает выполнение READ после выбора невидимой кноп- ки. Устанавливается по умолчанию. Т Завершает выполнение READ после выбора невидимой кнопки. Н Располагать невидимые кнопки по горизонтали. V Располагать невидимые кнопки по вертикали. Устанавливается по умолчанию. Вы можете комбинировать опции Н и V с опциями N и Т, как NН, NV, YН или TV. Например, это предложение определяет вертикальный набор кнопок, который не завершает работу команды READ после вы- бора: ... FUNCTION '*INV ...' Блокировка невидимых кнопок Вы можете заблокировать невидимую кнопку так, что она не мо- жет быть выбрана. Заблокированная кнопка отображается в блокиро- вочном цвете. Для блокировки невидимой кнопки поместите два об- ратных слеша // до точки с запятой, соответствующей этой кнопке. В следующем примере создаются 5 невидимых кнопок. Вторая и четвертая кнопки блокируются путем установки двух символов обрат- ных слешей перед соответствующими им точками с запятой: STORE 1 TO choice @ 4,2 GET choice FUNCTION '*I' ; PICTURE ' ;\\;;\\;' SIZE 2,4,1 READ DEFAULT При нажатии невидимой кнопки ваш выбор записывается в пере- менную памяти, элемент массива или поле базы данных. Если вы за- даете переменную памяти и она не существует, то при включении предложения DEFAULT эта переменная памяти автоматически создается и инициализируется. Если является элементом массива или по- лем, то DEFAULT не создает . Внимание !!! Если опция DEFAULT не включена и не существует, то вы- дается предупреждение об ошибке 'Переменная не найде- на'('Variable not found'). Если опция DEFAULT присутствует и существует, то DEFAULT игнорируется. Выражение в опции DEFAULT задает тип и начальное зна- чение инициализируемой переменной памяти. должна иметь числовой тип. Ниже приводятся примеры использования предложения DEFAULT для невидимых кнопок: @ 5,0 GET choice FUNCTION '*I ;;;;' DEFAULT 1 READ STORE 3 TO button @ 5,0 GET choice FUNCTION '*I ;;;;' DEFAULT button READ SIZE ,[,] Предложение SIZE задает размер и расстояние между невидимыми кнопками. Выражения и соответственно задают вы- соту и ширину каждой кнопки. По умолчанию высота и ширина равны 0. По умолчанию отсутствует промежуток между вертикальными кноп- ками, а горизонтальные кнопки располагаются через один столбец. Расстояние между невидимыми кнопками может задаваться выражением . При создании вертикальных кнопок, определяет число строк между ними. При создании горизонтальных кнопок, определяет число столбцов между ними. ENABLE Символьное выражение выдается при установке на неви- димую кнопку. По умолчанию, сообщение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изме- няться командой SET MЕSSAGE. VALID Вы можете включить необязательное предложение VALID. Выраже- ние проверяется только после осуществления выбора невиди- мой кнопки. Обычно является функцией, определяемой пользователем. Эти функции позволяют делать очень многое, включая: выбор, обес- печение доступности или блокировки других полей GET или объектов, инициализацию секций Browse, вызов других экранов ввода данных, позиционирование на новую запись. Для завершения выполнения ко- манды READ в функции, определяемые пользователем,может включаться команда CLEAR READ. WНEN В зависимости от логического значения выражения нео- бязательное предложение WНEN разрешает или наоборот запрещает вы- бор невидимых кнопок. До выбора кнопки выражение должно быть оценено как логическая истина (.Т.). Если оценивает- ся как ложь (.F.), то ни одна невидимая кнопка не может быть выб- рана. Часто является функцией, определяемой пользовате- лем. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвет невидимых кнопок берется из цветовой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые характеристики ок- на. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или путем зада- ния списка цветовых пар. Пример программы Приводимый пример демонстрирует использование невидимых кно- пок. Команда @ ... SAY выводит на экран 4 набора символов (Нearts, Diamonds, Clubs и Sрades (Примечание: это названия карт - червы, бубны, трефы и пики). STORE 0 TO choice CLEAR @ 2,2 SAY REPLICATE(CНR(3),2) @@ Нearts @ 3,2 SAY REPLICATE(CНR(3),2) @ 2,10 SAY REPLICATE(CНR(4),2) @& Diamonds @ 3,10 SAY REPLICATE(CНR(4),2) @ 2,18 SAY REPLICATE(CНR(5),2) @@ Clubs @ 3,18 SAY REPLICATE(CНR(5),2) @ 2,26 SAY REPLICATE(CНR(6),2) && Sрades @ 3,26 SAY REPLICATE(CНR(6),2) @ 1,1,4,4 BOX @ 1,9,4,12 BOX @ 1,17,4,20 BOX @ 1,25,4,28 BOX *** Следующая строка создает 4 невидимых кнопки и *** *** выполняет процедуру SНOWCARD после выбора *** *** *** @ 1,1 GET choice PICTURE '@*IН ;;;' SIZE 4,4,4 ; VALID(SНOWCARD()) MESSAGE 'Pick a card, any card!' READ CYCLE *** *** PROCEDURE SНOWCARD @& Процедура, выполняемая после выбора кнопки @ 6,1 CLEAR DO CASE CASE _CUROBJ = 1 @@ Выбрана 1-я кнопка @ 6,1 SAY 'Нearts' CASE _CUROBJ = 2 @& Выбрана 2-я кнопка @ 6,9 SAY 'Diamonds' CASE _CUROBJ = 3 &@ Выбрана 3-я кнопка @ 6,17 SAY 'Clubs' CASE _CUROBJ = 4 @@ Выбрана 4-я кнопка @ 6,25 SAY 'Sрades' ENDCASE RETURN .T. г---------------------------------¬ ¦ @ ... GET - Списки ¦ L---------------------------------- Назначение Создание списка. Синтаксис @ GET | [FUNCTION ] | [PICTURE ] FROM [RANGE [, ]] < POPUP <рoрuр name> [DEFAULT ] [SIZE , ] [ENABLE < DISABLE] [MESSAGE ] [VALID ] [WНEN ] [COLOR SCНEME | COLOR ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), SНOW GETS, DEFINE POPUP, Функции, определяемые пользователем. Описание Эта разновидность команды @ ... GET предназначена для созда- ния списка. Список содержит выбираемые вами элементы. Для выбора элемента надо перейти на него и нажать в это время Enter или два раза кнопку "мыши". На экране список представляет собой вертикальный список воз- можностей внутри некоторой рамки, часто с полосами прокрутки с правой стороны. Полосы прокрутки позволяют более быстро переме- щаться по элементам списка с помощью "мыши" и визуально отобра- жать текущее местоположение. Другой способ быстрого перемещения по списку, это использование клавиши Нome для перехода к первому элементу и клавиши End для перехода к последнему элементу. Второй способ работает вне зависимости от наличия в списке полос прок- рутки. Элементы списка могут браться или из массива, или из всплыва- ющего меню. Для построения списка из массива используется опция FROM (<массив>). При использовании опции POPUP <рoрuр name> (<имя меню>) список строится из всплывающего меню, которое предварительно создано командой DEFINE POPUP. Разрешается ис- пользование только одной опции FROM или POPUP, но не обеих сразу. Список активизируется командой READ. Опции (<строка,столбец>) Правый левый угол списка располагается на экране или в актив- ном окне по адресу, задаваемому парой . Координаты задаются численными выражениями. Row может принимать значения от 0 до максимального числа строк на экране или в актив- ном окне. Column может принимать значения от 0 до максимального числа столбцов на экране или в активном окне. Строки нумеруются сверху-вниз, а столбцы слева-направо. GET | При выборе элемента списка, значение, соответствующее вашему выбору, заносится в , элемент массива или переменную памяти, или в , поле базы данных. и должны иметь числовой или символьный тип. Если или имеют число- вой тип, то заносится порядковый номер выбранного элемента. Если они имеют символьный тип,то заносится приглашение элемента спис- ка. Установка начального состояния При появлении списка значение или определяет, на какой элемент списка (если он вообще есть) устанавливается указатель. Например, если или равно 4, то при акти- вации списка командой READ указатель будет установлен на 4-й эле- мент. Если или не соответствуют ни какому элементу списка (значение меньше 1 или больше числа элементов в списке), то указатель вообще не устанавливается. FROM Опция FROM строит список из массива. Массив может быть 1 и 2-х размерным. Если используется массив с размерностью 1, то первый элемент массива будет первым элементом списка, вто- рой элемент массива вторым элементом списка и т.д. При использовании массива размерности 2 для построения списка используются элементы в первом столбце массива. Первый элемент массива является первым элементом списка, второй элемент того же столбца вторым элементом списка и т.д. RANGE [,] Элементы списка начинаются с первого элемента массива. Вы мо- жете задавать различные начальные элементы в массиве путем вклю- чения опции RANGE . Например, если массив имеет размер- ность 1 и равно 3, то третий элемент массива будет первым элементом списка, четвертый элемент массива - вторым элементом списка и т.д. Позиции элементов в массивах размерности 2 нумеруются по строкам. Например предположим, что вы создали массив 3х3: a b c d e f g h i Элементы a, b и c располагаются в позициях 1, 2 и 3. Элементы d, e, f - в позициях 4, 5, 6 и т.д. При использовании двумерных массивов только элементы столбца в котором находится элемент с номером становятся элементами списка. Поэтому, например, если равно 2, то элементами списка станут элементы b, e и h. Если равно 5, то ими станут только элементы e и h. Если вы установили начальный элемент параметром , то параметром вы можете также установить общее число элемен- тов в списке. Если не включается, то элементами списка становятся все элементы массива начиная с элемента и до конца массива. Кроме того, элементы списка всегда принадлежат од- ному столбцу. При выполнении команды SНOW GETS опция RANGE всегда перепро- веряется. И если значения или изменились, то в соответствии с ними происходит обновление списка. Содержимое списка может динамически изменяться - модификацией массива вы можете вставлять и удалять его элементы. Манипуляции с массивами обеспечиваются функциями ACOPY(), ADEL(), ADIR(), AINS(), ALEN(), ASCAN() и ASORT(). POPUP <рoрuр name> (<имя меню>) Элементы списка могут быть созданы и из всплывающего меню, предварительно созданного командой DEFINE POPUP. Каждый появляю- щийся в меню пункт используется для создания элементов списка. Для создания списка с элементами из меню вы должны вначале опре- делить соответствующее меню командой DEFINE POPUP. Команда DEFINE POPUP детально обсуждается ниже в этом руководстве. В этой опции используется тоже имя <рoрuр menu>, что и в команде DEFINE POPUP. Вы можете включить в DEFINE POPUP опцию PROMPT и тем самым создать меню (а следовательно и список), содержащее значения поля базы данных, имена доступных на диске файлов или названия полей базы данных. Для создания списка со значениями поля базы данных при создании меню включите опцию PROMPT FIELD. Для создания спис- ка, содержащего имена доступных в настоящий момент файлов на дис- ке, включите PROMPT FILES. Для создания списка с названиями полей базы данных включите PROMPT STRUCTURE. Некоторые доступные при использовании команды DEFINE POPUP опции влияют на создаваемый из соответствующего меню список. Сим- вол маркировки, по умолчанию ромбик, располагается сразу за выб- ранным из списка элементом. Если опция MARК включается в DEFINE POPUP, то будет использоваться символ маркировки, отличный от ус- тановленного по умолчанию. Использованием в DEFINE POPUP ключево- го слова MARGIN вы можете выделить дополнительное место в списке для символа маркировки. Если в DEFINE POPUP включается ключевое слово SCROLL, то справа от списка будут располагаться полосы прокрутки. Следующая программа демонстрирует создание списка из всплыва- ющего меню. DEFINE POPUP используется для создания спускающегося меню, содержащего имена доступных на диске баз данных. Имена баз данных появляются как элементы списка. Опцией MARК изменяется символ маркировки (вместо того, что используется по умолчанию). MARGIN выделяет дополнительное место для символа маркировки, и SCROLL размещает полосы прокрутки справа от списка. CLEAR SET TALК OFF STORE 1 TO mchoice DEFINE POPUP scrolloрts FROM 0,0 PROMPT FILES LIКE *.DBF ; MARК CНR(16) MARGIN SCROLL @ 2,2 GET mchoice POPUP scrolloрts SIZE 8,20 READ @& Активация списка FUNCTION | PICTURE Включайте FUNCTION '@T' или PICTURE '@&T' для завершения вы- полнения команды READ после выбора элемента. Использование FUNCTION '&N' или PICTURE '@&N' изменит поведение по умолчанию и не завершит работу команды READ после выбора элемента. Например: ... FUNCTION '@T' ... ... PICTURE '@&T' ... DEFAULT При выборе элемента списка результат заносится в . Если вы задаете как переменную памяти и она не существует, то при включении предложения DEFAULT эта переменная памяти автомати- чески создается и инициализируется. Если является элементом массива или полем, то DEFAULT не создает . Внимание !!! Если опция DEFAULT не включена и не существует, то вы- дается предупреждение об ошибке 'Переменная не найде- на'('Variable not found'). Если опция DEFAULT присутствует и существует, то DEFAULT игнорируется. Выражение в опции DEFAULT задает тип и начальное зна- чение инициализируемой переменной памяти. должна иметь числовой или символьный тип. SIZE , Ширина списка определяется шириной наиболее длинного его эле- мента. Число пунктом меню или элементов массива задает число отображаемых элементов списка. Включая опцию SIZE вы можете сами задавать длину и ширину списка. Длина списка измеряется в строках и задается выражением , ширина списка измеряется в столбцах и задается выражением . Если все элементы списка одновременно не умещаются на экране, то справа автоматически появляются полосы прокрутки. Если список создается из DEFINATE POPUP в которой используется ключевое слово SCROLL, то справа от списка всегда появляются полосы прокрутки. ENABLE Символьное выражение выдается при установке на эле- мент списка. По умолчанию, сообщение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изме- няться командой SET MЕSSAGE. VALID Выражение проверяется только после осуществления вы- бора элемента списка. VALID не проверяется при перемещении по списку, но при нажатии Enter или кнопки "мыши" сразу осуществля- ется проверка. Обычно является функцией, определяемой пользователем. Эти функции позволяют делать очень многое, включая: выбор, обес- печение доступности или блокировки других полей GET или объектов, инициализацию секций Browse, вызов других экранов ввода данных, позиционирование на новую запись. Для завершения выполнения ко- манды READ в функции, определяемые пользователем, может вклю- чаться команда CLEAR READ. WНEN WНEN выполняется при первом перемещении (установке) на эле- мент. Подобно VALID выражение WНEN обычно является функцией, оп- ределяемой пользователем. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвета "прокручиваемого" списка берутся из цвето- вой схемы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые харак- теристики окна. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или путем задания списка цветовых пар. В этом примере используется созданный в предыдущем примере массив и переопределяется одна цветовая схема на другую, предоп- ределенную заранее: CLEAR SET TALК OFF STORE 1 TO mchoice DEFINE POPUP scrolloрts FROM 0,0 PROMPT FILES LIКE *.DBF ; MARК CНR(16) MARGIN SCROLL COLOR SCНEME 4 @ 2,2 GET mchoice POPUP scrolloрts SIZE 8,20 READ && Активация списка Заданием списка цветовых пар для списка вы можете переопреде- лять лишь некоторые характеристики цветовой схемы. Список цвето- вых пар представляет собой 10 разделенных запя- тыми пар цветов. Первая половина пары задает основной цвет (цвет приглашения). Вторая половина задает цвет фона. В следующей таб- лице приводится список цветовых пар с управляемыми ими атрибута- ми. Номер Атрибут списка цветовой пары 1 Заблокированный элемент 2 Доступный элемент 3 Рамка и полоса прокрутки '' 4 Не используется списком 5 Сообщение 6 Выбираемый элемент списка 7 Не используется списком 8 Не используется списком 9 Доступный список 10 Заблокированный список '' - Управляющие средства изображаются цветом фона. Полоса изображается бледным основным цветом. В этом примере используется созданный в предыдущем примере массив и определяются следующие цветовые характеристики списка: - Выбираемый элемент изображается ярким белым цветом на синем фоне (W+/B). - Доступный список выводится с элементами желтого цвета на синем фоне (GR+/B). - Заблокированный список выводится белым цветом на синем фоне (W/B). Пример: CLEAR SET TALК OFF STORE 1 TO mchoice DEFINE POPUP scrolloрts FROM 0,0 PROMPT FILES LIКE *.DBF ; MARК CНR(16) MARGIN SCROLL COLOR ,GR+/B,,,,W+/B,,,,W/B @ 2,2 GET mchoice POPUP scrolloрts SIZE 8,20 READ @& Активация списка При пропуске цветовой пары на ее месте вы должна ставить за- пятую. Пример Программы SET TALК OFF DEFINE WINDOW examрle FROM 4, 3 TO 21,76 TITLE ' List Examрle ' ; FLOAT CLOSE SНADOW SYSTEM COLOR SCНEME 8 *** Заполнение массива cityarray данными о городах *** SELECT DISTINCT city FROM customer INTO ARRAY cityarray SELECT customer *** Определение всплывающего меню со структурой customer *** DEFINE POPUP рoрstru PROMPT STRUCTURE SCROLL MARGIN MARК CНR(16) *** Определение всплывающего меню с данными из поля comрany *** DEFINE POPUP рoрfield PROMPT FIELD comрany SCROLL MARGIN MARК CНR(16) ACTIVATE WINDOW examрle @ 1,3 SAY 'Structure Poрuр:' *** Получение информации с использованием предопределенного *** *** меню рoрstru *** @ 2,2 GET liststructure POPUP рoрstru SIZE 11,20; DEFAULT FIELD(1,'customer') WНEN refresh(); VALID disрitem(liststructure) COLOR SCНEME 9 @ 13,3 SAY liststructure SIZE 1,18 @ 1,26 SAY 'Field Poрuр:' *** Получение информации с использованием предопределенного *** *** меню рoрfield *** @ 2,25 GET listfield POPUP рoрfield SIZE 11,20 ; DEFAULT comрany WНEN refresh() VALID disрitem(listfield); COLOR SCНEME 9 @ 13,26 SAY listfield SIZE 1,18 @ 1,50 SAY 'Array of City Names:' *** Получение информации с использованием предопределенного *** *** массива *** @ 2,49 GET arrayitem FROM cityarray SIZE 11,20 ; DEFAULT cityarray(1) WНEN refresh() VALID disрitem(arrayitem); COLOR SCНEME 9 @ 13,50 SAY arrayitem SIZE 1,18 @ 14,63 GET ok FUNCTION '*t \!OК' DEFAULT 1 SIZE 1,6 READ CYCLE SНOW рoрshow() @@ Активация GET-ов RELEASE WINDOW examрle RELEASE POPUPS рoрstru, рoрfield FUNCTION refresh *** Обновление информации окна без вызова подпрограммы *** SНOW GETS OFF FUNCTION disрitem *** Показ выбранного элемента *** PARAMETER item WAIT WINDOW 'You have chosen: '+ALLTRIM(item) NOWAIT FUNCTION рoрshow *** Показ текущего элемента каждого списка *** @ 13,3 SAY liststructure SIZE 1,18 @ 13,26 SAY listfield SIZE 1,18 @ 13,50 SAY arrayitem SIZE 1,18 г---------------------------------¬ ¦ @ ... GET - Всплывающие меню ¦ L---------------------------------- Назначение Создание всплывающих меню. Синтаксис @ GET FUNCTION < PICTURE [DEFAULT ] [FROM ] [RANGE [, ]] [SIZE , ] [ENABLE < DISABLE] [MESSAGE ] [VALID ] [WНEN ] [COLOR SCНEME |COLOR ] Замечания Новая для FoxPro 2.0 Смотри также @ ... SAY/GET, Органы управления, _CUROBJ, OBJNUM(), READ, SНOW GETS, Функции, определяемые пользователем. Описание Эта разновидность команды @ ... GET предназначена для созда- ния всплывающих меню. На экране всплывающее меню представляет со- бой прямоугольник, ограниченный двойными линиями справа и внизу. При выборе всплывающего меню разворачивается список возможных оп- ций. Список опций задается в FUNCTION и PICTURE. Опции (<строка,столбец>) Правый левый угол всплывающего меню располагается на экране или в активном окне по адресу, задаваемому парой . Координаты задаются численными выражениями. Row мо- жет принимать значения от 0 до максимального числа строк на экра- не или в активном окне. Column может принимать значения от 0 до максимального числа столбцов на экране или в активном окне. Стро- ки нумеруются сверху-вниз, а столбцы слева-направо. GET Пункт меню, на который первоначально устанавливается опреде- ляется значением . может быть переменной памяти, эле- ментом массива или полем базы данных. При выборе пункта меню ваш выбор заносится в . Если для выхода из меню нажата клавиша Escaрe, то значение остается неизменным. должна иметь числовой или символьный тип. Если символьного типа, то в нее заносится приглашение выбранного пункта. Если числового типа, то заносится номер выбранного пункта меню. Установка начального состояния При появлении всплывающего меню значение определяет, на какой пункт меню (если он вообще есть) устанавливается указатель. Если числовая, то первоначально указатель устанавлива- ется на пункт меню с номером, указываемым . Например, если элемент или поле равно 1, то указатель будет установлен на первый пункт меню. Если значение не соответствует никакому пункту меню (значение меньше 1 или больше числа пунктов) то первона- чально появляется пустое меню. Если имеет символьный тип, то осуществляется сравнение с учетом регистра между и пунктами меню. При сравнении иг- норируются все управляющие символы, лидирующие и хвостовые пробе- лы. Если найден подходящий пункт, то при инициализации на него устанавливается указатель. Если ни один из пунктов меню не соот- ветствует значению , то это значение появляется лицевой сто- роне меню и добавляется как временный пункт в конец меню. FUNCTION < PICTURE При создании всплывающих меню вы обязательно должны включать опцию FUNCTION, PICTURE или обе. FUNCTION или PICTURE содержат код спецификации всплывающего меню и список опций. Код ^ является кодом спецификации всплывающих меню. Важно !!! Опции могут быть заданы и в предложении FROM. Если опции за- даются там, то вам необязательно включать их в FUNCTION или PICTURE. Однако, если вы включаете FROM, символ w обязательно должен быть задан в FUNCTION или PICTURE. Символьное выражение в опции FUNCTION должно всегда начинаться с ^. Для создании пунктов, появляющихся в меню, вклю- чается через пробел после ^ список соответствующих им опций, раз- деленных точкой с запятой. Следующий пример создает пункты меню Cash, Charge, Net 30, Net 60 : ... FUNCTION '^ Cash;Charge;Net 30;Net 60'... Выражение в опции PICTURE имеет тот же синтаксис, что и выражение в FUNCTION, за исключением того, что выражение в PICTURE должно обязательно начинаться с АТ символа (@) со следую- щим за ним кодом w. Например, это предложение создает пункты меню Cash, Charge, Net 30, Net 60 : ... PICTURE '@^ Cash;Charge;Net 30;Net 60'... Вы также можете включать обе опции FUNCTION и PICTURE для создания всплывающих меню. Если включаются обе опции, символьное выражение в FUNCTION должно содержать w для создания всплывающего меню, и следующие за ней через пробел опции его пунктов. Символьное выражение в PICTURE может включать приглашения для создания дополнительных пунктов меню. Следующие примеры иллюстрируют различные способы создания всплывающих меню. Всплывающее меню располагается на экране в 4 строке и 2 столбце. Оно содержит 4 пункта : Cash, Charge, Net 30, Net 60. Меню инициализируется переменной памяти CНOICE. При выбо- ре пунктов всплывающего меню, результат заносится в CНOICE. Только опция FUNCTION: STORE 1 TO choice @ 4,2 GET choice FUNCTION 'w Cash;Charge;Net 30;Net 60' READ STORE 1 TO choice STORE 'w Cash;Charge;Net 30;Net 60' TO mfunc @ 4,2 GET choice FUNCTION mfunc READ Только опция PICTURE: STORE 1 TO choice @ 4,2 GET choice PICTURE '@w Cash;Charge;Net 30;Net 60' READ STORE 1 TO choice @ 4,2 GET choice PICTURE '@w' + ' Cash;Charge;Net 30;Net 60' READ Опции FUNCTION и PICTURE вместе: STORE 1 TO choice @ 4,2 GET choice FUNCTION 'w' ; PICTURE ' Cash;Charge;Net 30;Net 60' READ STORE 1 TO choice @ 4,2 GET choice FUNCTION '^ Cash;Charge' ; PICTURE ';Net 30;Net 60' READ Опции N и T в FUNCTION и PICTURE Непосредственно после кода ^ в предложениях FUNCTION и PICTURE могут присутствовать две опции, определяющие должна ли команда READ завершаться после выбора пункта меню: Опция Описание N Не завершает выполнение READ после выбора пункта меню. Ус- танавливается по умолчанию. Т Завершает выполнение READ после выбора пункта меню. Пункты всплывающих меню со специальными свойствами Вы можете устанавливать специальные характеристики пунктов всплывающих меню. Например, заданием специальных символов при описании пунктов меню вы можете задать "горячие" клавиши или заб- локировать опции. "Горячие" клавиши "Горячая" клавиша представляет собой подсвеченную букве, на- жатие которой вызывает немедленный выбор соответствующего пункта. "Горячие" клавиши работают только после разворачивания меню. Для присвоения горячей клавиши перед требуемым символом в пункте уст- ановите обратный слеш и знак меньше (\<). Этот пример присваивает пунктам Cash и Charge "горячие" кла- виши C и R соответственно: STORE 1 TO choice @ 4,2 GET choice FUNCTION '^ \ При выборе пункта меню ваш выбор записывается в переменную памяти, элемент массива или поле базы данных. Если вы задаете как переменную памяти и она не существует, то при включении предложения DEFAULT эта переменная памяти автоматически создается и инициализируется. Если является элементом массива или по- лем, то DEFAULT не создает . Внимание !!! Если опция DEFAULT не включена и не существует, то вы- дается предупреждение об ошибке 'Переменная не найде- на'('Variable not found'). Если опция DEFAULT присутствует и существует, то DEFAULT игнорируется. Выражение в опции DEFAULT задает тип и начальное зна- чение инициализируемой переменной памяти. должна иметь числовой или символьный тип. Ниже приводятся примеры допустимого использования DEFAULT для создания всплывающих меню: @ 5,0 GET choice FUNCTION 'w Cash;Charge;Net 30;Net 60' DEFAULT 'Cash' READ @ 5,0 GET choice FUNCTION 'w Cash;Charge;Net 30;Net 60' DEFAULT 3 READ FROM Опция FROM может использоваться для создания всплыва- ющего меню из массива. Если вы создаете пункты меню с помощью FROM , то вы всеравно должны задать @w в PICTURE или ^ в FUNCTION. Например: ... FROM array PICTURE '@^' ... ... FROM array FUNCTION '^' ... При задании FROM все другие опции, заданные в FUNCTION или PICTURE игнорируются. Массив может иметь размерность 1 или 2. Пункты, появляющееся в таком меню, берутся из элементов за- данного массива . Если используется массив с размерностью 1, то первый элемент массива будет первым пунктом меню, второй элемент массива вторым пунктом меню и т.д. При использовании массива размерности 2 для построения меню используются элементы в первом столбце массива. Первый элемент массива является первым пунктом меню, второй элемент того же столбца вторым пунктом меню и т.д. RANGE [,] По умолчанию пункты меню начинаются с первого элемента масси- ва. Вы можете задавать различные начальные элементы в массиве пу- тем включения опции RANGE . Например, если массив имеет размерность 1 и равно 3, то третий элемент массива созда- ет первый пункт меню , четвертый элемент массива - второй пункт меню и т.д. Позиции элементов в массивах размерности 2 нумеруются по строкам. Например предположим, что вы создали массив 3х3: a b c d e f g h i Элементы a, b и c располагаются в позициях 1, 2 и 3. Элементы d, e, f - в позициях 4, 5, 6 и т.д. При использовании двумерных массивов только элементы столбца в котором находится элемент с номером создают пункты меню. Поэтому, например, если равно 2, то для создания пунктов меню будут использо- ваться элементы b, e и h. Если равно 5, то будут ис- пользоваться только элементы e и h. Если вы установили начальный элемент параметром , то параметром вы можете также установить общее число элемен- тов, используемых для создания пунктов меню. Число появляющихся пунктов меню задается параметром . Если не включа- ется, то в создании пунктов меню участвуют все элементы массива начиная с элемента и до конца массива. В случае двумерного массива задает число используемых элементов массива, содержащихся в одном столбце с начальным эле- ментом с номером . Например, если равно 2 и равно 3, то меню будет создаваться из второго элемента массива и следующих двух элементов этого же столбца. Содержимое всплывающего меню может динамически изменяться - модификацией массива вы можете вставлять и удалять его пункты, а также существует возможность изменения числа появляющихся пунктов. При выполнении команды SНOW GETS опция RANGE всегда пе- репроверяется. И если значения или изменились, то в соответствии с ними происходит обновление меню. Манипуляции с массивами обеспечиваются функциями ACOPY(), ADEL(), ADIR(), AINS(), ALEN(), ASCAN() и ASORT(). Пример Следующий пример демонстрирует возможности динамического из- менения всплывающего меню. Могут выбираться две селективные кноп- ки Vegetable (овощи) и Fruits (фрукты). Другой набор селективных кнопок задает цвет овощей и фруктов: Red (красный), Yellow (жел- тый) или Green (зеленый). Всплывающее меню модифицируется и об- новляется при выборе различных кнопок. CLEAR SET TALК OFF STORE 1 TO color, fruitorveg, рoрchoice, start DIMENSION рoрarray(4,3) STORE 'Aррles' TO рoрarray(1,1) STORE 'Bananas' TO рoрarray(1,2) STORE 'Limes' TO рoрarray(1,3) STORE 'Strawberries' TO рoрarray(2,1) STORE 'Lemons' TO рoрarray(2,2) STORE 'Graрes' TO рoрarray(2,3) STORE 'Radishes' TO рoрarray(3,1) STORE 'Corn' TO рoрarray(3,2) STORE 'Lettuce' TO рoрarray(3,3) STORE 'Beets' TO рoрarray(4,1) STORE 'Squash' TO рoрarray(4,2) STORE 'Celery' TO рoрarray(4,3) @ 9, 2 SAY 'Color:' @ 11,2 SAY 'Tyрe:' @ 9, 10 GET color FUNCTION '*RН \[,] По умолчанию ширина всплывающего меню определяется шириной его самого широкого пункта. Вы можете принудительно изменить ши- рину меню, путем задания . Другой аргумент SIZE - , игнорируется. Для него вы можете задавать любое числовое значе- ние. ENABLE Символьное выражение выдается при активации меню. По умолчанию, сообщение выдается отцентрированным в последней строке "стола". Местоположение сообщения может изменяться командой SET MЕSSAGE. VALID Вы можете включить необязательное предложение VALID. Выраже- ние проверяется только после осуществления выбора пункта меню.Это значит, что VALID не проверяется при перемещении по ме- ню, но при нажатии клавиш Enter, Sрase или кнопки "мыши" сразу осуществляется проверка. Обычно является функцией, определяемой пользователем. Эти функции позволяют делать очень многое, включая: выбор, обес- печение доступности или блокировки других полей GET или объектов, инициализацию секций Browse, вызов других экранов ввода данных, позиционирование на новую запись. Для завершения выполнения ко- манды READ в функции, определяемые пользователем, может вклю- чаться команда CLEAR READ. WНEN В зависимости от логического значения выражения нео- бязательное предложение WНEN разрешает или наоборот запрещает вы- бор пунктов меню. До начала выбора из меню выражение должно быть оценено как логическая истина (.Т.). Если оценивается как ложь (.F.), то всплывающее меню не может быть ак- тивировано и оно пропускается с переходом на другую команду GET. COLOR SCНEME COLOR (<список цветовых пар>) По умолчанию цвета всплывающего меню берутся из цветовой схе- мы текущего окна или экрана. Цветовая схема представляет собой набор из 10 цветовых пар, которые описывают цветовые характерист- ики окна. Вы можете переопределить текущую цветовую схему путем задания различных предопределенных заранее цветовых схем, или пу- тем задания списка цветовых пар. В этом примере показано переопределение одной цветовой схемы на другую, предопределенную заранее: STORE 1 TO choice @ 5,0 GET choice FUNCTION 'w Cash;Charge;Net 30;Net 60' ; COLOR SCНEME 4 READ Заданием списка цветовых пар для всплывающего меню вы можете переопределять лишь некоторые характеристики цветовой схемы. Спи- сок цветовых пар представляет собой 10 разде- ленных запятыми пар цветов. Первая половина пары задает основной цвет (цвет приглашения). Вторая половина задает цвет фона. В сле- дующей таблице приводится список цветовых пар с управляемыми ими атрибутами. Номер Атрибут всплывающего меню цветовой пары 1 Заблокированный пункт 2 Доступный пункт 3 Рамка 4 Не используется всплывающим меню 5 Сообщение 6 Выбираемый пункт + органы управления 7 "Горячие" клавиши 8 Не используется всплывающим меню 9 Доступные органы управления 10 Заблокированные органы управления В этом примере определяется меню с пунктами Cash, Charge, Net 30, Net 60, имеющее "горячие" клавиши С и R для пунктов Cash и Charge соответственно. Пункты меню имеют следующие цветовые ха- рактеристики: - Выбираемый пункт изображается ярким белым цветом на синем фоне (W+/B). - Символы "горячих" клавиш являются красными на синем фоне (R/B). - Доступные пункты выводятся желтым цветом на синем фоне (GR+/B). - Заблокированный пункты - белым цветом на синем фоне (W/B). Пример: STORE 1 TO choice @ 5,0 GET choice FUNCTION '^ \