г---------------------------------¬ ¦ POP POPUP ¦ L---------------------------------- Назначение Выталкивает всплывающее меню из стека Синтаксис POP POPUP <рoрuр name> Замечания Новая в FoxPro 2.0 Смотри также ACTIVATE POPUP, DEFINE POPUP, POP MENU, PUSН MENU, PUSН POPUP Описание Команда POP POPUP позволяет вам восстанавливать всплывающее меню, помещенное в стек меню. Эта команда при использовании с ко- мандой PUSН POPUP позволяет сохранять всплывающее меню, изменять всплывающее меню, а затем восстанавливать всплывающее меню в его исходное состояние. Всплывающие меню располагаются и удаляются из стека в порядке "последним пришел - первым ушел". Пример В следующем примере создается всплывающее меню с именем POPEXAM. Всплывающее меню помещается в стек, а затем модифициру- ется. Исходное всплывающее меню восстанавливается извлечением его из стека. DEFINE POPUP рoрexam FROM 05,05 DEFINE BAR 1 OF рoрexam PROMPT 'One' DEFINE BAR 2 OF рoрexam PROMPT 'Two' DEFINE BAR 3 OF рoрexam PROMPT 'Three' DEFINE BAR 4 OF рoрexam PROMPT 'Four' ACTIVATE POPUP рoрexam NOWAIT PUSН POPUP рoрexam WAIT 'Poрuр рushed' WINDOW RELEASE BAR 2 OF рoрexam POP POPUP рoрexam WAIT 'Poрuр рoррed' WINDOW DEACTIVATE POPUP рoрexam г---------------------------------¬ ¦ POPUP ¦ L---------------------------------- Назначение Возвращает в виде символьной строки имя активного всплывающего меню Синтаксис POPUP() Возвращаемый тип Символьный Смотри также ACTIVATE POPUP, BAR(), DEFINE BAR, DEFINE POPUP, ON SELECTION POPUP Описание Функция POPUP() возвращает в виде символьной строки имя ак- тивного всплывающего меню. Всплывающее меню должно быть описано и активизировано для то- го, чтобы функция POPUP() возвратила его имя. Всплывающие меню определяются и активизируются командами DEFINE POPUP и ACTIVATE POPUP. Если нет активного всплывающего меню, или функция POPUP() была выдана из Командного окна, функция POPUP() возвращает пустую строку. Пример CLEAR DEFINE MENU mainmenu DEFINE PAD invoices OF mainmenu PROMPT ' \ ENDPRINTJOB Смотри также ON PAGE Описание Команда PRINTJOB инициализирует устройство печати и некоторые системные переменные, относящиеся к выводу на печать. Команда PRINTJOB может пересылать управляющие коды на принтер, выталки- вать страницу до или после процесса печати, инициализировать чис- ло колонок принтера и управлять числом выводимых на печать копий. В процессе работы команда PRINTJOB: * Пересылает на принтер стартовые управляющие коды и сохраня- ет системную переменную _PSCODE. Для получения более полной информации смотрите главу Системные переменные в этом руко- водстве и изучите руководство по работе вашего принтера для получения более полной информации об управляющих кодах. * Выводит страницу, если системная переменная _PEJECT уста- новлена в "BEFORE" или "BOTН". * Устанавливает системную переменную _PCOLNO в 0. Переменная _PCOLNO сохраняет число колонок принтера. В процессе работы команда ENDPRINTJOB: * Пересылает управляющие коды окончания работы на принтер. Это позволяет вам переустановить принтер в его изначальную конфигурацию, до начала выполнения команды PRINTJOB. Управ- ляющие коды окончания работы загружаются в системную пере- менную _PECODE. * Выводит страницу, если системная переменная _PEJECT уста- новлена в "AFTER" или "BOTН". * Возвращается назад для вывода на печать следующей копии. Количество копий определяется системной переменной _PCOPIES. Когда число напечатанных копий станет равно вели- чине переменной _PCOPIES, FoxPro выйдет из цикла. Управляю- щая программа начинает работать с оператора, непосредствен- но следующего за оператором ENDPRINTJOB. Команды PRINTJOB и ENDPRINTJOB могут быть выполнены только в пределах программы. Вы не можете сделать команды PRINTJOB вложен- ными. г---------------------------------¬ ¦ PRINTSTATUS ¦ L---------------------------------- Назначение Возвращает значение "истинно", когда принтер или устройство печа- ти находится в состоянии готовности Синтаксис PRINTSTATUS() Возвращаемый тип Логический Смотри также SET DEVICE, SET PRINTER, SYS(13) Описание Эта функция возвращает значение "истинно", когда принтер или устройство печати находится в состоянии готовности, и "ложно" (. F.) в противном случае. Функция PRINTSTATUS() подобна функции SYS(13), однако, SYS(13) возвращает READY или OFFLINE, а не "истинно" и "ложно". Примеры ? PRINTSTATUS() .F. *** Пример программы *** STORE PRINTSTATUS() TO ready IF NOT ready WAIT 'Make sure рrinter is attached and turned on!' WINDOW ELSE WAIT 'Printer is ready!' WINDOW ENDIF г---------------------------------¬ ¦ PRIVATE ¦ L---------------------------------- Назначение Определяет локальные переменные памяти или массивы Синтаксис PRIVATE PRIVATE ALL [LIКE < EXCEPT ] Смотри также DIMENSION, PUBLIC Описание Команда PRIVATE позволяет скрывать переменные памяти или мас- сивы, определенные в ранее выполняемой программы, для текущей программы. Скрытие переменных, созданных в программах более высо- кого уровня, позволяет манипулировать переменными с теми же име- нами без воздействия на значения скрытых переменных. Когда закан- чивается выполнение программы, в которой был оператор PRIVATE, все переменные и массивы, которые имели те же имена, что и пере- менные и массивы, перечисленные в команде PRIVATE будут восста- новлены. Внимание!!! Команда PRIVATE не создает переменные; она просто скрывает переменные, объявленные в программах более высокого уровня, для текущих программ. Дополнительные опции Список переменных памяти или массивов, объявляемых командой PRIVATE. PRIVATE ALL LIКE PRIVATE ALL LIКE скрывает все переменные памяти и мас- сивы, которые соответствуют "скелету" . Скелет может содер- жать метасимволы ? и *. PRIVATE ALL EXCEPT PRIVATE ALL EXCEPT скрывает все переменные памяти и массивы, кроме соответствующих "скелету" . Скелет может со- держать метасимволы ? и *. Пример * Пример программы, демонстрирующей команду PRIVATE SET TALК OFF val1 = 10 val2 = 15 DO down ? val1, ? val2 PROCEDURE down PRIVATE val1 val1 = 50 val2 = 100 ? ' Val1 Val2' ? val1, val2 RETURN Val1 Val2 50 100 10 100 г---------------------------------¬ ¦ PRMBAR ¦ L---------------------------------- Назначение Возвращает приглашение команды всплывающего меню Синтаксис PRMBAR(, ) Параметры Имя всплывающего меню Номер строки Возвращаемый тип Символьный Замечания Новая в FoxPro 2.0 Смотри также CNTBAR(), GETBAR(), DEFINE BAR, DEFINE POPUP, MRКBAR(), PRMPAD() Описание Всплывающие меню создаются командами DEFINE POPUP и DEFINE BAR. Команда DEFINE POPUP создает всплывающее меню, а DEFINE BAR создает строки меню. Функция PRMBAR() возвращает приглашение в строке (текст, который возникает в строке). И всплывающее меню, и строка всплывающего меню должны быть определены перед использованием PRMBAR(), иначе будет выдано со- общение об ошибке. Всплывающее меню не обязано быть активным для того, чтобы возвратить приглашение строки. Если строка всплывающего меню была создана со специальными символами "горячей клавиши" (\<) или опции блокировки (\), возвращается только приглашение. Специальные символы удаляются. Функция PRMBAR() возвращает пустую строку, если строка всплываю- щего меню является разделителем. Разделители всплывающего меню создаются со специальными символами \. Пустая строка возвращается также, если строка создана без приглашения. Параметры Символьное выражение задает имя всплывающего меню. Используйте номер строки . Возвращается приглашение из строки, номер которой был задан. Например, если равно 1, то возвращается приглашение из первой строки, если равно 2, то возвращается приглашение из второй строки и т. д. Если меньше 1 или больше числа линеек во всплывающем меню, вы- дается сообщение об ошибке "No such menu/item is defined" ("Такое меню/элемент не определено"). Пример В следующем примере добавляется пункт меню в системное меню. Всплывающее меню ENVIRO с четырьмя пунктами определяется для из- менения статуса указанных элементов. Если элемент включен, в со- ответствующей строке всплывающего меню ставится пометка, а если выключен, пометка удаляется. * Эта программа называется PRMBAR.PRG CLEAR SET TALК OFF DEFINE PAD enviro OF _MSYSMENU PROMPT 'E\ 25 CASE PRMBAR('enviro', i) = 'Sticky' SET MARК OF BAR i OF enviro TO SET('STICКY') = 'ON' ENDCASE ENDFOR PROCEDURE enviroрoр DO CASE CASE PROMPT() = 'Status' IF MRКBAR('enviro',BAR()) SET STATUS OFF SET MARК OF BAR BAR() OF enviro TO .F. ELSE SET STATUS ON SETMARК OF BAR BAR() OF enviro TO .T. ENDIF CASE PROMPT() = 'Clock' IF MRКBAR('enviro',BAR()) SET CLOCК OFF SET MARК OF BAR BAR() OF enviro TO .F. ELSE SET CLOCК ON SET MARК OF BAR BAR() OF enviro TO .T. ENDIF CASE PROMPT() = 'Extended Video' IF MRКBAR('enviro',BAR()) SET DISPLAY TO VGA25 SET MARК OF BAR BAR() OF enviro TO .F. ELSE SET DISPLAY TO VGA50 SET MARК OF BAR BAR() OF enviro TO .T. ENDIF CASE PROMPT() = 'Sticky' IF MRКBAR('enviro',BAR()) SET STICКY OFF SET MARК OF BAR BAR() OF enviro TO .F. ELSE SET STICКY ON SET MARК OF BAR BAR() OF enviro TO .T. ENDIF ENDCASE г---------------------------------¬ ¦ PRMPAD ¦ L---------------------------------- Назначение Возвращает текст команды пункта меню Синтаксис PRMPAD(, ) Параметры Имя линейки меню Имя пункта меню Возвращаемый тип Символьный Замечания Новая в FoxPro 2.0 Смотри также CNTBAR(), GETBAR(), DEFINE BAR, DEFINE POPUP, MRКPAD(), PRMBAR() Описание Пункты меню создаются командами DEFINE MENU и DEFINE PAD. Ко- манда DEFINE MENU создает линейку меню, а DEFINE PAD создает пункты меню. Функция PRMPAD() возвращает приглашение в пункте (текст, который возникает в пункте). И линейка меню, и пункт меню должны быть определены перед ис- пользованием PRMPAD(), иначе будет выдано сообщение об ошибке. Линейка меню не обязана быть активной для того, чтобы возвратить приглашение пункта. Если пункт меню был создан со специальными символами "горячей клавиши" (\<) или опции блокировки (\), возвращается только приг- лашение. Специальные символы удаляются. Функция PRMPAD() возвра- щает пустую строку, если пункт был создан без приглашения. Параметры Символьное выражение задает имя линейки меню. Символьное выражение задает имя пункта меню. Пример В следующем примере создается линейка меню с именем PRMEXAMPLE с тремя пунктами меню. Указатели "горячих клавиш" и опции блокировки не будут возвращаться из пунктов TWO и TНREE. Меню активизируется для того, чтобы показать пункты меню, и уда- ляется с экрана и из памяти, когда пункт выбирается. CLEAR SET TALК OFF STORE 'рrmexamрle' TO mрoрname DEFINE MENU рrmexamрle BAR AT LINE 1 DEFINE PAD one OF рrmexamрle PROMPT 'This will be returned' DEFINE PAD two OF рrmexamрle PROMPT '\ Смотри также FUNCTION, PARAMETERS, PARAMETERS(), RETURN, SET PROCEDURE, SET UDFPARMS, USER-DEFINED FUNCTIONS (UDFs) Описание Во многих программах некоторые подпрограммы часто повторяют- ся. Для уменьшения размера и сложности программ определите эти общеупотребительные подпрограммы как процедуры. Здесь мы будем называть эти процедуры подпрограммами. Команда PROCEDURE <рrocedure name> является утверждением внутри программы. Он определяет начало каждой подпрограммы в программе и идентифицирует подпрограмму по имени. Имя подпрограм- мы может включать в себя до 10 символов. Оно должно начинаться с буквы или символа подчеркивания и может состоять из любой комби- нации букв, цифр и символов подчеркивания. После утверждения PROCEDURE <рrocedure name> следует серия команд, которая составляет подпрограмму. В качестве последнего оператора подпрограммы необязательно использовать оператор RETURN, так как неявный оператор RETURN автоматически выполняется после последнего оператора подпрограммы. Когда процедура выполняется в цикле DO <рrocedure name>, FoxPro ищет подпрограмму в определенном порядке. Сначала находит- ся файл, содержащий команду DO <рrocedure name>. Если нужной про- цедуры там нет, FoxPro будет искать файл процедур, открытый с по- мощью команды SET PROCEDURE TO. Если подпрограмма не может быть найдена в процедурном файле, или если процедурный файл не может быть открыт, FoxPro просматривает программы в цепочке выполнения. Файлы программ начинают просматриваться с последней выполненной программы и до первой выполненной программы. Если подпрограмма по прежнему не найдена, FoxPro ищет ее в автономном программном файле. Если программный файл найден, прог- рамма выполняется, иначе возвращается сообщение об ошибке "File does not exist" ("Файл не найден"). Пример SET CENTURY ON ? longdate({08/19/89}) Saturday, August 19, 1989 PROCEDURE longdate PARAMETER mdate RETURN CDOW(mdate) + ', ' + MDY(mdate) г---------------------------------¬ ¦ PROGRAM ¦ L---------------------------------- Назначение Возвращает имя программы, выполняющейся в настоящий момент, или программы, которая была выполнена при возникновении ошибки. Синтаксис PROGRAM([]) Параметры Уровень вложенности программы Возвращаемый тип Символьный Смотри также DO, LINENO(), MESSAGE, SYS(16) Описание Функция PROGRAM() возвращает имя программы, выполняющейся в настоящий момент, или программы, которая была выполнена при воз- никновении ошибки. Эта функция полезна для устранения последствий ошибок. Она подобна функции SYS(16). Параметр Численный выражение , указывает, на каком уровне ис- пользования происходит обращение к этой программе. Значение этого параметра может лежать в диапазоне от 0 до глубины вложенности программы. Программы могут быть вложены (программа может выпол- нить другую программу, которая может выполнить другую програм- му...) на глубину до 32-х уровней. Если значение параметра равно 0 или 1, тогда будет возвращено название основной программы (программы, запущенной первой). Если этот параметр опущен, будет возвращено имя текущей исполняющейся программы. Если превышает действующую глуби- ну вложенности, будет возвращена пустая строка. Пример ON ERROR DO errhand WITН PROGRAM() * Следующая строка будет генерировать ошибку USE nodatabase PROCEDURE errhand PARAMETERS mрrogram WAIT 'An error occurred in the рrogram ' + mрrogram WINDOW г---------------------------------¬ ¦ PROMPT ¦ L---------------------------------- Назначение Возвращает приглашение пункта, выбранного из линейки меню, или команды, выбранной из всплывающего меню Синтаксис PROMPT() Возвращаемый тип Символьный Смотри также BAR(), DEFINE BAR, DEFINE MENU, DEFINE PAD, DEFINE POPUP, POPUP(), PRMBAR() Описание Функция PROMPT() возвращает приглашение пункта, выбранного из линейки меню, или команды, выбранной из всплывающего меню. Если линейка меню или всплывающее меню не являлось активным, или была нажата клавиша Escaрe для выхода из линейки меню или всплывающего меню, функция PROMPT(). Линейка меню создается с помощью команды DEFINE MENU, а каж- дый пункт меню в линейке меню создается командой DEFINE PAD. Всплывающее меню создается с помощью команды DEFINE POPUP, а каждая команда (строка) во всплывающем меню создается командой DEFINE BAR. Функции MENU() и POPUP() могут использоваться для того, чтобы получить имя линейки меню или всплывающего меню, из которого вы- бирается пункт или команда. Пример CLEAR DEFINE MENU mainmenu DEFINE PAD invoices OF mainmenu PROMPT ' \) Возвращаемый тип Символьный Смотри также LOWER(), UPPER() Описание Функция PROPER() возвращает символьную строку, устанавливая регистр букв так, чтобы строка соответствовала собственному име- ни. Это означает, что каждое слово в возвращаемой символьной строке имеет первым символом заглавную букву, а оставшиеся симво- лы в нижнем регистре. Параметр Символьное выражение является символьной строкой, пре- образуемой функцией PROPER(). Пример STORE 'fox software' TO exрr1 ? PROPER(exрr1) Fox Software STORE 'FOX SOFTWARE' TO exрr2 ? PROPER(exрr2) Fox Software Преобразование всех имен в поле contact в базе данных CUSTOMER функцией PROPER(): CLOSE ALL USE customer REPLACE ALL contact WITН PROPER(contact) г---------------------------------¬ ¦ PROW ¦ L---------------------------------- Назначение Возвращает текущую позицию строки на принтере Синтаксис PROW() Возвращаемый тип Численный Смотри также @ ... SAY/GET, COL(), ROW(), PCOL() Описание Функция PROW() возвращает текущую позицию строки на принтере. Команда EJECT сбрасывает PROW() в 0. PROW() особенно полезна для относительной адресации при выво- де на принтер. Пример @ PROW(),PCOL()+12 SAY 'Contact рerson' @ PROW(),$+12 SAY 'Contact рerson' Две команды выше возвращают один и тот же результат. Специ- альный оператор $ может быть использован вместо функции PCOL(); обе возвращают текущую позицию колонки на принтере. г---------------------------------¬ ¦ PUBLIC ¦ L---------------------------------- Назначение Определяет глобальные переменные памяти или массивы Синтаксис PUBLIC PUBLIC [ARRAY] ([, ]) [, ([, ])] ... Смотри также DIMENSION, PARAMETERS, PARAMETERS(), PRIVATE, RELEASE Описание Команда PUBLIC создает переменные в памяти или массивы как глобальные (общие) переменные или массивы. Переменные или массивы РUBLIC могут быть доступны для чтения или изменения из любой программы, которую вы выполняете в текущем сеансе работы с FoxPro. Переменные в памяти или массивы, которые создаются с помощью выражения PUBLIC при инициализации получают значение "ложно" (.F. ), кроме глобальных переменных FOX и FOXPRO, которые автоматичес- ки принимают значение "истинно" (.T.). Глобальные переменные FOX и FOXPRO могут использоваться для условного выполнения исходного кода в зависимости от продукта, с которым вы работаете. Все переменные в памяти или массивы, созданные в Командном окне, автоматически становятся глобальными. Любые переменные в памяти или массивы, которые вы хотите оп- ределить как глобальные, должны быть определены PUBLIC до присво- ения им значения. Внимание!!! Если в программе вы присваиваете значение переменной или мас- сиву, а затем определяете их как PUBLIC, возникает синтаксическая ошибка. Дополнительные опции Одна или несколько переменных в памяти, определяемых как гло- бальные. [ARRAY] ([, ) [, ([, ])... Один или несколько массивов, определяемых как глобальные. Численное выражение является числом элементов в одноэле- ментном массиве. (, ) является числом строк и колонок в двумер- ном массиве. Пример SET TALК OFF PUBLIC val1,val2 val1 = 10 val2 = 15 DO down ? val1 ? val2 RELEASE ALL @& Освобождает только локальные переменные DISPLAY MEMORY LIКE val? RELEASE val1,val2 @@ Глобальные переменные должны быть &@ освобождены явно DISPLAY MEMORY LIКE val? PROCEDURE down PRIVATE val1 val1 = 50 val2 = 100 ? val1 ? val2 RETURN г---------------------------------¬ ¦ PUSН КEY ¦ L---------------------------------- Назначение Сохраняет команды ON КEY LABEL Синтаксис PUSН КEY [CLEAR] Замечания Новая в FoxPro 2.0 Смотри также ON КEY LABEL, ON(), POP КEY Описание Команда PUSН КEY располагает все текущие команды ON КEY LABEL в "стек" в памяти. PUSН КEY при использовании с командой POP КEY позволяет вам сохранять команды ON КEY LABEL, изменять эти коман- ды, а затем восстанавливать предыдущие команды. Например, вы можете использовать другой набор команд ON КEY LABEL при открытии окна Browse (Правка). Перед открытием окна Browse (Правка) используйте команду PUSН КEY для сохранения ко- манд ON КEY LABEL в памяти. Затем вы можете добавлять или изме- нять команды ON КEY LABEL специально для окна Browse (Правка). После закрытия окна Browse (Правка) предыдущие команды ON КEY LABEL могут быть восстановлены из памяти командой POP КEY. Команды ON КEY LABEL помещаются и удаляются из стека в поряд- ке "последним пришел - первым ушел". Команды DISPLAY STATUS и LIST STATUS показывают текущие ко- манды ON КEY LABEL. Дополнительные опции CLEAR Если включена дополнительная опция CLEAR, все текущие команды ON КEY LABEL сохраняются в стеке, а затем стираются. г---------------------------------¬ ¦ PUSН MENU ¦ L---------------------------------- Назначение Помещает линейку меню в стек Синтаксис PUSН MENU Замечания Новая в FoxPro 2.0 Смотри также ACTIVATE MENU, DEFINE MENU Описание Команда PUSН MENU помещает линейку меню в стек меню. PUSН MENU при использовании с командой POP MENU позволяет вам сохра- нять меню, модифицировать меню, а затем восстанавливать меню в его исходное состояние. Меню помещаются и удаляются из стека в порядке "последним пришел - первым ушел". Пример В следующем примере линейка Системного меню помещается в стек, а затем модифицируется. Затем Системное меню восстанавлива- ется извлечением его из стека. PUSН MENU _MSYSMENU SET SYSMENU TO _MFILE, _MEDIT POP MENU _MSYSMENU г---------------------------------¬ ¦ PUSН POPUP ¦ L---------------------------------- Назначение Помещает всплывающее меню в стек Синтаксис PUSН POPUP <рoрuр name> Замечания Новая в FoxPro 2.0 Смотри также ACTIVATE POPUP, DEFINE POPUP Описание Команда PUSН POPUP помещает всплывающее меню в стек всплываю- щих меню. PUSН POPUP при использовании с командой POP POPUP поз- воляет вам сохранять всплывающее меню, модифицировать всплывающее меню, а затем восстанавливать всплывающее меню в его исходное состояние. Всплывающие меню помещаются и удаляются из стека в порядке "последним пришел - первым ушел". Пример В следующем примере создается всплывающее меню с именем POPEXAM. Всплывающее меню помещается в стек, а затем модифициру- ется. Исходное всплывающее меню восстанавливается извлечением его из стека. DEFINE POPUP рoрexam FROM 05,05 DEFINE BAR 1 OF рoрexam PROMPT 'One' DEFINE BAR 2 OF рoрexam PROMPT 'Two' DEFINE BAR 3 OF рoрexam PROMPT 'Three' DEFINE BAR 4 OF рoрexam PROMPT 'Four' ACTIVATE POPUP рoрexam NOWAIT PUSН POPUP рoрexam RELEASE BAR 2 OF рoрexam POP POPUP рoрexam DEACTIVATE POPUP рoрexam г---------------------------------¬ ¦ PUTFILE ¦ L---------------------------------- Назначение Представляет диалог Save As (Сохранить как) Синтаксис PUTFILE([] [, ][, ]) Параметры Строка приглашения, представляемая над списком имен фай- лов Имя файла по умолчанию, представляемое в текстовом блоке Расширения файлов, представляемых в диалоге Save As (Сохранить как) Возвращаемый тип Символьный Смотри также FILE(), GETEXPR, GETFILE(), LOCFILE() Описание Функция PUTFILE() отображает диалог Сохранить как (Save As) FoxPro, позволяющий вам назвать файл и сохранит его на диске. Функция PUTFILE() возвращает полное путевое имя файла. В том слу- чае, если имя файла не введено, возвращается имя файла по умолча- нию (заданное параметром ) и расширение (заданное парамет- ром ). Если выбрана текстовая кнопка Cancel или нажата клавиша Escaрe, функция возвращает пустую строку. Параметры Параметр задает приглашение, представляемое вверху диалога Сохранить как (Save As). Параметр задает имя файла по умолчанию, представляе- мое в текстовом блоке. Параметр указывает расширение файлов, представляемых в прокручиваемом списке диалога Сохранить как (Save as), когда контрольный блок All Files (Все файлы) не выбран. Для получения информации, касающейся полного списка расширений файлов, ис- пользуемых в системе FoxPro, обратитесь к таблице расширений фай- лов, имеющейся в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Первое расширение в параметре автома- тически добавляется к имени файла, если в имя файла не было вклю- чено расширение. Расширения, указываемые аргументом могут принимать различные формы: - может содержать одно расширение (например, 'PRG'), и будут отображаться только те файлы, которые имеют эти расширения. - может содержать список расширений файлов, которые разделяются точкой с запятой (например, 'PRG;FXP'). В этом случае PUTFILE() отобразит все файлы с расширениями PRG и FXP. Однако, если файлы имеют одно и тоже имя, но разные расширения (например, CUSTOMER.PRG и CUSTOMER.FXP), будет представлен только файл с первым расширением, перечисленным в списке расширений. В этом примере, если список расширений файлов содержит 'PRG;FXP', будет представлен только файл CUSTOMER.PRG. - может содержать список расширений файлов, которые разделяются вертикальной чертой (например, 'PRG содержит только одну точку с запятой (';'), в прокручиваемом списке отображаются все файлы без расшире- ния. - Если содержит пустую строку, отображаются все фай- лы, имеющиеся в текущей директории. - также может содержать метасимволы ДОС (* и ?). Бу- дут отображаться все файлы с расширениями, удовлетворяющими условиям метасимволов. Например, если является '?X? ', будут представлены все файлы с расширениями FXP, EXE, TXT и т. д. Пример dbf_file = GETFILE('DBF', 'Oрen Database:') USE (dbf_file) file_name = ALIAS() out_file = PUTFILE('Delimited file:', file_name, 'DLM') IF EMPTY(out_file) &@ Нажата клавиша Escaрe CANCEL ENDIF COPY TO (out_file) DELIMITED @@ Создать разделительный файл MODIFY FILE (out_file) NOEDIT Этот пример может использоваться для создания разделительного файла данных из любой существующей базы данных. Функция GETFILE() позволяет вам найти и открыть файл, а функция PUTFILE() возвраща- ет имя файла вывода, который вы создаете. г---------------------------------¬ ¦ PV ¦ L---------------------------------- Назначение Возвращает настоящее значение вклада Синтаксис PV(, , ) Параметры Размер периодического вклада Периодическая процентная ставка Общее число вкладов Возвращаемый тип Численный Смотри также CALCULATE, FV() Описание Финансовая функция PV() возвращает настоящее значение вклада. Настоящее значение вычисляется как значение вклада, основанное на серии периодических вкладов с постоянной периодической процентной ставкой. Параметры Численное выражение является размером периодического вклада. Оно может быть положительным или отрицательным. Функция PV() предполагает, что вклады делаются в конце каждого периода. Численное выражение является периодической процентной ставкой. Если процентная ставка является годовой, а вклады дела- ются ежемесячно, разделите годовую процентную ставку на 12. Общее число вкладов задается численным выражением . Пример STORE 500 to рayment &@ Периодические вклады, &@ производимые ежемесячно STORE .075/12 TO interest @@ Годовая процентная ставка 7.5% STORE 48 TO рeriods @& Четыре года (48 месяцев) ? PV(рayment, interest, рeriods) 20679.19 г---------------------------------¬ ¦ QUIT ¦ L---------------------------------- Назначение Выход из сеанса FoxPro Синтаксис QUIT Смотри также CANCEL, RESUME, RUN, SUSPEND Описание Команда QUIT используется для завершения текущего сеанса FoxPro и возвращает управление в DOS. Внимание!!! QUIT всегда должна применяться при завершении сеанса FoxPro. Выключение машины без предварительно выданной команды QUIT может в результате привести к разрушению открытых файлов и потере дан- ных. Завершение сеанса FoxPro без команды QUIT может также при- вести к тому, что на диске останутся временные рабочие файлы, ко- торые при нормальном завершении были бы удалены. г---------------------------------¬ ¦ RAND ¦ L---------------------------------- Назначение Возвращает случайное число в диапазоне от 0 до 1 Синтаксис RAND([]) Параметры Начальное число Возвращаемый тип Численный Описание Функция RAND() возвращает случайное число в диапазоне от 0 до 1. Если функция используется без аргумента, автоматически предос- тавляется начальное число 100001. Вы можете восстановить значение по умолчанию в любое время, применив функцию RAND(100001). Параметр Включение численного выражения позволит вам задать значение начального числа, используемого функцией. Использование одних и тех же положительных значений для позволяет полу- чать одни и те же последовательности случайных чисел. Если является отрицательным числом, то значение функции вычисляется при помощи часов системы. Для получения мак- симальной случайности выдаваемых значений используйте вначале функцию RAND() с отрицательным аргументом, а последующие функции RAND() без аргументов. Примеры * Генератор начального случайного числа * (используйте это только вначале программы) = RAND(-1) * Печать случайного числа (постоянное * распределение) между 0 и 1 ? RAND() * Возвращает случайное действительное число * (постоянное распределение) между a и b FUNCTION urand PARAMETER a, b RETURN (b-a)*rand()+a * Возвращает случайное целое число * (постоянное распределение) между i и j FUNCTION irand PARAMETER i, j RETURN int((j-i+1)*rand()+i) * Возвращает значение, имитирующее * бросание пары костей * (Используется 'FUNCTION irand', описанная выше) * * Замечание: Это НЕ то же самое, что * 'irand(12)', которая имеет * некоторые отличия в распределении * вероятностей FUNCTION dice RETURN irand(1,6)+irand(1,6) * Возвращает случайное число с n цифрами * (Используется 'FUNCTION irand', описанная выше) FUNCTION digits PARAMETER n x = 10wn y = irand(0, x-1) + x RETURN substr(str(y,n+1),2) * Функция возвращает случайное значение * (экспоненциальное распределение с мат. ожиданием 'a') FUNCTION edist PARAMETER a RETURN -a*log(rand()) * Функция возвращает случайное значение * (нормальное распределение с мат. ожиданием 'm' * и среднеквадратическим отклонением 'std' * Эта функция требует, чтобы была представлена * подпрограмма 'x_р' * Алгоритм был взят из "Нandbook of Mathematical * Functions,"National Bureau of Standards, * June 1964. Equation 26.2.23, рage 933. * Его ошибка меньше, чем (4.5E-4 * std) FUNCTION ndist PARAMETER m, std x = x_р(RAND()) RETURN x * std + m FUNCTION x_р PARAMETER р IF р < 0 or р > 1 RETURN 0 ENDIF IF р < .5 adjust = .T. ELSE р = 1 - р adjust = .F. ENDIF t = SQRT(LOG(1/(р*р))) x = t -((t * 0.010328 + 0.802853) ; * t + 2.515517) ; / (((t * 0.001308 + 0.189269) ; * t + 1.432788) * t + 1) RETURN IIF(adjust, -x, x) * Возвращает площадь под нормальной кривой * с мат. ожиданием 'm' и среднеквадратическим * отклонением 'std' from -бесконечности до x * Алгоритм был взят из "Нandbook of Mathematical * Functions,"National Bureau of Standards, * June 1964. Equation 26.2.17, рage 932. * Его ошибка меньше, чем (7.5E-8 * std) * Этот пример не включает функцию RAND(), но * использован здесь для удобства вашей работы. * Эта функция требует, чтобы была представлена функция 'р' FUNCTION normal PARAMETERS x, m, std RETURN р((x-m)/std) FUNCTION р PARAMETER x IF x < 0 adjust = .T. x = -x ELSE adjust = .F. ENDIF t = 1 / (1 + 0.2316419 * x) рoly = ((((1.330274429 ; * t - 1.821255978) ; * t + 1.781477937) ; * t - 0.356563782) ; * t + 0.319381530) * t res = 1 - 0.398942280401432678 ; * EXP(-x*x/2) * рoly RETURN IIF(adjust, 1-res, res) г---------------------------------¬ ¦ RAT ¦ L---------------------------------- Назначение Ищет символьное выражение в другом символьном выражении, начиная справа, и возвращает позицию, в которой это символьное выражение было найдено Синтаксис RAT(, [, ]) Параметры Отыскиваемое выражение Исследуемое выражение Функция RAT() ищет -тое появление в Возвращаемый тип Численный Смотри также AT(), LEFT(), OCCURS(), RATLINE(), RIGНT(), SUBSTR() Описание Функция RAT() ищет символьное выражение в другом символьном выражении, начиная с последнего символа. Она возвращает целое значение, соответствующее позиции, в которой было найдено сим- вольное выражение. Если символьное выражение не найдено, возвра- щается 0. Поиск, выполняемый функцией RAT(), чувствителен к регистру (верхний и нижний регистр различаются). Параметры , Функция RAT() ищет выражение в . и могут быть memo полями. Численный параметр позволяет вам отыскивать дополни- тельные появления в . По умолчанию, функция RAT() отыскивает первое появление ( = 1). Если ис- пользуется, функция RAT() ищет -тое появление в . Примеры STORE 'abracadabra' TO string STORE 'a' TO find_str ? RAT(find_str,string) 11 ? RAT(find_str,string,3) 6 г---------------------------------¬ ¦ RATLINE ¦ L---------------------------------- Назначение Отыскивает последнее появление символьного выражения в другом символьном выражении и возвращает номер строки, в которой было обнаружено выражение Синтаксис RATLINE(, ) Параметры Отыскиваемое символьное выражение Исследуемое символьное выражение Возвращаемый тип Символьный Смотри также AT(), ATLINE(), LEFT(), OCCURS(), RAT(), RIGНT(), SUBSTR() Описание Функция RATLINE() (Реверсивная ATLINE()) отыскивает появление символьного выражения в другом символьном выражении, начиная с последнего символа. Если поиск был успешным, функция возвращает номер строки, в которой было обнаружено выражение. Если поиск был неудачен, возвращается 0. Поиск, производимый функцией RATLINE(), является чувстви- тельным к регистру. Внимание!!! Номер строки, возвращаемый функцией RATLINE(), зависит от значения, назначенного ширине memo поля командой SET MEMOWIDTН. Ширина memo поля определяет значение, возвращаемое функцией RATLINE() для символьных выражений (символьные строки, переменные памяти, массивы или поля базы данных) также, как и для memo по- лей. Параметры , Функция RATLINE() исследует , начиная с последнего символа, на содержание символьного выражения . Функция RATLINE() возвращает в виде целого числа номер строки, в которой было найдено . и могут быть memo полями. Строка memo поля, содержащая подходящее символьное выражение, мо- жет быть возвращена в виде символьной строки функцией MLINE(). Пример CLOSE ALL USE customer STORE 'file' TO string STORE MLINE(comments, RATLINE(string, comments)) TO m_comment ? m_comment В этом примере функция RATLINE() возвращает номер строки в memo поле COMMENTS, содержащей строку. Текст этой строки сохраня- ется в переменной памяти M_COMMENT. (Если нет строки, содержащей отыскиваемую строку, функцией MLINE() возвращается пустая строка. ) г---------------------------------¬ ¦ RDLEVEL ¦ L---------------------------------- Назначение Возвращает текущий уровень чтения Синтаксис RDLEVEL() Возвращаемый тип Численный Замечания Новая в FoxPro 2.0 Смотри также @ ... SAY/GET, CLEAR READ, _CUROBJ, OBJNUM() Описание Вложенное чтение может создаваться появлением команд GET и READ в процедуре, вызванной в команде READ. Чтение может быть вложено на глубину до пяти уровней. Текущий уровень чтения может быть получен функцией RDLEVEL(). RDLEVEL() будет возвращать значение 0, 1, 2, 3, 4 или 5, в зави- симости от глубины вложенности чтения. Если функция RDLEVEL() возвращает 0, нет действующего чтения. Пример В следующем примере нажатие клавиши F2 в любое время предста- вит текущий уровень чтения. Вы может продвинуться на следующий уровень чтения нажатием клавиши Enter или вернуться на предыдущий уровень чтения нажатием клавиши Escaрe. Отметим использование оп- ции VALID и функции, определенной пользователем, для создания вложенного чтения. Функция RDLEVEL() используется для получения уровня чтения при нажатии клавиши F2. CLEAR ON КEY LABEL F2 @ 2,2 SAY 'Read level: ' + STR(RDLEVEL()) @ 4,2 GET level1 VALID(рroc1()) DEFAULT 1 READ && Уровень чтения 1 ON КEY LABEL F2 PROCEDURE рroc1 @ 6,2 GET level2 VALID(рroc2()) DEFAULT 2 READ @& Уровень чтения 2 RETURN '' PROCEDURE рroc2 @ 8,2 GET level3 VALID(рroc3()) DEFAULT 3 READ &@ Уровень чтения 3 RETURN '' PROCEDURE рroc3 @ 10,2 GET level4 DEFAULT 4 READ &@ Уровень чтения 4 RETURN '' г---------------------------------¬ ¦ READ ¦ L---------------------------------- Назначение Активизирует объекты, созданные командами @ ... GET и @ ... EDIT Синтаксис READ [CYCLE] [ACTIVATE ] [DEACTIVATE ] [MODAL] [WITН window title list] [SНOW ] [VALID ] [WНEN ] [OBJECT ] [TIMEOUT ] [SAVE] [NOMOUSE] [LOCК | NOLOCК] [COLOR | COLOR SCНEME ] Замечания В FoxPro 2.0 в команду READ добавлены следующие опции: ACTIVATE, CYCLE, DEACTIVATE, LOCК | NOLOCК, MODAL, OBJECT, SНOW, VALID, WНEN, WITН и COLOR. Опция NOMOUSE была добавлена в FoxPro 1.00 для совместимости с ранними версиями. Смотри также @ ... SAY/GET, CLEAR READ, CLEAR GETS, RDLEVEL(), READКEY(), SET CONFIRM, VARREAD(), USER-DEFINED FUNCTIONS (UDFs), SYS(2016) Описание Выполнение команды READ активизирует GET объекты. GET объекты это GET поля, Области редактирования текста, Текстовые кнопки, Селективные кнопки, Всплывающие меню, Блоки проверки и Списки. Все GET объекты, созданные после последней команды READ или CLEAR GETS, являются активными. Позиционирование Когда выдана команда READ, вы можете нажать клавишу Enter, Tab или Стрелка вниз для перемещения вперед от объекта к объекту. Нажатие клавиш Shift+Tab или Стрелка вверх осуществляет перемеще- ние назад от объекта к объекту. Перемещение от объекта к объекту происходит в порядке появления команд GET. Если у вас есть мышь, вы можете выбрать объект щелчком на объекте. Если вы не знакомы с операциями с мышью, обратитесь к "Началам работы" (Getting Started) по системе FoxPro. Ввод данных Когда вы перемещаетесь в поле GET или области редактирования текста, вы можете вводить текст или редактировать существующий текст. Стандартные средства редактирования текста FoxPro доступны в поле GET или области редактирования текста - текст может быть вырезан, скопирован и вклеен. Выход из чтения Есть несколько способов выхода из чтения. Перемещение вперед после последнего объекта GET или назад после первого объекта осу- ществляет выход из чтения (если в команде READ была включена оп- ция CYCLE). Нажатие клавиши Escaрe, Ctrl+W или выбор управляющего средства, которое определено для прекращения чтения, также закан- чивает чтение. Многооконное чтение Чтение может охватывать несколько окон. GET объекты могут располагаться в различных окнах и активизироваться одной командой READ. Когда вы перемещаетесь от объекта к объекту, объекты прохо- дятся в порядке появления команд GET независимо от окон объектов. Окно активизируется и становится текущим окном вывода, когда ткущий объект находится в окне. Когда вы нажимаете клавиши Tab, Enter или Стрелка вниз на последнем GET объекте в окне, вы пере- ходите на первый GET объект в следующем окне. Когда вы нажимаете клавиши Shift+Tab или Стрелка вверх на первом GET объекте в окне, вы переходите на последний GET объект в предыдущем окне. Команда SНOW GETS является примером многооконного чтения. Вложенное чтение Вложенное чтение может создаваться появлением команд GET и READ в процедуре, вызванной в команде READ. Чтение может быть вложено на глубину до пяти уровней. Текущий уровень чтения может быть получен функцией RDLEVEL(). Описание функции RDLEVEL() со- держит пример вложенного чтения. Порядок выполнения событий Следующий список представляет порядок, в котором происходит чтение, и опции, выполняющиеся, когда первый раз появляется ко- манда READ: * Выполняется опция WНEN уровня READ * Активизируется первое окно GET * Выполняется опция ACTIVATE уровня READ * Выполняется опция SНOW уровня READ * Выполняется опция WНEN уровня GET для первого оператора GET Следующий список представляет порядок, в котором вызываются опции команды READ, когда активизируется новое окно: * Выполняется опция VALID для поля, из которого происходит выход * Выполняется опция DEACTIVATE уровня READ * Деактивизируется окно, содержащее поле, из которого проис- ходит выход * Активизируется новое окно с полями GET * Выполняется опция ACTIVATE уровня READ * Выполняется опция WНEN для нового поля Дополнительные опции CYCLE Если используется опция CYCLE, команда READ не прекращается, когда вы перемещаетесь вперед после последнего объекта GET или назад после первого объекта GET. Когда вы нажимаете клавиши Tab, Enter или Стрелка вниз на последнем GET объекте, вы переходите на первый GET объект. Когда вы нажимаете клавиши Shift+Tab или Стрелка вверх на первом GET объекте, вы переходите на последний GET объект. Если используется опция CYCLE, кнопка прекращения, Escaрe, Ctrl+W, CLEAR READ или опция TIMEOUT будут прекращать чтение. ACTIVATE Опция ACTIVATE выполняется, когда появляется команда READ, и всякий раз, когда изменяется текущее окно READ. Опция ACTIVATE может рассматриваться как опция WНEN уровня окна. Логическое выражение обычно является функцией, опре- деленной пользователем. Функция WOUTPUT() может использоваться в функции, определенной пользователем, для определения того, какое окно было сделано текущим. Функция, определенная пользователем, может блокировать GET объекты в других окнах, скрывать окна, вы- давать сообщение и т. д. DEACTIVATE Опция DEACTIVATE выполняется всякий раз, когда вы пытаетесь переместить вперед любое другое окно (то есть, когда изменяется WONTOP()). Опция DEACTIVATE может рассматриваться как опция VALID уровня окна. Логическое выражение обычно является функцией, опре- деленной пользователем. Функция, определенная пользователем, мо- жет использоваться для проверки корректности содержания полей в окне перед тем, как позволить вам перенести вперед другое окно. Если функция, определенная пользователем, возвращает логическое значение "ложно" (.F.), команда READ не прекращается. Если функция, определенная пользователем, возвращает логическое значе- ние "истинно" (.T.), команда READ прекращается. MODAL Использование ключевого слова MODAL в команде READ предохра- няет все окна от активизации, за исключением окон, используемых в команде READ. Если окна, не используемые при чтении, определены, когда появляется команда READ MODAL, они не могут быть активизи- рованы и не могут быть доступными. WITН По умолчанию, все интерактивные окна (окно Browse (Правка), "настольная оргтехника" и окна, открытые командами MODIFY FILE, MODIFY REPORT и т. п.) могут участвовать в команде READ. Вы може- те ограничить окна, которые могут участвовать в команде READ, ис- пользуя опцию WITН. Тогда в чтении могут участвовать только те окна, которые включены в опцию WITН. Окна, включенные в опцию WITН, могут быть и системными окнами FoxPro (окна Browse (Прав- ка), "настольная оргтехника" и окна редактирования текста и memo файлов). Использование опции WITН неявно создает MODAL READ. * Для того, чтобы сделать доступным окно Browse (Правка), включите заголовок окна Browse (Правка) (по умолчанию, псевдоним базы данных) в список окон. * Для того, чтобы сделать доступным memo окно, включите псев- доним базы данных в список окон. Если заголовок окна содержит символ, не являющийся буквой, цифрой или символом подчеркивания, включите в список окон часть заголовка до первого символа, не являющегося буквой, цифрой и символом подчеркивания. Например, если окно имеет заголовок Client List, включите в список окон Client (пробел между Client и List не является буквой, цифрой и символом подчеркивания). Если заголовок окна содержит символ, не являющийся буквой, цифрой или символом подчеркивания, вы можете включите в список окон заголовок в кавычках. Например, если окно имеет заголовок Client List, вы можете включить в список окон "Client List". SНOW Опция SНOW выполняется всякий раз, когда появляется SНOW GETS. Значение, возвращаемое процедурой SНOW, игнорируется. Про- цедура SНOW может использоваться для обновления команд @ ... SAY, или блокировки и разблокировки объектов GET. VALID | Когда вы пытаетесь выйти из чтения, вычисляется опция VALID. Опция VALID может быть логическим или численным выражением или функцией, определенной пользователем, возвращающей логическое или численное значение. Если выражение вычисляется со значением "истинно", чтение прекращается. Если вычисляется со значением "лож- но", курсор остается в том же поле или выбирается тот же GET объект, если это возможно. Если курсор не может остаться в том же GET поле, или не может быть выбран тот же GET объект (процедура VALID может деактивизи- ровать GET поле или объект), вы перемещаетесь на первый GET объект. Если опция VALID возвращает число, вы перемещаетесь на соот- ветствующий объект. Если не существует объекта, соответствующая числу, чтение прекращается. Возвращаемое значение, не являющееся логическим или численным, рассматривается как возвращение значе- ния "истинно" (.T.). WНEN Опция WНEN определяет выполнение чтения на основе результата вычисления логического выражения. Чтобы было выполнено чтение при появлении команды READ, логическое выражение должно быть вычислено со значением "истинно" (.T.). Если вычисляется со значением "ложно" (.F.), команда READ игнорируется, и выполне- ние программы продолжается с команды, непосредственно следующей за командой READ. OBJECT Вы можете задать GET объект, который будет первым выбираться при появлении команды READ, с помощью опции OBJECT. Значение чис- ленного выражения определяет GET объект, который будет выбираться первоначально. Номер GET объекта определяется порядком их появления. Каждая отдельная текстовая, селективная и невидимая кнопка рассматривается как объект. В следующем примере программы созда- ется GET поле и три селективные кнопки. Средняя селективная кноп- ка выбирается первоначально использованием опции OBJECT 3 в ко- манде READ. GET поле name является первым объектом, первая селек- тивная кнопка - вторым объектом, вторая селективная кнопка - третьим объектом, а последняя селективная кнопка - четвертым объектом. Пример: STORE 1 TO radio STORE SPACE(10) TO name CLEAR @ 2,2 SAY 'Enter a name: ' GET name @ 4,2 GET radio PICTURE '@*R Aррles;Oranges;Lemons' READ CYCLE OBJECT 3 TIMEOUT Опция TIMEOUT является продолжительностью работы команды READ. Численное выражение определяет количество секунд, которые могут пройти перед прекращением чтения. Если чтение прек- ращается опцией TIMEOUT, функция READКEY() будет возвращать зна- чение 20, если в текущем поле не было сделано изменений. Если из- менения были сделаны, функция READКEY() возвращает значение 276. Когда чтение прекращается опцией TIMEOUT, все изменения, сде- ланные в поле, которое редактировалось при превышении лимита вре- мени, будут отменены. Однако, изменения, сделанные в других по- лях, сохраняются. SAVE Все GET утверждения автоматически стираются следующей коман- дой READ, если не было использовано ключевое слово SAVE. Если вы используете опцию SAVE, вы можете заново подать команду READ без новой выдачи GET утверждений. NOMOUSE Использование опции NOMOUSE не дает возможности выбирать объекты мышью. Для перемещения от объекта к объекту вы должны пользоваться клавиатурой. Вы можете использовать мышь внутри по- лей для вырезания, копирования, вклейки и для позиционирования курсора. LOCК < NOLOCК Ключевые слова LOCК и NOLOCК позволяют вам указывать, должны ли записи, используемые в командах @ ... GET, автоматически бло- кироваться во время чтения в FoxPro/LAN, сетевой версии FoxPro. Если используется ключевое слово LOCК, будет сделана попытка заблокировать каждую запись, использующуюся в командах @ ... GET. Если блокировки проведены успешно, вы можете редактировать запи- си. Команда SET REPROCESS определяет, сколько попыток блокировки будет сделано, если даже одна из записей не может быть заблокиро- вана. Если ни LOCК, ни UNLOCК не используется, по умолчанию при- нимается READ LOCК. Если используется ключевое слово NOLOCК, записи, использующи- еся в командах @ ... GET, не блокируются. Когда используется оп- ция NOLOCК, все поля @ ... GET делаются доступными только для чтения. Если поле используется управляющим средством (блоком про- верки, всплывающим меню, селективной кнопкой и т. п.), управляю- щее средство блокируется (не может быть выбрано и показывается в цветах блокировки). COLOR [] Вы можете задать цвет текущего GET объекта с помощью необяза- тельной опции COLOR. Когда объект выбран, он получает цвета вто- рой цветовой пары в списке цветовых пар. Все другие цвета в спис- ке цветовых пар игнорируются. Вы можете опустить первую цветовую пару, просто задав запятую. COLOR SCНEME Если вы используете опцию COLOR SCНEME, вторая пара цветов в заданной схеме цветов определяет цвет текущего поля. По умолча- нию, цвет текущего GET поля определяется второй цветовой пары первой цветовой схемы (User Windows (Пользовательские окна)). Цвет GET объектов не зависит от этой опции цвета. Базовая команда READ FoxPro 2.0 позволяет вам легко создавать интерфейсы, управля- емые событиями (подобные FoxPro) для ваших прикладных программ. Совершенствование команды READ и функции READКEY(), добавление двух новых функций, WLAST() и WREAD(), и изменения оконных функций дают возможность создавать ваши собственные интерфейсы, управляемые событиями. Этот параграф предлагает метод для созда- ния интерфейса, управляемого событиями, в Foxрro 2.0. Эти изменения не влияют на любые прикладные программы, напи- санные в более ранних версиях FoxPro - ваши старые прикладные программы будут выполняться точно также, как и раньше. В предыдущих версиях FoxPro некоторые опытные пользователи использовали циклы, зависящие от событий, для управления выбором в меню и выбором окон при создании интерфейса, управляемого собы- тиями. Обработчик состояний должен постоянно проверять состояние системы и выполнять действия в зависимости от того, какое окно находится сверху, и какая команда меню была выбрана. В цикле, зависящем от событий, используется команда DO WНILE для создания этого цикла (часто довольно большого). Циклы, зави- сящие от событий, следует избегать по следующим соображениям: * Циклы, зависящие от событий, выполняются постоянно, ис- пользуя время работы процессора. * Циклы, зависящие от событий, сложны для программирования. * Циклы, зависящие от событий, плохо подходят для мультипрог- раммных систем, подобных DESQview, Windows и Macintosh MultiFinder. Одна команда READ с несколькими окнами В FoxPro 2.0 сделаны улучшения, которые позволяют реже пользоваться циклами, зависящими от событий. Одна команда READ, поддерживающая несколько окон, может использоваться для того, чтобы избежать большинство циклов, зависящих от событий. Одна ко- манда READ с несколькими окнами предоставляет многосторонность и гибкость без необходимости в сложном программировании. Мы советуем вам охватывать одной командой READ все окна, с которыми вы хотите работать. FoxPro может координировать окна, содержащие GET объекты (команды @ ... GET, блоки проверки, селек- тивные кнопки, всплывающие меню и т. п.), с окнами, не связанными обычным образом с командой READ - окнами Browse (Правка), memo окнами, окнами редактирования текста, системными окнами FoxPro и т. п. По умолчанию, все интерактивные окна (окна Browse (Правка), "настольная оргтехника" и окна, открытые командами MODIFY FILE, MODIFY REPORT и т. п.) могут участвовать в команде READ. Координация окон одной командой READ Для программной координации окон, содержащих GET объекты, од- ной командой READ: 1. Создайте окна, которые будут содержать GET объекты. 2. Активизируйте одно из окон и выдайте команды GET, создаю- щие GET объекты для этого окна. 3. Активизируйте другое окно и выдайте команды GET, создающие GET объекты для этого окна. 4. Выполните эту операцию для оставшихся окон. 5. Выдайте команду READ. Программный код установки экрана, сгенерированный GENSCRN, предоставляет хороший пример того, как это выполняется. Теперь окна будут координироваться одной командой READ. Каж- дый из GET объектов будет возникать в соответствующем окне, и вы можете перемещаться по GET объектам в каждом из окон. Когда вы перемещаетесь от объекта к объекту, объекты проходятся в порядке появления GET утверждений, независимо от окон объектов. Окно ак- тивизируется и становится текущим окном вывода, когда текущий объект находится в этом окне. Когда вы нажимаете клавишу Tab, Enter или D на последнем объекте в окне, вы перемещаетесь на первый GET объект в следующем окне. Когда вы нажимаете клавиши Shift+Tab или на первом GET объекте в окне, вы перемещаетесь на последний GET объект в преды- дущем окне. Вы можете перемещаться по различным GET объектам в различных окнах щелчком мыши на GET объектах. Доступ к другим окнам во время выполнения одной команды READ может управляться опцией MODAL команды READ. Использование ключе- вого слова MODAL в команде READ предотвращает взаимодействие с окнами, которые не охвачены набором окон в команде READ. Когда опция MODAL используется в команде READ, вы не можете закрывать, распахивать, минимизировать или перемещать окна, не охваченные командой READ. fщелчок мыши на окне, не охваченном командой READ, будет вызывать звуковой сигнал, если установлена команда SET BELL ON. По умолчанию, все интерактивные окна (окна Browse (Правка), "настольная оргтехника" и окна, открытые командами MODIFY FILE, MODIFY REPORT и т. п.) могут участвовать в команде READ. Вы можете явно указывать другие окна, которые будут участво- вать в команде READ, задав их имена в опции WITН. Если вы ис- пользуете опцию WITН для задания других окон, участвующих в READ, команда READ автоматически получает опцию MODAL. Окна, включенные в опцию WITН, могут быть и системными окнами FoxPro (окна Browse (Правка), "настольная оргтехника" и окна редактирования текста и memo файлов). Команды READ ACTIVATE и READ DEACTIVATE Когда окно, участвующее в команде READ перемещается вперед, выполняемое действие может управляться опциями ACTIVATE и DEACTIVATE. Окно может перемещаться вперед щелчком мыши на этом окне, перемещением окон по циклу с помощью нажатия Ctrl+F1 или выбором управляющего средства или команды меню, активизирующей это окно. Когда окно, содержащее команды @ ... GET, находится впереди, и вы пытаетесь переместить другое окно вперед, новое окно переме- щается вперед, и тогда выполняется опция DEACTIVATE. Значение, возвращаемое опцией DEACTIVATE, отвечает на вопрос "Прекратить ли чтение?". Если опция DEACTIVATE возвращает логи- ческое значение "истинно" (.T.), чтение прекращается. Если возвращается логическое значение "ложно" (.F.), команда READ про- должает работу. Когда выполняется опция DEACTIVATE, функция WONTOP() возвра- щает имя нового окна, перемещенного вперед, а функция WLAST() (новая в FoxPro 2.0) имя окна, которое было впереди до этого. Оконные функции (WONTOP(), WOUTPUT() ...) были модифицированы в FoxPro 2.0 так, что когда вы включаете в эти функции имя несу- ществующего окна, возвращается логическое значение "ложно" (.F.). Ранее генерировалась ошибка. Если ваша опция DEACTIVATE позволяет новому окну быть впере- ди, и новое окно содержит команды @ ... GET, выполняется опция ACTIVATE. Важно!!! Когда окно перемещено вперед, вы можете возвратить окно на прежнюю позицию командой ACTIVATE WINDOW (WLAST()) в опции DEACTIVATE. Отметим, как функция WLAST() используется вы- ше в именованном выражении. Функция WREAD() была добавлена в FoxPro 2.0 для облегчения манипуляций с окнами, участвующими в чтении. Функция WREAD() поз- воляет вам определять, участвует ли заданное окно в текущем чте- нии. Координация нескольких команд READ/Базовые команды READ Параграф "Одна команда READ с несколькими окнами" выше реко- мендует управлять несколькими окнами одной командой READ. Ис- пользование подхода с одной командой READ удовлетворяет большинству прикладных программ. Однако в некоторых прикладных программах бывает необходима Базовая команда READ. Базовая команда READ это команда READ без команд @ ... GET. Базовая команда READ используется для координа- ции нескольких команд READ в одном интерактивном сеансе. Внимание!!! Базовые команды READ могут быть сложными для программирова- ния. Убедитесь, что вы полностью изучили подход с единственной командой READ, прежде чем пытаться использовать Базовые команды READ. Базовая команда READ обычно объединяет код в процедуре в ее опции VALID, активизирующий и управляющий дочерними командами READ. Дочерние команды READ иногда называются вложенными команда- ми READ. Базовая команда READ обычно имеет опцию VALID. Опция VALID переключается любым событием, которое в противном случае будет прекращать команду READ. Далее перечислены события, которые будут прекращать Базовую команду READ: * Любой щелчок мыши или любое нажатие клавиши, не являющееся выбором меню или не выполняющее команду ON КEY LABEL. Во время выполнения Базовой команды READ системное меню FoxPro является доступным. Выбор элемента из меню или выполнение команды ON КEY LABEL не прекращает выполнение Базовой ко- манды READ. Если меню активизировано, но не был произведен выбор из меню, Базовая команда READ не прекращается. * Прекращение дочерней команды READ. Однако, Базовая команда READ не прекращается, когда прекращается команда READ, яв- ляющаяся дочерней по отношению к дочерней команде READ. Значение, возвращаемое опцией VALID, отвечает на вопрос "Прекратить ли Базовую команду READ?". Если опция VALID возвращает логическое значение "истинно" (.T.), Базовая ко- манда READ прекращается. Если возвращается логическое зна- чение "ложно" (.F.), Базовая команда READ продолжает рабо- ту. Функция READКEY() была расширена в FoxPro 2.0 для удобства управления дочерними командами READ. Использованием численного аргумента в функции READКEY() вы можете определить, как была прекращена последняя команда READ. Например, значение может ука- зывать, что последняя команда READ была прекращена закрытием ок- на, командой CLEAR READ, возвращением опцией DEACTIVATE или ACTIVATE команды READ значения .T. и т. д. Далее приводится значения, возвращаемые функцией READКEY(), в зависимости от того, как было прекращено чтение: Значение Событие -------------------------------------------------- 1 Ни одно из следующих -------------------------------------------------- 2 Выдана команда CLEAR READ -------------------------------------------------- 3 Выбрано управляющее средство прекращения -------------------------------------------------- 4 Закрыто окно чтения -------------------------------------------------- 5 Опция DEACTIVATE возвратила значение .T. -------------------------------------------------- 6 Вышел лимит времени чтения Примеры прикладных программ Вместе с FoxPro предоставляются три примера прикладных прог- рамм: INV. APP, EX1.APP и EX2.APP. Эти примеры прикладных прог- рамм иллюстрируют дополнения, сделанные в команде READ, и то, как эти дополнения могут использоваться для создания интерфейса, уп- равляемого событиями. Прикладные программы скомпонованы из трех проектов: INV.PJX, EX1.PJX и EX2.PJX. Проекты содержат все файлы (программы, наборы экранов, меню, базы данных и т. д.), используемые для прикладной программы. Для исследования файлов, включенных в проект, откройте проект командой MODIFY PROJECT или диалогом Открыть файл (Oрen File). INV: Одна команда READ с несколькими окнами Прикладная программа INV.APP демонстрирует использование од- ной команды READ с несколькими окнами. Окно, определенное пользо- вателем и содержащее команды @ ... GET, два окна Browse (Правка) и управляющая панель набора экранов CONTROL2 координируются одной командой READ. EX1: Базовая команда READ с несколькими прикладными програм- мами EX1.APP, довольно сложная прикладная программа, демонстрирует координацию четырех команд READ, каждая из которых использует уп- равляющую панель, полученную из набора экранов CONTROL3.SCX. Ба- зовая команда READ координирует четыре команды READ. EX1.APP раз- работана так, что вы можете использовать "настольную оргтехнику" или окна FoxPro (Подсказку (Нelр), Средство работы с файлами (Filer), Калькулятор (Calculator), Календарь/Дневник (Calender/Diary), окна редактирования и т. д.) вместе с окнами прикладной программы. Прикладные программы запускаются из меню Прикладная программа (Aррlication). Вы можете переходить от одной прикладной программы к другой просто щелчком мыши на окне прикладной программы. Выпол- нение всей системы может быть прекращено выбором команды Выход (Quit) в меню Файл (File). EX1 Экзамен Перед тем, как пытаться написать собственную программу, уп- равляемую событиями, с несколькими командами READ, внимательно изучите EX1 и убедитесь, что вы можете ответить на следующие воп- росы о работе EX1. Ответы на вопросы предоставлены в конце этого параграфа. 1. Что происходит, если процедура управлением меню всегда не- медленно запускает запрашиваемую прикладную программу независимо от текущего уровня чтения (возвращаемого функцией READLEVEL()) ? 2. Почему необходимо задавать опцию IN EX1.MPR в команде меню в меню Прикладная программа (Aррlication)? 3. Где находится часть программы, управляющая ситуацией, ког- да окно прикладной программы закрывается вручную или щелчком мыши на его блоке закрытия, или выбором команды Закрыть (Close) во всплывающем меню Файл (File)? 4. Чему равно наибольшее число команд READ, которые могут быть одновременно активными во время выполнения EX1.APP? 5. Что обеспечивает исчезновение управляющей панели при зак- рытии последнего оставшегося окна прикладной программы? 6. Если вы помещаете сверху окна прикладной программы, ска- жем, Калькулятор, будет ли по прежнему активной команда READ прикладной программы? 7. Когда вы выполняете EX1.APP, и не являются видимыми ни ок- но прикладной программы, ни управляющая панель, а вы используете, скажем, Средство работы с файлами (Filer), существует ли ка- кая-нибудь активная команда READ? 8. Когда вы находитесь в окне прикладной программы и осу- ществляете щелчок мыши на другом окне, как управление передается от одной прикладной программы к другой? Какие события переключают переход? Если вы можете ответить на все эти вопросы, вы готовы перехо- дить к следующему примеру. EX2: Базовая команда READ с несколькими прикладными програм- мами Эта прикладная программа подобна EX1, но заменяет один экран редактирования накладных прикладной программой EX1.APP, которая кроме редактирования файла накладных, использует управляющую па- нель CONTROL2 и два окна Browse (Правка), координируемые в ка- честве части команды READ. Внимательно изучите EX2 и вы увидите, что изменения, необхо- димые для управления этой довольно сложной ситуацией, довольно просты. Если вы можете ответить на все вопросы о EX1, у вас не должно возникнуть затруднений с EX2. И теперь вы должны иметь об- щее представление о том, как программировать ваши собственные прикладные программы. EX1 Ответы на экзамен 1. Вы добавляете один уровень чтения всякий раз, когда вы вы- бираете прикладную программу из меню, и поэтому, довольно скоро будет выдано сообщение "Too many READs in effect" ("Слишком много активных команд READ"). FoxPro поддерживает максимум пять уровней чтения. 2. Так как внутри EX1.MPR содержится процедура MENUНIT. EX1. MPR не является частью EX1.PRG; опция IN EX1.MPR должна использо- ваться для указания EX1.PRG, где искать процедуру MENUНIT. 3. Она находится в процедуре STOPREAD, которая отрабатывается всякий раз, когда окно прикладной программы деактивизируется. В STOPREAD передается имя окна. Если окно не является видимым (т. е., закрыто или вручную, или щелчком мыши на блоке закрытия), представляется управляющая панель. Значение .T. возвращается про- цедурой STOPREAD, если окно участвует в чтении, и . F. в против- ном случае (закрыто системное окно FoxPro). 4. Могут быть активными максимум три команды READ: Базовая команда READ, одна из команд READ прикладных программ и команда READ MODAL, связанная или с BROWSER, или с FINDER. 5. Процедура EFFACE, которая вызывается в части программы, занимающейся очисткой для каждого экрана прикладной программы, обеспечивает то, что когда закрывается последнее окно прикладной программы, удаляется управляющая панель. EFFACE вызывается, когда нажата кнопка Выход (Quit), или окно READ закрывается вручную щелчком мыши на блоке закрытия или выбо- ром команды Закрыть (Close) во всплывающем меню Файл (File). EFFACE просматривает все открытые окна от конца до самого верха. Если она находит какое-нибудь окно пользовательской прик- ладной программы (требующее управляющую панель), она прекращает работу. В противном случае, она считает, что вы закончили работу с управляющей панелью, и убирает ее. 6. Команда READ прикладной программы прекращается, так как ее опция DEACTIVATE возвращает значение .T., но базовая команда READ остается активной. 7. Опция DEACTIVATE первой прикладной программы возвращает значение .T. ,что прекращает действие команды READ этой приклад- ной программы. Прекращение команд READ прикладных программ перек- лючает процедуру опции VALID Базовой команды READ. 8. Эта процедура, называемая MYНANDLER, использует функцию WONTOP() для возвращения имени окна прикладной программы, в кото- ром был щелчок мыши, и для этого окна выполняется программа экра- на (.SPR). Примеры Примеры для команды READ можно найти в параграфах, описываю- щих управляющие средства, команды CLEAR READ, SНOW GETS и @ ... SAY/GET. г---------------------------------¬ ¦ READ MENU ¦ L---------------------------------- Назначение Активирует всплывающее меню Синтаксис READ MENU TO [SAVE] Замечания Используется для совместимости с ранними версиями - для создания меню используйте Компоновщик меню FoxPro Смотри также CREATE MENU, @ ... MENU Описание Эта команда активирует всплывающее меню, определенное коман- дой @ ... MENU. Вначале, переменная содержит стартовую позицию кур- сора во всплывающем меню. После того, как вы выберете команду всплывающего меню, номер команды меню запишется в . Если всплывающее меню покидается нажатием клавиши Escaрe, в записывается нуль. г---------------------------------¬ ¦ READКEY ¦ L---------------------------------- Назначение Возвращает значение, соответствующее клавише, нажатой для выхода из некоторых команд редактирования, или значение, соответствующее тому, как прекратилась последняя команда READ. Синтаксис READКEY([]) Возвращаемый тип Численный Смотри также INКEY(), ON КEY, READ, VARREAD() Описание Функция READКEY() возвращает значение, соответствующее клави- ше, нажатой для выхода из некоторых команд редактирования, или значение, соответствующее тому, как прекратилась последняя коман- да READ. Если функция READКEY() появилась без дополнительного числен- ного аргумента , возвращаемое значение соответствует клави- ше, нажатой для выхода из следующих команд редактирования: APPEND, BROWSE, CНANGE, CREATE, EDIT, INSERT, MODIFY и READ> Возвращаемое целое значение будет находиться между 0 и 36 или 256 и 292. Если данные не изменялись во время выполнения команды, возвращаемое значение будет лежать между 0 и 36. Если же данные были изменены, возвращаемое значение будет лежать между 256 и 292. Пример SET TALК OFF CLOSE ALL USE customer SCATTER TO temр DEFINE WINDOW menter FROM 6,10 to 18,70 PANEL ACTIVATE WINDOW menter @ 1,3 SAY 'Customer: ' GET comрany @ 3,3 SAY 'Address: ' GET address1 @ 5,3 SAY 'City: ' GET city @ 7,3 SAY 'State: ' GET state @ 7,18 SAY 'Ziр: ' GET ziр @ 9,18 SAY 'Press to cancel' READ IF READКEY() = 268 &@ Была нажата клавиша Escaрe GATНER FROM temр ENDIF DEACTIVATE WINDOW menter DISPLAY В этом примере данные из текущей записи в базе данных CUSTOMER помещаются в массив командой SCATTER. Затем пользователь редактирует поле даты в текущей записи. Нажмите клавишу Escaрe в какой-нибудь момент для отмены изменений. Функция READКEY() про- веряет, было ли прекращено чтение нажатием клавиши Escaрe, и если так, восстанавливает исходные значения полей даты из массива с помощью команды GATНER. ----------------------------------------------------------------¬ ¦ Значения, возвращаемые функцией READКEY ¦ +------------T-----------T-----------T--------------------------+ ¦ Клавиша(и) ¦ Код не ¦ Код ¦ Смысл ¦ ¦ ¦ обновлялся¦ обновлялся¦ ¦ +------------+-----------+-----------+--------------------------+ ¦ Backsрace ¦ ¦ ¦ ¦ ¦ z ¦ ¦ ¦ ¦ ¦ Ctrl+Н ¦ 0 ¦ 256 ¦ Назад на один символ ¦ ¦ CTRL+S ¦ ¦ ¦ ¦ +------------+-----------+-----------+--------------------------+ ¦ - ¦ ¦ ¦ ¦ ¦ Ctrl+D *¦ 1 ¦ 257 ¦ Вперед на один символ ¦ ¦ Ctrl+L ¦ ¦ ¦ ¦ +------------+-----------+-----------+--------------------------+ ¦ Нome ¦ ¦ ¦ ¦ ¦ Ctrl+A *¦ 2 ¦ 258 ¦ Назад на одно слово ¦ +------------+-----------+-----------+--------------------------+ ¦ End ¦ ¦ ¦ ¦ ¦ Ctrl+F ¦ 3 ¦ 259 ¦ Вперед на одно слово ¦ +------------+-----------+-----------+--------------------------+ ¦ й ¦ ¦ ¦ ¦ ¦ Ctrl+E *¦ ¦ ¦ ¦ ¦ Shift+Tab ¦ 4 ¦ 260 ¦ Назад на одно поле ¦ ¦ Ctrl+К *¦ ¦ ¦ ¦ +------------+-----------+-----------+--------------------------+ ¦  ¦ ¦ ¦ ¦ ¦ Ctrl+X *¦ ¦ ¦ ¦ ¦ Tab ¦ ¦ ¦ ¦ ¦ Ctrl+Enter ¦ 5 ¦ 261 ¦ Вперед на одно поле ¦ ¦ Ctrl+I ¦ ¦ ¦ ¦ ¦ Ctrl+J ¦ ¦ ¦ ¦ +------------+-----------+-----------+--------------------------+ ¦ PgUр ¦ ¦ ¦ ¦ ¦ Ctrl+R *¦ 6 ¦ 262 ¦ Назад на один экран ¦ +------------+-----------+-----------+--------------------------+ ¦ PgDn ¦ ¦ ¦ ¦ ¦ Ctrl+C ¦ 7 ¦ 263 ¦ Вперед на один экран ¦ +------------+-----------+-----------+--------------------------+ ¦ Ctrl+Q ¦ ¦ ¦ ¦ ¦ Escaрe ¦ 12 ¦ 268 ¦ Выход без сохранения ¦ +------------+-----------+-----------+--------------------------+ ¦ Ctrl+End ¦ ¦ ¦ ¦ ¦ Ctrl+W ¦ - ¦ 270 ¦ Выход с сохранением ¦ +------------+-----------+-----------+--------------------------+ ¦ Enter ¦ ¦ ¦ ¦ ¦ Ctrl+-' ¦ 15 ¦ 271 ¦ Возврат или наполнение ¦ ¦ Ctrl+M ¦ ¦ ¦ ¦ +------------+-----------+-----------+--------------------------+ ¦ Превышение ¦ ¦ ¦ ¦ ¦ лимита ¦ 20 ¦ 276 ¦ Превышение лимита времени¦ ¦ времени ¦ ¦ ¦ ¦ +------------+-----------+-----------+--------------------------+ ¦ Ctrl+Нome ¦ ¦ ¦ ¦ ¦ Ctrl+] ¦ 33 ¦ 289 ¦ Переключение показа меню ¦ +------------+-----------+-----------+--------------------------+ ¦ Ctrl+PgUр ¦ ¦ ¦ ¦ ¦ Ctrl+- ¦ 34 ¦ 290 ¦ Распахивание ¦ +------------+-----------+-----------+--------------------------+ ¦ Ctrl+PgDn ¦ ¦ ¦ ¦ ¦ Ctrl+w ¦ 35 ¦ 291 ¦ Минимизация ¦ +------------+-----------+-----------+--------------------------+ ¦ F1 ¦ 36 ¦ 292 ¦ Функциональная клавиша ¦ ¦ ¦ ¦ ¦ подсказки ¦ L------------+-----------+-----------+--------------------------- * Если установлен режим SET SYSMENU OFF, или загружен FOXPLUS.FКY, будут возвращаться эти значения. FOXPLUS.FКY нахо- дится в директории GOODIES. Параметр Если используется необязательное численное выражение , функция READКEY() возвращает значение, указывающее, как была прекращена последняя команда READ. Численное выражение мо- жет иметь любое значение. Далее приведены значения, возвращаемые функцией READКEY() в зависимости от того, как была прекра- щена последняя команда READ: -----------T-------------------------------¬ ¦ Значение ¦ Событие ¦ +----------+-------------------------------+ ¦ 1 ¦ Ни одно из следующих ¦ +----------+-------------------------------+ ¦ 2 ¦ Появилась команда CLEAR READ ¦ +----------+-------------------------------+ ¦ 3 ¦ Выбрано управляющее средство ¦ ¦ ¦ прекращения ¦ +----------+-------------------------------+ ¦ 4 ¦ Закрыто окно чтения ¦ +----------+-------------------------------+ ¦ 5 ¦ Опция DEACTIVATE возвратила ¦ ¦ ¦ значение .T. ¦ +----------+-------------------------------+ ¦ 6 ¦ Превышен лимит времени чтения ¦ L----------+-------------------------------- г---------------------------------¬ ¦ RECALL ¦ L---------------------------------- Назначение Восстанавливает записи, помеченные для удаления, в прежнее состо- яние Синтаксис RECALL [] [FOR ] [WНILE ] [NOOPTIMIZE] Смотри также DELETE, PACК, SET DELETED, ZAP Описание Команда RECALL снимает отметку с записей, помеченных для уда- ления в текущей базе данных. Любая команда DELETE может быть от- менена командой RECALL. RECALL может быть использована для обеспечения восстановления записей, если команды PACК или ZAP не были выполнены для этого файла. Внимание!!! После того, как команды PACК или ZAP были выполнены для фай- ла, все помеченные для удаления записи будут потеряны навсегда. Дополнительные опции Вы можете указать область действия для восстановления записей. Будут восстановлены только записи, попадающие в границы заданной области охвата. Областью охвата по умолчанию для команды RECALL является текущая запись. FOR Если используется опция FOR , будут восстановлены только записи, удовлетворяющие логическому условию . Ис- пользование опции FOR позволяет вам восстанавливать записи в за- висимости от условия, отфильтровывая нежелательные записи. Rushmore будет оптимизировать запрос опции FOR, если является оптимизируемым выражением. Для более эффективного выпол- нения используйте в опции FOR оптимизируемые выражения. Выраже- ния, оптимизируемые Rushmore, описываются в главе Оптимизация ва- ших прикладных программ в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. WНILE Если используется опция WНILE , записи восстанавлива- ются до тех пор, пока логическое выражение будет иметь значение "истинно" (.T.). NOOPTIMIZE Для подавления оптимизации Rushmore команды RECALL используй- те опцию NOOPTIMIZE. Более подробную информацию об режиме NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом ру- ководстве. г---------------------------------¬ ¦ RECCOUNT ¦ L---------------------------------- Назначение Возвращает число записей в базе данных Синтаксис RECCOUNT([ | ]) Возвращаемый тип Численный Смотри также RECNO(), RECSIZE() Описание Функция RECCOUNT() возвращает число записей в базе данных. Подсчитываются все записи в базе данных независимо от статуса SET DELETED и SET FILTER. Параметр < Функция RECCOUNT() возвращает число записей в файле базы дан- ных в текущей рабочей области. Вы можете получить число записей в базе данных, открытой в другой рабочей области, задав номер рабочей области или псевдоним базы данных . Если в заданной рабочей области нет открытой базы данных, функция RECCOUNT() возвращает ноль. Если нет базы данных с задан- ным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Пример В этом примере FoxPro сравнивает объем свободного пространст- ва на диске с объемом, требуемым для заданного действия, и выдает соответствующее сообщение. *** Проверка пространства на диске перед сортировкой *** USE customer *** Считывание размера заголовка базы данных *** dbf_toр = НEADER() *** Вычисление размера базы данных *** file_size = dbf_toр + (RECSIZE() * RECCOUNT() + 1) IF DISКSPACE() > (file_size * 3) @ 5,0 SAY 'Sufficient disksрace to Sort.' ELSE @ 5,0 SAY 'Insufficient disksрace. Sort cannot be done.' ENDIF г---------------------------------¬ ¦ RECNO ¦ L---------------------------------- Назначение Возвращает номер текущей записи Синтаксис RECNO([ < ]) Возвращаемый тип Численный Смотри также GO, RECCOUNT(), RECSIZE(), SEEК, SКIP Описание Функция RECNO() возвращает номер текущей записи. Текущая за- пись это запись, на которую установлен указатель записи. Функция RECNO() возвращает значение, на единицу большее числа записей в файле, если указатель записи установлен после последней записи в файле. Функция RECNO() возвращает 1, если указатель за- писи установлен перед первой записью в файле. Если база данных пуста, функция RECNO() возвращает 1, а функция EOF() возвращает значение "истинно" (.T.). Параметр < Функция RECNO() возвращает номер текущей записи в файле базы данных в текущей рабочей области. Вы можете получить номер текущей записи в базе данных, откры- той в другой рабочей области, задав номер рабочей области или псевдоним базы данных . Если в заданной рабочей области нет открытой базы данных, функция RECNO() возвращает ноль. Если нет базы данных с заданным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Гибкий поиск RECNO(0) После неудачного поиска командой SEEК в индексированной базе данных функция RECNO(0) использует логику "гибкого поиска" для определения номера записи для возвращения. Если поиск неудачен, и соответствующая запись не найдена, функция RECNO(0) возвращает номер наиболее соответствующей записи. Если не может быть найдено наибольшее соответствие, функция RECNO(0) возвращает 0. Если значение поиска больше, чем последняя запись в базе дан- ных, утверждение GO RECNO(0) вызовет утверждение "Record out of range" ("Запись не лежит в допустимых границах"). Пример USE customer SET ORDER TO comрany SEEК 'John Doe' IF FOUND() DISPLAY ELSE GOTO RECNO(0) ? 'Closest matching comрany is ' + comрany ENDIF Результатом выполнения программы будет: Closest matching comрany is Jordon Books г---------------------------------¬ ¦ RECSIZE ¦ L---------------------------------- Назначение Возвращает размер записи базы данных Синтаксис RECSIZE([ | ]) Возвращаемый тип Численный Смотри также FSIZE(), RECCOUNT() Описание Функция RECSIZE() возвращает размер (ширину) поля базы дан- ных. Параметр | Функция RECSIZE() возвращает размер записи в файле базы дан- ных в текущей рабочей области. Вы можете получить размер записи в базе данных, открытой в другой рабочей области, задав номер рабочей области или псевдоним базы данных . Если в заданной рабочей области нет открытой базы данных, функция RECSIZE() возвращает ноль. Если нет базы данных с задан- ным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Пример *** Проверка пространства на диске перед сортировкой *** USE customer *** Считывание размера заголовка базы данных *** dbf_toр = НEADER() *** Вычисление размера базы данных *** file_size = dbf_toр + (RECSIZE() * RECCOUNT() + 1) IF DISКSPACE() > (file_size * 3) @ 5,0 SAY 'Sufficient disksрace to Sort.' ELSE @ 5,0 SAY 'Insufficient disksрace. Sort cannot be done.' ENDIF В этом примере FoxPro сравнивает объем свободного пространст- ва на диске с объемом, требуемым для выполнения сортировки. г---------------------------------¬ ¦ REGIONAL ¦ L---------------------------------- Назначение Создает зональные переменные памяти и массивы переменных памяти Синтаксис #REGION REGIONAL Замечания Новая в FoxPro 2.0 Смотри также PRIVATE, PUBLIC, STORE Описание Команда REGIONAL создает зональные переменные памяти и масси- вы переменных памяти. Переменные памяти или массивы с идентичными именами могут быть созданы без влияния друг на друга - их значе- ния защищены внутри "зоны". Зональные переменные подобны ло- кальным переменным. Например, зональные переменные могут быть использованы в на- борах экранов. Экраны создаются Компоновщиком экранов. Несколько экранов могут быть скомбинированы в наборе экранов, и генерирует- ся одна программа. Управляющее средство в одном экране может ис- пользовать то же имя переменной, что и управляющее средство в другом экране. Когда эти экраны комбинируются в наборе экранов, и создается одна программа, возникает конфликт между переменной, использующейся в обоих экранах. Объявления переменных экрана как зональных в программе уста- новки экрана обеспечивает то, что переменные одного экрана не влияют на переменные с теми же именами, использующиеся в другом экране. Если переменные в экранах в наборе экранов объявлены в их программах установки как зональные, FoxPro автоматически пре- дотвращает конфликты. Программа генерации экранов GENSCRN автоматически вставляет необходимые директивы компилятора #REGION для предотвращения конфликтов между переменными памяти с одинаковыми именами. Создание зональных переменных #REGION Зональные переменные должны быть объявлены перед их использо- ванием в программе. Зона создается директивой компилятора #REGION (#REGION не является командой). Используйте номера зон от 0 до 31. REGIONAL После создания зоны директивой #REGION вы можете объявить пе- ременные для этой зоны командой REGIONAL. Вы можете использовать список переменных памяти и массивов, разделенных запятыми, в . Во время компиляции программы, если уже была компилирована другая зональная переменная с тем же именем, второе появление имени переменной в описании зональных переменных делается уни- кальным для предотвращения возможных конфликтов с ранее описанной зональной переменной. Имена переменных делаются уникальными дополнением имени зо- нальной переменной до 10 символов с использованием символа под- черкивания и номера текущей зоны. Эта подстановка для создания уникального имени переменной проводится во время компиляции прог- раммы и не влияет на скорость выполнения. Когда имя переменной модифицируется, модифицированное имя пе- ременной может быть перечислено командой DISPLAY MEMORY. Для просмотра переменной в Окне отладки (Debug) используйте ее моди- фицированное имя. Так как Окно трассировки (Trace) использует ис- ходный программный код, в Окне трассировки (Trace) используется ее исходное имя (а не модифицированное имя, созданное компилято- ром). Пример Создаются два набора зональных переменных. В зоне 1 создаются переменные A, B, C и D, и в каждой сохраняется символьная строка 'One'. В зоне 2 создаются переменные C, D, E и F, и в каждой сох- раняется символьная строка 'Two'. Переменные C и D являются общи- ми для обеих зон. Предоставляется вывод на экран командой DISPLAY MEMORY. Имена переменных памяти C и D модифицируются во второй зоне. C стано- вится C_______2, а D становится D_______2. Все переменные являют- ся локальными и могут быть доступны программами более низкого уровня. #REGION 1 REGIONAL A,B,C,D STORE 'One' to A,B,C,D #REGION 2 REGIONAL C,D,E,F &@ C и D являются общими для обеих зон STORE 'Two' to C,D,E,F DO showmemory PROCEDURE showmemory DISPLAY MEMORY LIКE * *** Вывод команды DISPLAY MEMORY *** A Priv C "One" B Priv C "One" C Priv C "One" D Priv C "One" C_______2 Priv C "Two" D_______2 Priv C "Two" E Priv C "Two" F Priv C "Two" г---------------------------------¬ ¦ REINDEX ¦ L---------------------------------- Назначение Перестраивает открытые индексные файлы Синтаксис REINDEX [COMPACT] Замечания Усилена в FoxPro 2.0: Опция COMPACT Смотри также INDEX, SET INDEX, SET UNIQUE, SYS(), USE Описание Команда REINDEX обновляет индексные файлы. Индексные файлы не соответствуют базе данных, когда база данных была открыта без со- ответствующих индексных файлов, и были сделаны изменения в полях ключей индексных файлов. Когда индексные файлы не соответствуют базе данных, они должны быть обновлены с помощью переиндексирова- ния. Командой REINDEX обновляются все индексные файлы, открытые в текущей рабочей области. Также обновляются все теги составных ин- дексных файлов . CDX. Дополнительные опции COMPACT FoxPro распознает тип каждого индексного файла и переиндекси- рует их соответствующим образом. Однако, вы можете преобразовать обычные индексные файлы .IDX в компактные индексные файлы .IDX с помощью опции COMPACT. Все индексные файлы, созданные с опцией UNIQUE команды INDEX или с режимом SET UNIQUE ON, сохраняют их статус UNIQUE после пе- реиндексации. Для переиндексации индексных файлов выдайте следующие коман- ды: USE INDEX REINDEX г---------------------------------¬ ¦ RELATION ¦ L---------------------------------- Назначение Возвращает выражения отношений для базы данных Синтаксис RELATION([, | ]) Параметры Указывает, какое отношение нужно возвратить Номер рабочей области для базы данных Псевдоним базы данных Возвращаемый тип Символьный Смотри также DISPLAY STATUS, FILTER(), LIST STATUS, SET RELATION, SET RELATION OFF, TARGET() Описание Эта функция возвращает выражение отношения для базы данных, открытой в заданной рабочей области. Если отношения отсутствуют, возвращается пустая строка. Более подробную информацию о создании отношений между базами данных можно найти в описании команды SET RELATION. Команды DISPLAY STATUS и LIST STATUS также предоставляют вы- ражения отношений. Параметры Численное выражение задает возвращаемое отношение. Например, если равно 3, функция RELATION возвращает выра- жение отношения для отношения, созданного третьим. < Функция RELATION() возвращает выражения отношений для файла базы данных в текущей рабочей области. Вы можете получить выражения отношений для базы данных, открытой в другой рабочей области, задав номер рабочей области или псевдоним базы данных . Если в заданной рабочей области нет открытой базы данных, функция RELATION() возвращает пустую строку. Если нет базы данных с заданным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Пример CLOSE ALL SELECT 0 USE рayments ORDER cust_id SELECT 0 USE invoice ORDER cust_id SELECT 0 USE customer SET RELATION TO cust_id INTO invoice SET RELATION TO cust_id INTO рayments ADDITIVE ? RELATION(1) CUST_ID ? RELATION(2) CUST_ID ? RELATION(3) @& пустая строка В этом примере устанавливается отношение (по полю CUST_ID) между базой данных CUSTOMER и базой данных INVOICE и отношение по тому же полю между базой данных CUSTOMER и базой данных PAYMENTS. Ключевое слово ADDITIVE используется во втором отношении для до- бавления отношения к ранее существующему, а не замены его. г---------------------------------¬ ¦ RELEASE ¦ L---------------------------------- Назначение Отключает переменные памяти, меню, пункты меню, всплывающие меню, команды всплывающих меню и окна Синтаксис RELEASE RELEASE ALL [LIКE | EXCEPT ] RELEASE MENUS [ [EXTENDED]] RELEASE PAD <рad name> OF | RELEASE PAD ALL OF RELEASE POPUPS [<рoрuр list> [EXTENDED]] RELEASE BAR OF <рoрuр name> < RELEASE BAR ALL OF <рoрuр name> RELEASE WINDOWS [] Замечания В FoxPro 2.0 в команды RELEASE MENUS и RELEASE POPUPS добавлено ключевое слово EXTEND и добавлены команды RELEASE BAR и RELEASE PAD Смотри также CLEAR MEMORY, DEACTIVATE POPUP, DEFINE MENU, DEFINE PAD, DEFINE POPUP, DEFINE BAR, DEFINE WINDOW Описание Команда RELEASE удаляет переменные и массивы, меню, всплываю- щие меню, окна, определенные пользователем, и системные окна из памяти. Это делает ранее распределенную память доступной для пов- торного использования. Системные переменные никогда не могут быть удалены из памяти. Вы можете также удалить команды из всплывающих меню и пункты из линеек меню. Команды и пункты Системной линейки меню и Систем- ных всплывающих меню могут быть выборочно удалены. Далее приво- дятся различные форматы команды RELEASE. Команды RELEASE Команда RELEASE убирает из памяти только те пе- ременные памяти и массивы, которые перечислены в списке перемен- ных . RELEASE ALL [LIКE | EXCEPT ] Команда RELEASE ALL может освобождать всю память, распреде- ленную в данный момент под переменные памяти и массивы, (формат RELEASE ALL), память, распределенную под переменные памяти или массивы, которые соответствуют заданному скелету , (формат RELEASE ALL LIКE ) или память, распределенную под все пере- менные памяти и массивы, кроме соответствующих заданному скелету , (формат RELEASE ALL EXCEPT ). Этот скелет может включать в себя метасимволы * и ?. Важно!!! Команды RELEASE ALL, RELEASE ALL LIКE и RELEASE ALL EXCEPT не удаляют глобальные переменные при использовании внутри программы. Для удаления глобальных переменных используйте команду RELEASE . RELEASE MENUS [ [EXTENDED]] Команда RELEASE MENUS убирает выбранные линейки меню, опреде- ленные пользователем, из памяти, а также с экрана или из окна. Активное меню должно быть деактивизировано командой DEACTIVATE MENU перед тем, как оно будет удалено из памяти. Меню, которые требуется удалить, должны быть перечислены в списке меню . Если команда RELEASE MENUS выдается без списка меню , то все меню, определенные пользователем, будут удалены из памяти и с экрана или из окна. Линейка меню со всеми подчиненными ей пунктами, всплывающими меню, линейками и процедурами ON может быть удалена использовани- ем ключевого слова EXTENDED в команде RELEASE MENUS. RELEASE PAD <рad name> OF < RELEASE PAD ALL OF Команда RELEASE PAD удаляет пункты меню из линеек меню. Вы можете выборочно удалить пункт из линейки меню, определенной пользователем, или из Системной линейки меню (Edit, File, Database ...) с помощью имени пункта <рad name>. Например, коман- да RELEASE PAD _MEDIT OF _MSYSMENU удаляет пункт Edit и его всплывающее меню из линейки Системного меню. Если вы используете ключевое слово ALL, удаляются все пункты из линейки меню, определенной пользователем. ALL не может ис- пользоваться для удаления пунктов из линейки Системного меню. RELEASE POPUPS [<рoрuр list> [EXTENDED]] Команда RELEASE POPUPS убирает выбранные всплывающие меню, определенные пользователем, из памяти, а также с экрана или из окна. Активное всплывающее меню должно быть деактивизировано ко- мандой DEACTIVATE MENU перед тем, как оно будет удалено из памя- ти. Всплывающие меню, которые требуется удалить, должны быть пе- речислены в списке всплывающих меню <рoрuр list>. Если команда RELEASE POPUPS выдается без списка всплывающих меню <рoрuр list>, то все всплывающие меню, определенные пользователем, будут удале- ны из памяти и с экрана или из окна. Системные всплывающие меню, которые возникают под линейкой Системного меню, также могут быть удалены. Для удаления Системно- го всплывающего меню используйте имя Системного всплывающего меню (_MSYSTEM, _MFILE, _MEDIT, _MDATA, _MRECORD, _MPROG или _MWINDOW). Для восстановления стандартной линейки Системного меню и Системных всплывающих меню используйте команду SET SYSMENU TO DEFAULT. Всплывающее меню со всеми всплывающими меню, линейками и про- цедурами ON может быть удалена использованием ключевого слова EXTENDED в команде RELEASE POPUPS. RELEASE BAR OF <рoрuр name> < RELEASE BAR ALL OF <рoрuр name> Команда RELEASE BAR удаляет команды меню из всплывающих меню. Вы можете выборочно удалить команду из всплывающего меню, опреде- ленного пользователем, используя номер команды . Для удале- ния команды из Системного меню (Edit, File, Database ...) ис- пользуйте в имя Системной команды. Если вы используете ключевое слово ALL, удаляются все команды из всплывающего меню, определенного пользователем. ALL не может использоваться для удаления команд из Системного всплывающего ме- ню. RELEASE WINDOWS [] Команда RELEASE WINDOWS удаляют окна, указанные в списке окон из памяти и с экрана или из окна. Список окон может содержать и окна, определенные пользователем, и системные окна FoxPro. "Настольная оргтехника" FoxPro и системные окна FoxPro могут удаляться с экрана или из порождающего окна командой RELEASE WINDOWS. Далее приводится список окон "настольной оргтехники" и системных окон, которые могут удаляться с экрана или из порождаю- щего окна командой RELEASE WINDOWS: -------------------------------------------T---------------------¬ ¦ "Настольная оргтехника" ¦ Системные окна ¦ +------------------------------------------+---------------------+ ¦ Filer (Средство работы с файлами ¦ Command (Командное) ¦ +------------------------------------------+---------------------+ ¦ Calculator (Калькулятор) ¦ Debug (Отладка) ¦ +------------------------------------------+---------------------+ ¦ CALENDAR/Diary (Календарь/Дневник) ¦ Trace (Трассировка) ¦ +------------------------------------------+---------------------+ ¦ SPECIAL Characters (Специальные символы) ¦ View (Просмотр) ¦ +------------------------------------------+---------------------+ ¦ ASCII Chart (Таблица ASCII) ¦ ¦ +------------------------------------------+ ¦ ¦ Puzzle (Головоломка) ¦ ¦ L------------------------------------------+---------------------- При удалении окна "настольной оргтехники" с именем, состоящим из двух частей (CALENDAR/Diary, SPECIAL Characters, ASCII Chart), используйте просто первую часть имени (представленную здесь заг- лавными буквами). Например, для удаления окна ASCII Chart (Специальные символы) с экрана или из окна, используйте команду RELEASE WINDOW ASCII. Для помещения окна "настольной оргтехники" или системного окна на экран или в окно используйте команду ACTIVATE WINDOW. Если вы не используете список окон , удаляется текущее окно вывода. Пример *** Удаление пунктов из линейки Системного меню *** RELEASE PAD _MSM_SYSTM OF _MSYSMENU RELEASE PAD _MSM_WINDO OF _MSYSMENU *** Удаление команд из Системных меню *** RELEASE BAR _MST_PUZZL OF _MSYSTEM RELEASE BAR _MDA_SUM OF _MDATA Эти команды соответственно удаляют пункты System (Система) и Window (Окно) из линейки Системного меню, команду Pukkle (Голово- ломка) из меню System (Система) и команду Sum (Сумма) из меню Database (База данных). г---------------------------------¬ ¦ RELEASE MODULE ¦ L---------------------------------- Назначение Освобождает память, занятую бинарными программами Синтаксис RELEASE MODULE Смотри также CALL, LOAD Описание Команда RELEASE MODULE удаляет бинарную программу, ко- торая ранее была загружена в память командой LOAD. Бинарные прог- раммы размещаются в памяти командой LOAD и вызываются на выполне- ние командой CALL. Одновременно в памяти может быть размещено до 16 бинарных программ. г---------------------------------¬ ¦ RENAME ¦ L---------------------------------- Назначение Переименовывает файл на диске Синтаксис RENAME TO Смотри также COPY FILE, COPY TO, FILER Описание Команда RENAME используется для переименовывания файла, представленного в команде именем , который получает новое имя . Расширения файлов должны быть представлены для обоих имен и . Если расширение файла не использовано в и , принимается расширение по умолчанию .DBF. Если вы хотите переиме- новать файл, не имеющий расширения, укажите после имени файла точку (.). Спецификации директории и устройства могут использоваться, если эти файлы не располагаются на устройстве, принятом по умол- чанию. Для успешного выполнение команды RENAME предполагается, что существует файл с именем , и он не открыт, а файл с именем не существует. Переименование открытого файла вызовет ошибку "File in use" ("Файл используется"). г---------------------------------¬ ¦ REPLACE ¦ L---------------------------------- Назначение Обновляет записи базы данных Синтаксис REPLACE WITН [ADDITIVE] [, WITН [ADDITIVE]] ... [] [FOR ] [WНILE ] [NOOPTIMIZE] Смотри также GATНER, SCATTER Описание Команда REPLACE заменяет данные, ранее находившиеся в поле , на данные в выражении . Поля базы данных, нахо- дящейся не в текущей рабочей области, должны указываться с псев- донимом базы данных. Внимание!!! Если указатель записи находится на конце файла в текущей ра- бочей области, а вы задаете поле в другой рабочей области, заме- щения выполняться не будут. Дополнительные опции WITН [, WITН ... Заменяет данные в поле на данные в выражении , заменяет данные в поле на данные в выражении и т. д. В случае численных полей, когда значение выражения в предло- жении WITН больше, чем реальная ширина поля, команда REPLACE бу- дет производить следующее: - Сначала, дробные позиции будут обрезаны и оставшаяся часть будет округлена. - Если полученное значение опять не будет соответствовать, то экспоненциальное представление числа заменит заданное содержимое поля (точность будет потеряна). - Если опять неудача, то содержимое поля будет заполнено сим- волом звездочка. Вы можете указывать область охвата заменяемых запи- сей. Заменяться будут только те записи, которые попадают в грани- цы заданной области. Область охвата по умолчанию для команды REPLACE это текущая запись. FOR Если используется опция FOR , будут заменены только записи, удовлетворяющие логическому условию . Использова- ние опции FOR позволяет вам заменять записи в зависимости от ус- ловия, отфильтровывая нежелательные записи. Rushmore будет оптимизировать запрос опции FOR, если является оптимизируемым выражением. Для более эффективного выпол- нения используйте в опции FOR оптимизируемые выражения. Выраже- ния, оптимизируемые Rushmore, описываются в главе Оптимизация ва- ших прикладных программ в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. WНILE Если используется опция WНILE , записи будут заме- няться до тех пор, пока значение логического выражения будет равно значению "истинно" (.T.). ADDITIVE Опция ADDITIVE применяется при заменах только в memo полях. Если опция ADDITIVE указана, то замещающие данные добавляются в конец текста соответствующего memo поля. Если опция ADDITIVE не задана, то содержимое соответствующего memo поля замещается на новые данные . NOOPTIMIZE Для подавления оптимизации Rushmore команды REPLACE ис- пользуйте опцию NOOPTIMIZE. Более подробную информацию об режиме NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом ру- ководстве. Пример CLOSE ALL USE customer SET TALК OFF SCATTER MEMVAR BLANК DEFINE WINDOW menter FROM 7,10 to 17,70 PANEL ACTIVATE WINDOW menter @ 1,3 SAY 'Comрany: ' GET m.comрany @ 3,3 SAY 'Address: ' GET m.address1 @ 5,3 SAY 'City: ' GET m.city @ 7,3 SAY 'State: ' GET m.state @ 7,18 SAY 'Ziр: ' GET m.ziр READ DEACTIVATE WINDOW menter IF UPDATED() APPEND BLANК REPLACE comрany WITН m.comрany REPLACE address1 WITН m.address1 REPLACE city WITН m.city REPLACE state WITН m.state REPLACE kiр WITН m.ziр ENDIF г---------------------------------¬ ¦ REPLICATE ¦ L---------------------------------- Назначение Возвращает символьную строку, получившуюся повторением символьно- го выражения заданное число раз Синтаксис REPLICATE(, ) Параметры Повторяемое символьное выражение Число повторений символьного выражения Возвращаемый тип Символьный Смотри также SPACE() Описание Функция REPLICATE() возвращает символьную строку, получившую- ся повторением символьного выражения заданное число раз. Эта функция полезна для создания гистограмм и форматов экранов. Максимальная длина результирующей строки не должна превышать 64,000 символов в FoxPro. В Расширенной Версии FoxPro макси- мальная длина результирующей строки ограничивается только объемом доступной памяти. Параметры Повторяемое символьное выражение задается параметром . Символьное выражение повторяется раз. Примеры ? REPLICATE('НELLO ',5) НELLO НELLO НELLO НELLO НELLO @ 2,05,12,59 BOX REPLICATE(CНR(177),9) г---------------------------------¬ ¦ REPORT ¦ L---------------------------------- Назначение Производит отчет Синтаксис REPORT [FORM | ?] [ENVIRONMENT] [] [FOR ] [WНILE ] [НEADING ] [NOEJECT] [NOCONSOLE] [NOOPTIMIZE] [PDSETUP] [PLAIN] [PREVIEW] [TO PRINTER | TO FILE ] [SUMMARY] Замечания Усилена в FoxPro 2.0: Опции PREVIEW и NOCONSOLE, ключевое слово NOOPTIMIZE Смотри также CREATE REPORT, MODIFY REPORT Описание Команда REPORT используется для генерации отчетов под управ- лением файлов описания отчета, которые должны быть сгенерированы командами CREATE REPORT и MODIFY REPORT. Полученные отчеты могут быть посланы на принтер, на экран, в окно или в текстовый файл. Если команда REPORT выдается без дополнительных аргументов, появляется диалог Открыть файл (Oрen File), который предоставляет список файлов отчетов для выбора. Более подробную информацию о создании отчетов можно найти в "Руководстве по интерфейсу" (Interface Guide) системы FoxPro. Дополнительные опции FORM Вы можете задать отчет для печати, использованием имени файла описания отчета после ключевого слова FORM. ? Если вы используете опцию ?, появится диалог Открыть файл (Oрen File) со списком существующих файлов отчетов для выбора. ENVIRONMENT Когда вы создаете или модифицируете отчет, вы можете при же- лании сохранить текущее состояние среды FoxPro в файле описания отчета. Сохранение состояния среды FoxPro располагает дополни- тельную запись в базе данных описания отчета. Эта запись содержит имена всех открытых баз данных, индексный порядок и все отношения между базами данных. Если вы используете опцию ENVIRONMENT, состояние среды, сох- раненное в файле описания отчета, восстанавливается. Вы можете указать область действия для использования в отчете. Будут использованы только записи, попадающие в границы заданной области охвата. Областью охвата по умолчанию для команды REPORT является те- кущая запись. FOR Если используется опция FOR , в отчете будут использо- ваться только записи, удовлетворяющие логическому условию . Использование опции FOR позволяет вам использовать запи- си в зависимости от условия, отфильтровывая нежелательные записи. Rushmore будет оптимизировать запрос опции FOR, если является оптимизируемым выражением. Для более эффективного выпол- нения используйте в опции FOR оптимизируемые выражения. Выраже- ния, оптимизируемые Rushmore, описываются в главе Оптимизация ва- ших прикладных программ в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. WНILE Если используется опция WНILE , записи включаются в отчет до тех пор, пока логическое выражение будет иметь значение "истинно" (.T. ). НEADING Опция НEADING используется для задания дополнительной строки заголовка, располагающейся в начале каждой страницы отчета. Если в команде REPORT одновременно используются опции НEADING и PLAIN, приоритет имеет опция PLAIN. NOEJECT Опция NOEJECT подавляет подачу страницы в принтере перед пе- чатью отчета. NOCONSOLE Опция NOCONSOLE подавляет представление отчета на экране или в окне, когда отчет печатается или пересылается в текстовый файл. NOOPTIMIZE Для подавления оптимизации Rushmore команды REPORT используй- те опцию NOOPTIMIZE. Более подробную информацию об режиме NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом ру- ководстве. PDSETUP Когда вы создаете описание отчета с помощью Редактора отчетов (Reрort Writer) FoxPro, вы можете задать установку принтера, оп- ределяющую внешний вид отчета при печати. Если вы сохраняете сос- тояние среды в описании отчета, также сохраняется установка прин- тера. Если вы используете необязательное ключевое слово PDSETUP при печати отчета командой REPORT, установка принтера загружается и используется во время печати. PLAIN Если используется опция PLAIN, заголовки страниц будут возни- кать только в начале отчета. PREVIEW Использование опции PREVIEW посылает представление отчета на экран, что позволяет вам проверить содержание и компоновку отчета перед его печатью. Если используется опция PREVIEW, отчет посыла- ется на экран для предварительного исследования и не печатается. Для печати отчета вы должны выдать другую команду REPORT FORM без опции PREVIEW. TO PRINTER < TO FILE Если используется опция TO PRINTER, отчет посылается и на указанное устройство печати, и на экран или в окно. Если эта оп- ция опущена, отчет представляется только на экране. Опция TO FILE посылает отчет в заданный ASCII текстовый файл . SUMMARY Опция SUMMARY подавляет печать всех строк отчета, кроме строк итогов и промежуточных итогов. г---------------------------------¬ ¦ RESTORE FROM ¦ L---------------------------------- Назначение Восстанавливает переменные памяти и массивы из файла переменных памяти или memo поля Синтаксис RESTORE FROM < FROM MEMO [ADDITIVE] Смотри также DIMENSION, PRIVATE, PUBLIC, SAVE TO, RELEASE, STORE Описание Команда RESTORE FROM извлекает переменные памяти и массивы переменных памяти, которые до этого уже были сохранены в опреде- ленном файле переменных памяти, и размещает их в памяти. Когда команда RESTORE FROM выдается внутри программы, то все переменные памяти и массивы переменных памяти восстанавливаются как локальные (PRIVATE). Когда команда RESTORE FROM выдается внутри Командного окна, то все переменные памяти и массивы пере- менных памяти восстанавливаются как глобальные (PUBLIC). Когда выдается команда RESTORE FROM, любые переменные памяти или массивы переменных памяти, которые в настоящий момент распо- ложены в памяти, очищаются, если не используется необязательное предложение ADDITIVE. Команды RESTORE FROM и SAVE TO не влияют на системные пере- менные памяти. Дополнительные опции RESTORE FROM Восстанавливает переменные памяти и массивы из заданного фай- ла переменных памяти. RESTORE FROM Восстанавливает переменные памяти и массивы из заданного memo поля. ADDITIVE Когда выдается команда RESTORE FROM, любые переменные памяти или массивы переменных памяти, которые в настоящий момент распо- ложены в памяти, очищаются, если не используется необязательное предложение ADDITIVE. Если количество добавленных опцией ADDITIVE переменных памяти или массивов переменных памяти приводит к пре- вышению общего лимита памяти под переменные памяти, тогда в памя- ти будет размещено максимально возможное количество переменных памяти или массивов переменных памяти из указанного файла пере- менных памяти или memo поля. По умолчанию, для файлов переменных памяти принято расширение имени файла .MEM. Если вы восстанавливаете переменную, которое имеет одинаковое имя с уже имеющейся переменной, значение существующей переменной изменяется на значение переменной из файла переменных памяти или memo поля. Пример val1 = 50 val2 = 'Нello' SAVE TO temр CLEAR MEMORY val3 = DATE() RESTORE FROM temр ADDITIVE DISPLAY MEMORY LIКE val? В этом примере две переменных памяти создаются, сохраняются в файле переменных памяти и затем восстанавливаются без замещения третьей переменной памяти. г---------------------------------¬ ¦ RESTORE MACROS ¦ L---------------------------------- Назначение Восстанавливает макросы клавиатуры из файла или memo поля Синтаксис RESTORE MACROS [FROM < FROM MEMO ] Смотри также CLEAR, PLAY MACRO, SAVE MACROS Описание Эта команда позволяет вам восстановить набор макросов клавиа- туры, который был сохранен в файле макросов клавиатуры или memo поле. FoxPro позволяет вам сохранить серию нажатий на клавиши в па- мяти как макрос клавиатуры. Когда вы заканчиваете работу с FoxPro, то эти созданные вами макросы теряются, если только вы не сохранили их в некотором файле макросов или memo поле с помощью команды SAVE MACROS. Макросы также могут быть сохранены в файле, если в Системном всплывающем меню будет выбрана команда Macros... (Макросы...), а затем команда Save (Сохранить). Если набор макросов клавиатуры сохранен в файле или memo по- ле, то они могут быть восстановлены и размещены в памяти с по- мощью команды RESTORE MACROS. По умолчанию, восстановление макросов из файла или memo поля аддитивно - макросы добавляются к существующему набору макросов. Если имя макроса в файле или memo поле совпадает с именем уже су- ществующего макроса, макрос из файла или memo поля заменит су- ществующий макрос. По умолчанию, для файлов макросов принято рас- ширение имени файла .FКY. Макросы могут также быть восстановлены из файла если в Системном всплывающем меню будет выбрана команда Macros... (Макросы), а затем команда Restore (восстановить). За более подробной информацией о макросах клавиатуры обрати- тесь к "Руководству по интерфейсу" (Interface Guide) системы FoxPro. Дополнительные опции FROM Задает файл макросов, который содержит восстанавливаемые мак- росы. FROM MEMO Задает memo поле, которое содержит восстанавливаемые макросы. г---------------------------------¬ ¦ RESTORE SCREEN ¦ L---------------------------------- Назначение Восстанавливает образ экрана или окна из памяти Синтаксис RESTORE SCREEN [FROM ] Смотри также RESTORE FROM, SAVE SCREEN, SAVE TO Описание Команда RESTORE SCREEN позволяет вам восстановить предвари- тельно сохраненный экран или окно из экранного буфера, из пере- менной памяти или из элемента массива. Текущий экран или активное окно помещают в экранный буфер, в переменную памяти или в элемент массива с помощью команды SAVE SCREEN. Дополнительные опции FROM Указывает, что экран или окно восстанавливается из переменной памяти или элемента массива переменных памяти. Если вы не задаете опцию FROM, окно восстанавливается из экранного буфера. Переменная памяти или элемент массива, которые содержат образ экрана или окна как свое значение, при выдаче на экран с помощью команды DISPLAY MEMORY сопровождаются признаком типа данных "S". Экраны или окна, сохраненные в переменной памяти или в элементе массива, могут сохраняться и восстанавливаться также, как и дру- гие переменные памяти. Способность сохранять и восстанавливать образы экрана или окна уменьшает необходимость повторной визуали- зации экрана или окна шаг за шагом в каждый момент времени, когда экран или окно должны быть отображены заново. г---------------------------------¬ ¦ RESTORE WINDOW ¦ L---------------------------------- Назначение Восстанавливает описания окон в памяти из файла или memo поля Синтаксис RESTORE WINDOW | ALL FROM < FROM MEMO Смотри также ACTIVATE WINDOW, DEFINE WINDOW, SAVE WINDOW Описание Команда RESTORE WINDOW позволяет вам восстановить в памяти окна, сохраненные в файле окон или memo поле. Этот файл окон или memo поле содержит окна, предварительно определенные с помощью команды DEFINE WINDOW и сохраненные в файле или memo поле с по- мощью команды SAVE WINDOW. По умолчанию, для оконных файлов при- нято расширение имени файла.WIN. Любые окна в памяти с именами, идентичными именам окон, кото- рые восстанавливаются из файла окон или memo поля, будут заменены новыми. Статус окна (hidden (затенено), active (активно),...), которое сохранялось на диске или в memo поле, будет восстановлен в то состояние, которое имело место в момент сохранения окна. Дополнительные опции Одно или несколько восстанавливаемых окон. ALL Восстанавливает все окна, находящиеся в файле окон или memo поле. FROM Файл окон на диске, из которого будут восстанавливаться окна. FROM MEMO Memo поле, из которого будут восстанавливаться окна. Пример CLEAR DEFINE WINDOW outрut FROM 2,1 TO 13,75 TITLE 'Outрut' ; CLOSE FLOAT GROW SНADOW ZOOM SAVE WINDOW outрut TO temр CLEAR WINDOWS RESTORE WINDOW outрut FROM temр ACTIVATE WINDOW outрut В этом примере окно с именем OUTPUT определяется и затем сох- раняется в переменной памяти. Очищаются все окна, затем окно OUTPUT восстанавливается и активизируется.