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

Вывод сообщений в Microsoft Visual FoxPro

« Назад

Функция

MESSAGEBOX(eMessageText [, nDialogBoxType]
[, cTitleBarText] [, nTimeout])

выводит диалог, содержащий сформированное пользователем сообщение.

Параметры:

eMessageText – текст, появляющийся в диалоге. Если выражение eMessageText не имеет тип Character, то оно преобразовывается в этот тип автоматически, неявно используя функцию TRANSFORM( ).

Текст eMessageText разбивается на строки в результате применения в нем символа возврата каретки CHR(13), например:

MessageBox("а" + Chr(13) + "б")

nDialogBoxType – тип диалога. Задает кнопки и иконки, появляющиеся в диалоге. В табл. 4.7 значения 0 – 5 используются для задания кнопок диалога; 16, 32, 48 и 64 – для задания его иконок; 0, 256 и 512 – для указания кнопки по умолчанию, то есть кнопки выбираемой при открытии диалога.

Таблица 4.7

Значения, применяемые для задания 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

75.1.-Пример-MessageBox-диалога

Рис. 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, "Время истекло")

75.2.-Диалог-ввода-строки

Рис. 4.8. Диалог ввода строки

Команда

ASSERT lExpression [MESSAGE cMessageText]

выводит сообщение cMessageText в ASSERT-диалоге. Вывод осуществляется, когда выражение lExpression вычисляется со значением .F.

Если сообщение cMessageText не задано, то выводится сообщение по умолчанию (рис. 4.9).

75.3.-ASSERT-диалог-с-сообщением-по-умолчанию

Рис. 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).

75.4.-Wait-сообщение-по-умолчанию

Рис. 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-команде

Параметры
функции 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