Распечатать страницу

Запуск программных компонентов в Microsoft Visual FoxPro

« Назад

DO ProgramName1 | ProcedureName [IN ProgramName2] [WITH ParameterList]

выполняет программу, процедуру или функцию VFP. Команды DO могут быть вложенными. Число уровней вложения не должно быть больше 128.

Опции и параметры:

ProgramName1 – имя вызываемой программы.

Если расширение не указано, то VFP ищет файл ProgramName1, используя различные расширения в следующем порядке:

  • EXE (исполняемый файл);

  • APP (приложение);

  • FXP (откомпилированные программы);

  • PRG (программы с исходным кодом).

Для выполнения программы меню, формы или запроса следует указать 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

Клавиши / кнопка мыши

Имя для KeyLabelName

¬

LEFTARROW

®

RIGHTARROW

­

UPARROW

¯

DNARROW

HOME

HOME

END

END

PAGE UP

PGUP

PAGE DOWN

PGDN

DEL

DEL

BACKSPACE

BACKSPACE

SPACEBAR

SPACEBAR

INS

INS

TAB

TAB

SHIFT+TAB

BACKTAB

{

LBRACE

}

RBRACE

ENTER

ENTER

F1 – F12

F1, F2, F3 ...

CTRL+F1 – CTRL+F12

CTRL+F1, CTRL+F2 ...

SHIFT+F1 – SHIFT+F12

SHIFT+F1, SHIFT+F2 ...

ALT+F1 – ALT+F12

ALT+F1, ALT+F2, ALT+F3 ...

ALT+0 – ALT+9

ALT+0, ALT+1, ALT+2 ...

ALT+A – ALT+Z

ALT+A, ALT+B, ALT+C ...

CTRL+¬

CTRL+LEFTARROW

CTRL+®

CTRL+RIGHTARROW

CTRL+HOME

CTRL+HOME

CTRL+END

CTRL+END

CTRL+PAGE UP

CTRL+PGUP

CTRL+PAGE DOWN

CTRL+PGDN

CTRL+A – CTRL+Z

CTRL+A, CTRL+B, CTRL+C ...

CTRL+0

CTRL+0

RIGHT MOUSE BUTTON

RIGHTMOUSE

LEFT MOUSE BUTTON

LEFTMOUSE

MOUSE BUTTON

MOUSE

Esc

Esc

Обычно в качестве 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 labelRIGHTARROW wait window "Right Arrow " + msg nowait

on key labelLEFTARROW wait window "Left Arrow " + msg nowait

on key labelUPARROW wait window "Up Arrow " + msg nowait

on key labelDNARROW wait window "Down Arrow " + msg nowait

&&

&& После нажатия на F9 будут сброшены все ON KEY LABEL-предписания

on key labelF9 on key

Команда

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

cONCommand

Команда

"ERROR"

ON ERROR

"ESCAPE"

ON ESCAPE

"KEY"

ON KEY LABEL

"PAGE"

ON PAGE

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 labelRIGHTARROW

Команда

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, чтобы соответственно прекратить, приостановить или продолжить выполнение программы.