Виведення повідомлень у FoxPro Microsoft Visual FoxPro - 261 питання
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 – для вказівки кнопки за замовчуванням, тобто кнопки, що вибирається при відкритті діалогу.
Значення, що застосовуються для завданняnDialogBoxType
Тільки кнопка OK (за замовчуванням)
Кнопки OK та Скасувати
Кнопки Перервати, Повторити та Пропустити
Кнопки Так, Ні та Скасування
Кнопки Так і Ні
Кнопки Повторення та Скасування
Кнопка за замовчуванням
Значення параметраnDialogBoxTypeможе бути сумою трьох величин, взятих з різних частин таблиці, наприклад завдання 4 + 48 + 0 означає, що в діалозі присутні кнопки Так і Ні, картинка знака оклику, а при відкритті діалогу вибирається кнопка Так .
Замість цифр можна використати відповідні константи, визначені у файлі FoxPro.h. Так, величина 52 (4 + 48 + 0) може бути задана таким чином:
MB_YESNO + MB_ICONEXCLAMATION + MB_DEFBUTTON1
cTitleBarText– текст заголовка діалогу. Якщо параметр опущено, у заголовку розміститься текстMicrosoft Visual FoxPro.
nTimeout– час існування діалогу (у мілісекундах). Якщо параметр менше 1 або відсутній, діалог буде відкритий доти, доки не натиснута одна з його кнопок.
Функція залежно від натиснутої кнопки повертає одне з наведених у таблиці. 4.8 чисел.
У діалозі з кнопкою 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 діалог
якщо немає File(fileName) then
createFile = MessageBox("Файл не знайдено і буде створено!", ;
MB_YESNO + MB_ICONEXCLAMATION + MB_DEFBUTTON1, ;
"Результати пошуку файлу")

Мал. 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. Діалог введення рядка
ASSERTlExpression[MESSAGEcMessageText]
виводить повідомленняcMessageTextв ASSERT-діалозі. Висновок здійснюється, коли виразlExpressionобчислюється зі значенням .F.
Якщо повідомленняcMessageTextне задано, виводиться повідомлення за замовчуванням (рис. 4.9).
Мал. 4.9. ASSERT-діалог із стандартним повідомленням
VFP генерує помилку, якщо тип параметраlExpressionвідрізняється від Logical.
Команда ASSERT ігнорується, якщо SET ASSERTS встановлено у OFF (задано за замовчуванням), і виконується під час встановлення SET ASSERTS у ON.
Команда ASSERT ігнорується в програмах, що розповсюджуються.
Дії, які ініціюються кнопками діалогу, описані в табл. 4.9.
Кнопки діалогу та їх дії
Виконання програми припиняється; з'являються вікна відладчика з активним вікномтрасування
Виконання програми завершується
Виконання програми продовжується починаючи з рядка, наступного за виконаною командою ASSERT
Виконання програми продовжується починаючи з рядка, наступного за виконаною командою ASSERT, та SET ASSERTS встановлюється у OFF. Наступні команди ASSERT ігноруються, доки SET ASSERTS не буде встановлений у ON
Команда застосовується на етапі налагодження, наприклад, для перевірки значень змінних:
assert x >= 0 message "Аргумент функції SQRT( ) менший за нуль"
WAIT [eMessageText] [TOVarName] [WINDOW [ATnRow,nColumn]] [NOWAIT] [CLEAR NOCLEAR ] [TIMEOUTnSeconds]
виводить повідомлення у вікно VFP і зупиняє, якщо не задана опція NOWAIT, виконання програми, доки не натиснута будь-яка клавіша клавіатури або кнопка миші.
Опції та параметри:
eMessageText– повідомлення, що виводиться. Можливо будь-якого типу. Якщо виразeMessageTextне має тип Character, він перетворюється на цей тип автоматично неявно використовуваної функцією TRANSFORM( ). Якщо параметрeMessageTextвідсутній, виводиться повідомлення за замовчуванням (рис. 4.10).
Мал. 4.10. Wait-повідомлення за замовчуванням
Якщо на місціeMessageTextвстановлено рядок нульової довжини (""), wait-повідомлення не з'являється, проте програма припиняється до натискання клавіші клавіатури або кнопки миші.
TOVarName– зберігає символ, який відповідає натиснутій клавіші. Якщо зміннаVarNameне існує, вона буде створена. Якщо натиснута клавіша Enter або клавіша (комбінація клавіш), що відповідає символу, що не відображається на екрані, наприклад Esc, тоVarNameбуде поміщений рядок нульової довжини.
WINDOW – забезпечує виведення повідомлення у вікні, розміщеному у головному вікні VFP. За промовчанням wait-повідомлення з'являється у верхньому правому куті головного вікна. Вікно з wait-повідомленням, поряд з іншими вікнами VFP, може бути тимчасово заховано шляхом натискання кнопки CTRL або SHIFT. Шрифт та його атрибути, які використовуються під час виведення повідомлення, встановлюються на закладці "Оформлення" вікна "Екран" контрольної панелі Windows після натискання на кнопку "Додатково" та вибору елемента "Вікно повідомлення".
ATnRow,nColumn– задає позицію (номер рядка та стовпця) лівого верхнього кута wait-вікна. Початок координат знаходиться у верхньому лівому куті екрана. Позиція задається, якщо встановлено опцію WINDOW.
NOWAIT – забезпечує продовження виконання програми одразу після появи wait-повідомлення. Повідомлення пропаде після натискання клавіші клавіатури, кнопку миші або в результаті переміщення миші.
CLEAR – видаляє системне вікно VFP або wait-вікно. Застосовується, наприклад, для видалення wait-вікна, активованого перед запуском тривалого процесу, після його завершення, наприклад:
close tables all
if File(tableName) then
use (tableName) in 0 exclusive
wait "Упаковка таблиці Test. " window nowait noclear
MessageBox("Файл" + tableName + "не знайдено!")
NOCLEAR – забезпечує збереження wait-вікна до виконання WAIT CLEAR чи нової команди WAIT.
TIMEOUTnSeconds– число секунд, на яке з'являється wait-окно. Час існування wait-окна буде меншим, якщо до закінченняnSecondsнатиснута клавіша клавіатури або кнопка миші. Опція TIMEOUT має бути останньою у команді WAIT; інакше VFP генерує помилку. Натискання на Esc за заданої опції TIMEOUT призведе до помилки INTERRUPTED.
SET TALK ONOFF 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: