Запуск программных компонентов в Microsoft Visual FoxPro
« НазадDO ProgramName1 | ProcedureName [IN ProgramName2] [WITH ParameterList]выполняет программу, процедуру или функцию VFP. Команды DO могут быть вложенными. Число уровней вложения не должно быть больше 128. Опции и параметры: ProgramName1 – имя вызываемой программы. Если расширение не указано, то VFP ищет файл ProgramName1, используя различные расширения в следующем порядке:
Для выполнения программы меню, формы или запроса следует указать ProgramName1 соответственно с расширением MPR, SPR или QPR. ProcedureName – имя выполняемой процедуры или функции. Поиск программы, если не задана опция IN ProgramName2, осуществляется в порядке, приведенном в разд. 5.8.5. IN ProgramName2 – указывает, что должна быть выполнена процедура, расположенная в файле с именем ProgramName2. Если файл или процедура не обнаружена, то генерируется ошибка "File does not exist" или "Procedure is not found". WITH ParameterList – список фактических параметров, передаваемых программе или процедуре (функции). Имена параметров разделяются запятыми. В качестве параметров могут употребляться любые выражения, содержащие переменные (скалярные и массивы), элементы массивов, константы, поля таблиц, пользовательские и встроенные функции. По умолчанию переменные и массивы, указанные в опции WITH, передаются по ссылке. Параметр будет передан по значению, если его заключить в круглые скобки. Если командой SET UDFPARMS задан способ передачи параметров по значению, то для передачи параметра по посылке перед ним нужно проставить символ @. Максимально допустимое число параметров в ParameterList – 26. Выполнение программы или процедуры (функции) прекращается командами RETURN, CANCEL, QUIT, ENDPROC, ENDFUNC или при обнаружении конца процедуры (функции). После завершения программы управление передается либо вызывающей программе, либо командному окну, либо операционной системе. Если команда DO выполнена из меню Program и выполняемый файл расположен в директории, отличной от директории по умолчанию, то VFP автоматически меняет директории по умолчанию на директорию расположения файла. Функция ExecScript(cExpression [, eParameter1, eParameter2, ...])запускает код, содержащийся в тексте (строке) cExpression. Если текст cExpression содержит в своем начале команду задания параметров, их значения могут быть переданы параметрами eParameter1, eParameter2, ... Функция возвращает величину, содержащуюся в команде RETURN текста cExpression, либо .T., если такой команды в тексте нет или если она не выполняется. Функции ExecScript( ) обеспечивает тот же эффект, что и выделение в командном окне нескольких строк и последующее нажатие на Enter. Пример: someText = "parameters p1, p2" + Chr(13) + ; "resVal = p1 + p2" + Chr(13) + ; "? resVal" + Chr(13) + ; "return resVal" && Вызываем ExecScript( ) с двумя параметрами ? ExecScript(someText, 2, 5) && Напечатает: 7 7 Команда ON KEY [LABEL KeyLabelName] [Command]задает команду Command, выполняемую при нажатии на клавишу или комбинацию клавиш, или на кнопку мыши, указываемую опцией LABEL KeyLabelName. Параметр: KeyLabelName – буква, число или специальное приведенное в табл. 5.7 имя. Таблица 5.7 Имена для параметра KeyLabelName
Обычно в качестве Command используют команду DO, выполняющую пользовательский программный компонент. Предписания, заданные ON KEY LABEL во время выполнения программы, остаются в силе и после ее завершения. Для восстановления поведения KeyLabelName выполняется команда ON KEY LABEL KeyLabelName без параметра Command. Для восстановления поведения всех заданных KeyLabelName комбинаций следует выполнить команду ON KEY. Чтобы предотвратить рекурсивные вызовы во время выполнения ON KEY LABEL-процедуры, в ее начало следует включить команду PUSH KEY CLEAR, а в конец – POP KEY. Заданные ON KEY LABEL действия не могут быть отслежены, если они находятся под управлением Windows. В частности, ON KEY LABEL MOUSE, ON KEY LABEL LEFTMOUSE и ON KEY LABEL RIGHTMOUSE не выполняются, когда мышь ударяет по Windows-элементу управления, например полосе прокрутки. Поддержка CTRL+0 в ON KEY LABEL позволяет переопределить комбинацию клавиш, используемую для ввода NULL-значения в поле таблицы. Замечание. При работе с формой вместо ON KEY LABEL следует употреблять обработчик события KeyPress. Пример. Задаются предписания ON KEY LABEL. Для их сброса можно употребить клавишу F9, для которой задана команда ON KEY. && Переменная msg, употребляемая в ON KEY LABEL, должна быть глобальной public msg msg = Chr(13) + "Нажмите F9, чтобы восстановить " ; + "заданное по умолчанию поведение клавиш" on key label on key label on key label on key label && && После нажатия на F9 будут сброшены все ON KEY LABEL-предписания on key label Команда PUSH KEY [CLEAR]помещает текущие ON KEY LABEL команды в стек. Опция: CLEAR – очищает текущую ON KEY LABEL-команду после размещения ее в стеке. Команда может быть использована, например, если с открываемым Browse-окном нужно задать новый набор ON KEY LABEL-команд и при этом сохранить старый. Тогда перед открытием Browse-окна употребляется PUSH KEY, затем задаются новые ON KEY LABEL-предписания. После закрытия Browse-окна предшествующие ON KEY LABEL-команды восстанавливаются POP KEY. При работе со стеком употребляется LIFO – "последний пришел – первый вышел". Следует позаботиться, чтобы каждая команда PUSH KEY имела соответствующую команду POP KEY. В противном случае будет, во-первых, засоряться память, и, во-вторых, возникнет несогласованность между применяемыми и ожидаемыми установками команды ON KEY LABEL. Команда POP KEY [ALL]восстанавливает из стека ON KEY LABEL-команды, помещенные в него PUSH KEY. Опция: ALL – очищает все текущие предписания ON KEY LABEL и очищает стек. Выполнение команды POP KEY при пустом стеке приводит к сбросу текущих ON KEY LABEL-установок. Функция ON(cONCommand [, KeyLabelName])возвращает строку с именем команды, установленной ON ERROR, ON ESCAPE, ON KEY LABEL или ON PAGE. Функция возвращает пустую строку, если текущих установок не имеется. Параметры: cONCommand – задает одну из приведенных в табл. 5.8 команд. Таблица 5.8 Значения параметра cONCommand
KeyLabelName – используется, когда cONCommand = "KEY". Значения см. в описании функции ON KEY LABEL. Пример: on key label RIGHTARROW wait window "Right Arrow" nowait ? ON('KEY', 'RIGHTARROW') && Напечатает: wait window "Right Arrow" nowait && && Сбрасываем ON KEY LABEL-предписание on key label Команда ON ESCAPE [Command]задает команду Command, выполняемую при нажатии на Esc. После выполнения команды Command управление передается на оператор, следующий за строкой исполняемой при нажатии на Esc. Однако если процедура, запускаемая по ON ESCAPE, включает RETRY, то вновь будет выполнена строка, при исполнении которой была нажата клавиша Esc. Вызов ON ESCAPE без Command разрывает связь между Esc и командой. Замечание. VFP выполняет ON ESCAPE-команду, если только SET ESCAPE установлен в ON. Пример: set escape on on escape do StopIt wait 'Нажмите на Esc, чтобы прервать цикл' window nowait goOn = .T. do while goOn && Бесконечный цикл enddo
procedure StopIt goOn = .F. wait 'Цикл прерван!' window nowait endProc Команда SET ESCAPE ON | OFFопределяет, прерывает ли нажатие на Esc выполнение программы или команды. Прерывание произойдет, если SET ESCAPE установлен в ON (по умолчанию), и не произойдет, если – в OFF. После прерывания, если не задана ON ESCAPE-команда, возникнет диалог, в котором можно выбрать Cancel, Suspend или Ignore, чтобы соответственно прекратить, приостановить или продолжить выполнение программы. |