Глава 11:Foundation READ

Для многих программистов наиболее интересным нововведением, появившимся в FoxPro 2.0, было Foundation READ. Возможность активизации меню при активном READ допускает вызов любого режима программы из любого места пока READ ожидает действий пользователя. Это верно, если вы будете разрабатывать функции с прицелом на такую функциональность.

FoxPro поставляется с несколькими примерами использования новой возможности языка. Иногда, правда, мне кажется, что программисты Fox Software настолько блестящи, что не представляют возможности простых людей. Я получил буквально сотни звонков с просьбой дать более простой пример.


Отыскивая интересное применение для Foundation READ, я сообразил, что программа, которую я посылаю потенциальным подписчикам, может служить замечательным примером. Я использовал сокращенный вариант меню, содержащего только необходимые опции. Программа позволяет пользователям перемещаться по базе данных до тех пор пока они не найдут все, что их интересует, затем распечатать заказ. В программе использованы средства поиска самого FoxPro FIND и FIND AGAIN для поиска текстовых фрагментов. Для подготовки счета я использую функции TEXTMERGE.

Пользователь должен нажать F10 для активизации меню. Вы можете выбрать любое количество уже вышедших номеров, отмечая те, что вам нужны, пробел снимает выделение. Кроме того, вы можете нажать клавишу для снятия всех отметок и начать сначала.



Программа

В Листинг 11-1(Программа Abstract) я ввел кусок для проверки работы программы на монохромном мониторе. Кроме того, я включил процедуру создания раскрывающегося окна, написанную Галеном Холлом для одного из выпусков журнала. И, наконец, я вывожу на экран заставку, так как в программах, управляемых предложениями READ, командное окно остается на экране при выполнении программы, и вам необходимо закрыть его.

Главная часть приложения, - структура, вызываемая предложением READ VALID, и переопределение _msysmenu, - представлены в Листинге 11-2(Основная часть программы Abstract)

Я предоставил пользователям возможность поиска по ключевому слову (Листинг 11-3(Функции поиска по ключевому слову)) для нахождения статей на определенную тему. Обратите внимание, что поиск не подразумевает нахождение подстроки в memo-поле. В данном случае его можно было бы использовать, учитывая относительно маленькое число записей (менее 100), обычно такой поиск работает слишком медленно.

Листинг 11-4(Программа создания раскрывающегося окна (любезно предоставлена Галеном Холлом)) содержит процедуру создания раскрывающегося окна. Она придает программе более привлекательный вид. Если вам доводилось видеть такие программы, как PROCOMM или Novell NetWare, весь дизайн построен вокруг такой идеи (и нескольких других).

При выборе опции Report программа создает отчет в файле на диске, после чего пользователь может просмотреть его самостоятельно или использовать средства поиска, вызываемые из меню. Опция поиска активна при активной команде MODI COMM, так что все, что вам нужно сделать, это включить ее в меню. Отчет выводится в файл только в том случае, когда файла не существует (Листинг 11-5( Вывод отчета на диск с возможностью просмотра и поиска участков текста)).

Код в Листинге 11-6( Диалог подтверждения выбора пользователя) организует стандартное диалоговое окно для получения подтверждения от пользователя. Этот диалог используется в нескольких местах программы. Некоторые пользователи предпочитают диалоги большего размера, но этот обладает необходимой гибкостью и не мешает, изменяя размер в соответствии с длиной выводимого текста.

FoxPro позволяет вам начать редактирование memo-поля, если вы нажмете Ctrl-PgDn, когда курсор находится на этом поле. Это неплохо, если у вас достаточная квалификация, но мои пользователи должной квалификации не имеют. Я использую ON KEY LABEL ENTER DO VIEWMEMO, и пусть думают, что это чудо (Листинг 11-7( Вывод содержимого memo-полей в окно по нажатию ENTER)).

У меня есть номера за три года со статьями на самые разные темы. Когда человек видит содержание, у него может появиться желание заказать несколько номеров. Список для выбора на базе BROWSE (Листинг 11-8(Список выбора на базе BROWSE)) не всегда наилучшее решение, но в данном случае он подходит прекрасно. Трюк заключается в том, что в в записи есть поле, единственное назначение которого - отмечать включение номера в список. Я ввожу в это поле символ 251 (галочка). В конце я суммирую цену во всех записях, имеющих галочку, и получаю цифру для счета. Если пользователь еще не ввел свой адрес, я спрашиваю откуда он, так как это влияет на стоимость доставки.

Экран оформления заказа создается кодом в Листинге 11-9, полученным с помощью конструктора экранов. Обратите внимание, что переменная m.action завершает выполнение READ.

Теперь, когда мы знаем что нужно, можно напечатать бланк заказа (Листинг 11-10( Программа печати заказа)). Программа также заглядывает в файл со списком ранее вышедших номеров для определения не нужно ли чего-нибудь дополнительно. В конце концов заказ выводится в файл на диске и предлагается для просмотра. Если пользователь удовлетворен, начинается печать командой TYPE TO PRINT. Из многочисленных способов вывода информации на принтер этой часто оказывается предпочтение; сеть может подавиться командой DOS PRINT.

Заключение

Программа была написана с определенной целью. Используя меню в стиле Lotus я мог бы дать пользователям тот же набор функций. Однако, приведенная программа работает гладко, и в ее работе легко разобраться, использование Foundation READ значительно облегчает программирование.

Вы можете посчитать этот пример более наглядным, по сравнению с другими сложными программами. Когда вы поймете принцип работы, вам будет просто построить базовую модель. Я все больше и больше начинаю ценить их возможности; пользователи привыкают к ним очень быстро. Не знаю, останется ли такая возможность уникальной для FoxPro, но несомненно, Fox Software значительно облегчили их применение.

Я надеюсь, что примеры и принципы построения интерфейса, приведенные в этой книге, дали вам достаточное представление о возможностях языка FoxPro 2.0. Что касается меня, то я многому научился когда писал ее. (Могу заверить, что учитель узнает больше учеников, но не могу рекомендовать всем писать книги. К счастью, мне необходимо практиковаться для дачи консультаций.)

Подозреваю, что к концу 1993 года Fox-разработчики будут создавать приложения, подобных которым мы еще не видели. Кто-то где-то придумывает новые и неожиданные решения, увидев реализацию которых мы будем хлопать себя по лбу в отчаянье от того, что не мы являемся их авторами. Если у вас есть стоящие идеи, которыми вы готовы поделиться, я жду контактов с вами. Это одна из действительно прекрасных сторон программирования.