Вывод сообщений в Microsoft Visual FoxPro
« Назад Функция MESSAGEBOX(eMessageText [, nDialogBoxType]
|
Значение |
Описание |
Кнопки |
|
0 |
Только кнопка OK (по умолчанию) |
1 |
Кнопки OK и Отмена |
2 |
Кнопки Прервать, Повтор и Пропустить |
3 |
Кнопки Да, Нет и Отмена |
4 |
Кнопки Да и Нет |
5 |
Кнопки Повтор и Отмена |
Иконки |
|
16 |
Знак Stop |
32 |
Вопросительный знак |
48 |
Восклицательный знак |
64 |
Информация (i-иконка) |
Кнопка по умолчанию |
|
0 |
Первая кнопка |
256 |
Вторая кнопка |
512 |
Третья кнопка |
Значение параметра nDialogBoxType может быть сумой трех величин, взятых из разных частей таблицы, например задание 4 + 48 + 0 означает, что в диалоге присутствуют кнопки Да и Нет, картинка восклицательного знака, а при открытии диалога выбирается кнопка Да.
Взамен цифр можно употребить соответствующие константы, определенные в файле FoxPro.h. Так, величина 52 (4 + 48 + 0) может быть задана следующим образом:
MB_YESNO + MB_ICONEXCLAMATION + MB_DEFBUTTON1
cTitleBarText – текст заголовка диалога. Если параметр опущен, в заголовке разместится текст Microsoft Visual FoxPro.
nTimeout – время существования диалога (в миллисекундах). Если параметр меньше 1 или отсутствует, то диалог будет открыт до тех пор, пока не нажата одна из его кнопок.
Функция в зависимости от нажатой кнопки возвращает одно из приведенных в табл. 4.8 чисел.
Таблица 4.8
Возвращаемые значения
Результат |
Нажата кнопка |
1 |
OK |
2 |
Cancel (Отмена) |
3 |
Abort (Прервать) |
4 |
Retry (Повтор) |
5 |
Ignore (Пропустить) |
6 |
Yes (Да) |
7 |
No (Нет) |
В диалоге с кнопкой Cancel нажатие Esc равносильно нажатию Cancel.
Функция MESSAGEBOX( ) вернет –1, если диалог закрыт по причине истечения срока его существования.
Замечание. Наименьшее сокращение имени функции – MESSAGEB( ).
Если второй параметр функции имеет тип Numeric, то он воспринимается как nDialogBoxType, однако если этот параметр имеет тип Character, то он трактуется как cTitleBarText. Если третий параметр имеет тип Numeric, то функция считает, что это nTimeout. Таким образом, правильно выполнены все следующие вызовы функции MESSAGEBOX( ).
MessageBox("Привет!", "Заголовок диалога", 0, 1000)
MessageBox("Привет!", 0, "Заголовок диалога", 1000)
MessageBox("Привет!", 0, 1000)
MessageBox("Привет!", 0, 1000, "Заголовок диалога")
Пример:
&& Выводится приведенный на рис. 4.7 диалог
&&
#include FoxPro.h
fileName = 'd:\b.txt'
if not File(fileName) then
createFile = MessageBox("Файл не найден и будет создан!", ;
MB_YESNO + MB_ICONEXCLAMATION + MB_DEFBUTTON1, ;
"Результаты поиска файла")
else
createFile = IDYES
endif
Рис. 4.7. Пример MessageBox-диалога
Функция
INPUTBOX(cInputPrompt [, cDialogCaption [, cDefaultValue
[, nTimeout [, cTimeoutValue [, cCancelValue]]]]))
открывает модальный диалог, используемый в том числе параметризованным видом, для ввода одной строки.
Параметры:
cInputPrompt – подсказка, отображаемая над полем ввода.
cDialogCaption – заголовок диалога.
cDefaultValue – значение, отображаемое в поле ввода при открытии диалога; если нажата кнопка Cancel, то функция вернет cDefaultValue.
nTimeout – время в миллисекундах существования диалога; если параметр не задан, то диалог закрывается при нажатии на OK или Cancel.
cTimeoutValue – значение, возвращаемое функцией, когда диалог закрывается в результате превышения nTimeout. Если параметр не задан и время nTimeout превышено, то функция вернет пустую строку.
cCancelValue – задает символьную строку, возвращаемую, если пользователь покинул диалог, выбрав кнопку Cancel или нажав на Esc.
Пример:
st = "Начальное значение"
&& Открытый диалог приведен на рис. 4.8
st = InputBox("Введите строку", "Ввод", st, 3000, "Время истекло")
Рис. 4.8. Диалог ввода строки
Команда
ASSERT lExpression [MESSAGE cMessageText]
выводит сообщение cMessageText в ASSERT-диалоге. Вывод осуществляется, когда выражение lExpression вычисляется со значением .F.
Если сообщение cMessageText не задано, то выводится сообщение по умолчанию (рис. 4.9).
Рис. 4.9. ASSERT-диалог с сообщением по умолчанию
VFP генерирует ошибку, если тип параметра lExpression отличен от Logical.
Команда ASSERT игнорируется, если SET ASSERTS установлен в OFF (задано по умолчанию), и выполняется при установке SET ASSERTS в ON.
Команда ASSERT игнорируется в распространяемых приложениях.
Действия, инициируемые кнопками диалога, описаны в табл. 4.9.
Таблица 4.9
Кнопки диалога и их действия
Кнопка |
Действие |
Debug |
Выполнение программы приостанавливается; появляются окна отладчика с активным окном трассировки |
Cancel |
Выполнение программы завершается |
Ignore |
Выполнение программы продолжается начиная со строки, следующей за выполненной командой ASSERT |
Ignore All |
Выполнение программы продолжается начиная со строки, следующей за выполненной командой ASSERT, и SET ASSERTS устанавливается в OFF. Последующие команды ASSERT игнорируются, пока SET ASSERTS не будет установлен в ON |
Команда применяется на этапе отладки, например для проверки значений переменных:
set asserts on
x = –2.5
assert x >= 0 message "Аргумент функции SQRT( ) меньше нуля"
y = Sqrt(x)
Команда
WAIT [eMessageText] [TO VarName] [WINDOW [AT nRow, nColumn]]
[NOWAIT] [CLEAR | NOCLEAR] [TIMEOUT nSeconds]
выводит сообщение в окно VFP и приостанавливает, если не задана опция NOWAIT, выполнение программы до тех пор, пока не нажата любая клавиша клавиатуры или кнопка мыши.
Опции и параметры:
eMessageText – выводимое сообщение. Может быть любого типа. Если выражение eMessageText не имеет тип Character, то оно преобразовывается в этот тип автоматически неявно используемой функцией TRANSFORM( ). Если параметр eMessageText отсутствует, то выводится сообщение по умолчанию (рис. 4.10).
Рис. 4.10. Wait-сообщение по умолчанию
Если на месте eMessageText задана строка нулевой длины (""), wait-сообщение не появляется, однако программа приостанавливается до нажатия клавиши клавиатуры или кнопки мыши.
TO VarName – сохраняет символ, соответствующий нажатой клавише. Если переменная VarName не существует, то она будет создана. Если нажата клавиша Enter или клавиша (комбинация клавиш), соответствующая неотображаемому на экране символу, например Esc, то в VarName будет помещена строка нулевой длины.
WINDOW – обеспечивает вывод сообщения в окне, размещенном в главном окне VFP. По умолчанию wait-сообщение появляется в правом верхнем углу главного окна. Окно с wait-сообщением, наряду с другими окнами VFP, временно может быть спрятано путем нажатия кнопки CTRL или SHIFT. Шрифт и его атрибуты, используемые при выводе сообщения, устанавливаются на закладке "Оформление" окна "Экран" контрольной панели Windows после нажатия на кнопку "Дополнительно" и выбора элемента "Окно сообщения".
AT nRow, nColumn – задает позицию (номер строки и столбца) левого верхнего угла wait-окна. Начало координат находится в верхнем левом углу экрана. Позиция задается, если задана опции WINDOW.
NOWAIT – обеспечивает продолжение выполнения программы сразу после появления wait-сообщения. Сообщение пропадет после нажатия на клавишу клавиатуры, кнопку мыши или в результате перемещения мыши.
CLEAR – удаляет системное окно VFP или wait-окно. Применяется, например, для удаления wait-окна, активизированного перед запуском продолжительного процесса, после его завершения, например:
close tables all
tableName = 'd:\HomeLibrary\Test.dbf'
if File(tableName) then
use (tableName) in 0 exclusive
wait "Упаковка таблицы Test..." window nowait noclear
pack
wait clear
else
MessageBox("Файл " + tableName + " не найден!")
endif
NOCLEAR – обеспечивает сохранность wait-окна до выполнения WAIT CLEAR или новой команды WAIT.
TIMEOUT nSeconds – число секунд, на которое появляется wait-окно. Время существования wait-окна будет меньше, если до истечения nSeconds нажата клавиша клавиатуры или кнопка мыши. Опция TIMEOUT должна быть последней в команде WAIT; в противном случае VFP генерирует ошибку. Нажатие на Esc при заданной опции TIMEOUT приведет к ошибке INTERRUPTED.
Команда
SET TALK ON | OFF | WINDOW [WindowName] | NOWINDOW
устанавливает режим отображения результатов выполнения команд VFP в главном окне VFP, окне для системных сообщений, пользовательском окне или статус-строке.
Опции и параметр:
ON – (по умолчанию) разрешает вывод информации о ходе выполнения команды VFP. Если SET TALK устанавливается в ON повторно после выполнения SET TALK OFF, то место вывода берется из более ранней установки SET TALK.
OFF – запрещает вывод результатов выполнения команд VFP (задается по умолчанию для внутренних DLL-процессов серверов автоматизации).
WINDOW [WindowName] – задет, если указан параметр WindowName, пользовательское окно, в которое направляются talk-сообщения. Окно должно быть создано до выполнения команды VFP, о ходе работы которой посылаются сообщения. Если окно не существует, то talk-результаты направляются в системное окно VFP.
NOWINDOW – talk-вывод направляется в главное окно VFP.
Статус-информацию – сведения о процессе своего выполнения сообщают следующие, работающие с DBF-таблицами команды VFP:
APPEND FROM |
AVERAGE |
CALCULATE |
COPY TO |
COUNT |
DELETE |
DELETE - SQL |
INDEX |
INSERT - SQL |
PACK |
RECALL |
REINDEX |
REPLACE |
REQUERY |
SELECT - SQL |
SORT |
SUM |
TOTAL |
UPDATE - SQL |
|
Команда
SET ODOMETER TO [nRecords]
задает интервал между сообщениями.
По умолчанию SET ODOMETER установлен в 100, то есть поступает информация о каждой сотне обработанных записей.
Время выполнения команд снижается при установке SET TALK в ON из-за необходимости обновления окна VFP, принимающего talk-сообщения. Частота обновлений тем выше, чем меньше значение параметра nRecords, задающего размер порции записей, после обработки которой выполняется talk-вывод. Диапазон изменения nRecords от 1 до 32767.
В большинстве случаев приемлемо установить SET TALK в OFF и проинформировать об общем числе обработанных или полученных (в результате выборки, упаковки) записей. Его после завершения процесса обработки хранит системная переменная _TALLY (при запуске приложения ее значение равно 0).
Пример 1. Выполняется удаление некоторых записей таблицы Test.dbf. В созданное talkWindow благодаря установке SET TALK в ON выводятся сообщения вида "nRecords deleted".
set talk on
set talk window talkWindow
define window talkWindow at 10, 10 size 3, 40;
in desktop system title "Talk-окно"
activate window talkWindow
delete for Empty(dateTime)
release windows talkWindow
Пример 2. Выполняется удаление некоторых записей таблицы Test.dbf. Число удаленных записей хранит системная переменная _TALLY. Если она больше нуля, то производится упаковка таблицы Test.dbf' и выводится сообщение о числе оставшихся в таблице записей.
close tables all
use d:\HomeLibrary\Test.dbf in 0 exclusive
wait "Обработка таблицы Test..." window nowait
&& Отказываемся от вывода talk-сообщений
set talk off
delete for Empty(DateTime)
&& Если число удаленных записей больше 0, то выполняем упаковку таблицы
if _TALLY > 0 then
&& Ранее удаленные записи таблицы в число _TALLY включены не будут
pack
wait "В таблице осталось " + Transform(_TALLY) + " записей" window
endif
Установки SET TALK сохраняются с текущей сессией данных.
Команда
SET MESSAGE TO [cMessageText]
или
SET MESSAGE TO [nRow [LEFT | CENTER | RIGHT]]
или
SET MESSAGE WINDOW [WindowName]
выводит сообщение в статус-строку или иное предусмотренное командой место.
Опции и параметры:
TO [cMessageText] – задает текст сообщения. Для удаления сообщения выполняется SET MESSAGE TO.
TO [nRow [LEFT | CENTER | RIGHT]] – задает место вывода сообщения. В опции параметр nRow – это номер строки экрана, LEFT | CENTER | RIGHT – способ выравнивания сообщения в строке nRow. Сообщение не выводится, если nRow = 0. Задаваемая опцией TO строка игнорируется, если SET STATUS BAR установлен в ON.
WINDOW [WindowName] – задает окно для вывода сообщения. Для удаления сообщения выполняется SET MESSAGE WINDOW.
Положение и окно указываются для сообщений, определенных с командами DEFINE BAR, DEFINE MENU, DEFINE PAD и DEFINE POPUP (опция MESSAGE cMessageText).
Команда
SET STATUS ON | OFF
отображает (ON) или скрывает (OFF) текстовую строку состояний. По умолчанию действует OFF.
В строке состояний отображается имя исполняемой программы, псевдоним активной таблицы, номер ее текущей записи, число записей в таблице, состояние клавиш NumLock и CapsLock, статус блокировки записи или таблицы.
Команда
SET STATUS BAR ON | OFF
отображает (ON) или скрывает (OFF) графическую строку состояний. По умолчанию действует ON.
Функция
SET(cSETCommand [, 1 | cExpression | 2 | 3 | 4])
возвращает установку SET-команды, заданной параметром cSETCommand, например:
set space on
? Set("SPACE") && Напечатает: ON
Возвращаемый результат имеет символьный или числовой тип.
Параметр:
1 | cExpression | 2 | 3 | 4 – обеспечивает получение дополнительной информации о SET-команде. Задание 1 или cExpression равносильно (здесь cExpression – любое символьное выражение).
Дополнительная информация возвращается только для приведенных в табл. 4.10 команд.
Таблица 4.10
Варианты получения дополнительных данных о SET-команде
Параметры |
Возвращаемое функций значение |
ALTERNATE |
ON или OFF |
ALTERNATE, 1 |
Имя текстового файла для альтернативного вывода данных |
BELL, 1 |
Имя звукового файла |
CARRY |
ON или OFF |
CENTURY |
ON или OFF |
CENTURY, 1 |
Номер столетия |
CENTURY, 2 |
Начало столетия |
CENTURY, 3 |
Системная установка календаря; SET("CENTURY", 3) передает число 2 (грегорианский календарь U.S.) Windows API-функции GetCalendarInfo( ) |
CLOCK |
ON или OFF |
CLOCK, 1 |
Координаты расположения системных часов |
COMPATIBLE |
ON или OFF |
COMPATIBLE, 1 |
PROMPT или NOPROMPT |
COVERAGE, 1 |
Имя файла |
CURRENCY |
LEFT или RIGHT |
CURRENCY, 1 |
Символ валюты |
DATE |
AMERICAN, ANSI, BRITISH/FRENCH, GERMAN, ITALIAN, JAPAN, USA, MDY, DMY или YMD |
DATE, 1 |
Порядок отображения даты: 0 – МДГ; 1 – ДМГ; 2 – ГМД |
DELIMITERS |
ON или OFF |
DELIMITERS, 1 |
Символ разделителя |
EVENTTRACKING |
ON или OFF |
EVENTTRACKING, 1 |
Имя файла |
FIELDS |
ON или OFF |
FIELDS, 1 |
Имя поля 1, имя поля 2, ... |
FIELDS, 2 |
LOCAL или GLOBAL |
HELP |
ON или OFF |
HELP, 1 |
Имя файла |
HELP, 2 |
URL-коллекция |
HELP, 3 |
SYSTEM |
KEY |
Диапазон изменения индексного выражения |
KEY, 1 |
Левая граница диапазона изменения индексного выражения |
KEY, 2 |
Правая граница диапазона изменения индексного выражения |
MESSAGE |
Номер строки вывода сообщения |
MESSAGE, 1 |
Текст сообщения |
MOUSE |
ON или OFF |
MOUSE, 1 |
Чувствительность |
NOTIFY |
ON или OFF |
NOTIFY, 1 |
ON или OFF |
PRINTER |
ON или OFF |
PRINTER, 1 |
Имя файла или имя порта |
PRINTER, 2 |
Windows-принтер по умолчанию |
PRINTER, 3 |
VFP-принтер по умолчанию; задается в VFP-диалоге Print или Print Setup |
REFRESH |
Промежуток (в секундах) между обновлениями Browse-окна или окна редактирования memo-поля |
REFRESH, 1 |
Промежуток (в секундах) между обновлениями локального буфера в вычислительной сети |
REPROCESS |
Установка текущей сессии данных |
REPROCESS, 1 |
Установка системной сессии данных |
REPROCESS, 2 |
Тип установки текущей сессии данных; 0 или 1 |
REPROCESS, 3 |
Тип установки системной сессии данных; 0 или 1 |
RESOURCE |
ON или OFF |
RESOURCE, 1 |
Им файла ресурсов |
TALK |
ON или OFF |
TALK, 1 |
WINDOW, NOWINDOW или имя окна |
TEXTMERGE |
ON или OFF |
TEXTMERGE, 1 |
Левый и правый разделители |
TEXTMERGE, 2 |
Имя файла, принимающего текст |
TEXTMERGE, 3 |
SHOW или NOSHOW |
TEXTMERGE, 4 |
Уровень вложенности TEXT ... ENDTEXT |
TOPIC |
Имя темы Help или выражение, по которому выбираются темы |
TOPIC, 1 |
Идентификатор темы Help |
Функция распознает 4-символьные сокращения опций SET-команд, за исключением опции HELPFILTER, которая может быть сокращена только до 5 символов. Регистр при задании имени SET-команды параметром cSETCommand не имеет значения.
Пример:
set printer on
Set("PRIN") && Напечатает: ON
Set("printer") && Напечатает: ON
Функции SET( ) и SYS(2001) идентичны.
Функция
SYS(2001, cSETCommand [, 1 | 2])
возвращает статус SET-команды, заданной параметром cSETCommand. Возвращаемый результат имеет символьный тип.
Параметр:
1 | 2 – обеспечивает получение дополнительной информации о SET-команде.
Дополнительная информация возвращается только для приведенных в табл. 4.10 команд.
Пример:
&& Таблица Test уже открыта. Она имеет символьный индекс Ind
select Test
set order to Ind
set key to range "Lower", "Upper"
? Sys(2001, "KEY") && Напечатает: Lower, Upper
? Set("KEY", 1) && Напечатает: Lower
? Set("KEY", 2) && Напечатает: Upper