Головной модуль – это
программа, управляющая ходом работы приложения. Включает в себя, как правило,
настройку среды Visual FoxPro, описание глобальных переменных, создание главного
меню программного комплекса и запуск обработчика событий.
Перед тем как
приступить к созданию головного модуля, необходимо спроектировать систему меню.
Состав меню невозможно определить без учета конкретных задач, для решения
которых предназначено разрабатываемое приложение. Параллельно с определением
состава данных необходимо определить те средства, которые получит пользователь
при работе с программным комплексом.
Для создания меню
можно воспользоваться как конструктором, так написанием кода. Мне больше
нравится второй способ. Но вначале нарисуем вид меню на бумаге, обязательно
обсудив его структуру с заказчиком. Пока меню не превратилось в строчки кода,
внести в него изменения гораздо проще. На рис. 4.1 приведен эскиз главного меню
программного комплекса Real Estate,
согласованный с заказчиком.
Текст головного
модуля, реализующий это меню, имеет вид:
*****************************************
RealEstate.prg ********
* Учебный пример
к книге
*
* Гурвиц Г.А.
"Разработка реального приложения *
* с
использованием Microsoft Visual
FoxPro 9.0" *
* Учебное
пособие. - Хабаровск: Изд-во ДВГУПС, 2007. *
*****************************************************************
*
* Внесение
изменений в системные настройки Visual FoxPro
CLEAR MACROS && Отмена системных назначений
клавиш F1-F12
SET RESOURCE
ON && Cохранять настройки
&& в таблице Foxuser.dbf
SET EXCLUSIVE
OFF && Базы данных доступны
всем
SET MULTILOCKS
ON && Блокировка нескольких записей
сразу
SET TALK OFF && Не отображать результаты
выполнения
&& команд APPEND, AVERAGE,CALCULATE и др.
SET DATE GERMAN && Тип общепринятой в России
даты
SET CENTURY
ON && Столетие полностью
SET DELETED
ON && Помеченные к удалению
записи невидимы
SET SAFETY OFF && Не выдавать запрос на уничтожение
SET STATUS BAR
OFF && Не показывать нижнюю статусную
строку
* Подключение
первого файла, содержащего процедуры
* FileProc - имя файла
SET PROCEDURE TO FileProc
* Подключение второго и последующих
* SET PROCEDURE TO <имя файла> ADDITIVE
* SET PROCEDURE TO <имя файла> ADDITIVE
* Пути поиска
SET PATH TO DBF,USER,FORM,BOOK,ICO,REPORT,INFO,PROGRAM,HELP
* Вызов
процедуры описания глобальных переменных
SET HELP TO RealEstate.chm
DO ADJUSTMENT && Находится в файле FileProc
* Состояние памяти
ON KEY LABEL F2 DO
DisplayMemory
* Распределение рабочих областей Visual FoxPro
ON KEY LABEL CTRL+F2
DO FORM AreaWork
* Модификация главного окна FOX PRO
_SCREEN.CAPTION=[Учебный пример Real Estate]
_SCREEN.ICON=[Title.ICO]
_SCREEN.MINBUTTON=.T. && Есть кнопка свертывания
_SCREEN.MAXBUTTON=.T. && Есть кнопка развертывания
_SCREEN.WINDOWTYPE=1 && Тип окна
ON ERROR DO ERRORHND && Вызов процедуры обработки
ошибок
* Создание папки
для временных выборок
* Если папка уже
имеется на компьютере, то возникнет ошибка
* с кодом 1961.
Она будет перехвачена процедурой ERRORHND,
* которая находится в процедурном файле FileProc
* В правом углу
экрана появится приглашение к работе
*-----------------------------------------------------*
* Папка для временных файлов C:\WINNT\TEMP
имеется! *
* Можно работать! *
*-----------------------------------------------------*
MKDIR C:\WINNT
MKDIR C:\WINNT\TEMP
* Определение
размеров главного окна программного комплекса
* в зависимости
от разрешения дисплея рабочей станции
DO CASE
CASE SYSMETRIC(1)=1600 && 1600*1280 пикселей
_SCREEN.HEIGHT=1272
_SCREEN.WIDTH=1588
CASE SYSMETRIC(1)=1280 && 1280*1024 пикселей
_SCREEN.HEIGHT=970
_SCREEN.WIDTH=1272
CASE SYSMETRIC(1)=1024 && 1024*768 пикселей
_SCREEN.HEIGHT=710
_SCREEN.WIDTH=1016
CASE SYSMETRIC(1)=800 && 800*600 пикселей
_SCREEN.HEIGHT=540
_SCREEN.WIDTH=795
ENDCASE
_SCREEN.WINDOWSTATE=2 &&
2-Развернуть во весь экран 0-назад
_SCREEN.AUTOCENTER=.F. && Размещение НЕ по центру
экрана
_SCREEN.BORDERSTYLE=3 && Обрамление двойная линия
* Цвет фона
_SCREEN.BackColor=RGB(192,192,192)
* Размещение
картинки в главном окне программного комплекса
IF FILE('C:\WINNT\TEMP\PICTURE.JPG')
_SCREEN.PICTURE=[C:\WINNT\TEMP\PICTURE.JPG]
ENDIF
_SCREEN.FONTNAME=[ARIAL CYR] && Шрифт
_SCREEN.FONTSIZE=9 && Размер шрифта
_SCREEN.ICON=[HOUSE.ICO] && Иконка
* Подтверждение выхода
из программы
* Запуск
процедуры REALQUIT при закрытии окна Visual FoxPro
ON SHUTDOWN DO
REALQUIT
SET SYSMENU TO && Использование главного меню
*DO FORM
LOGIN && Запуск формы
контроля доступа
SuperVisor=.T.
IF SuperVisor=.F.
* Идентификация не выполнена
DO STOP && Завершение работы
ENDIF
SET SYSMENU
ON &&
Работа со строкой главного меню
* Замена меню FoxPro на собственное
* Определение
заголовков создаваемого меню
* PROMPT
"\<Текст" - текст, появляющийся в строке меню
DEFINE PAD POINT1 OF _MSYSMENU PROMPT "\<Поддержка"
DEFINE PAD POINT2 OF _MSYSMENU PROMPT "\<Информация"
DEFINE PAD POINT3 OF _MSYSMENU PROMPT "\<Здания"
DEFINE PAD POINT4 OF _MSYSMENU PROMPT "\<Справочники"
DEFINE PAD POINT5 OF _MSYSMENU PROMPT "\<Выход"
* При переходе в
пункт 1 меню показать POPUP-меню "Поддержка"
ON PAD POINT1 OF _MSYSMENU ACTIVATE POPUP SUPPORT
* При переходе в
пункт 2 меню показать POPUP-меню "Информация"
ON PAD POINT2 OF _MSYSMENU ACTIVATE POPUP INFORMATIONS
* При переходе в
пункт 3 меню показать POPUP-меню "Здания"
ON PAD POINT3 OF _MSYSMENU ACTIVATE POPUP BUILDING
* При переходе в
пункт 4 меню показать POPUP-меню "Справочники"
ON PAD POINT4 OF _MSYSMENU ACTIVATE POPUP DICTIONARY
* При выборе
5-го пункта меню запустить процедуру STOP
ON SELECTION PAD POINT5 OF _MSYSMENU DO STOP
* Описание POPUP-меню "Поддержка"
DEFINE POPUP SUPPORT MARGIN FONT [Arial
Cyr],11
DEFINE BAR 1 OF SUPPORT PROMPT "\<Смена картинки";
SKIP FOR ChangePicture=.F.
DEFINE BAR 2 OF SUPPORT PROMPT "Смена \<пароля";
SKIP FOR ChangePassword=.F.
DEFINE BAR 3 OF SUPPORT PROMPT "\<Задержка при поиске"
DEFINE BAR 4 OF SUPPORT PROMPT "\<Удаленные записи";
SKIP FOR SetDeleted=.F.
DEFINE BAR 5 OF SUPPORT PROMPT "Календарь \<ежедневник"
DEFINE BAR 6 OF SUPPORT PROMPT "\<Калькулятор"
DEFINE BAR 7 OF SUPPORT PROMPT "\<Выход"
* При выборе
1-го пункта меню запустить форму ChangPic
ON SELECTION BAR 1 OF SUPPORT DO FORM ChangPic
* При выборе
2-го пункта меню запустить форму PassWord
ON SELECTION BAR 2 OF SUPPORT DO FORM PassWord
* При выборе 3-го
пункта меню запустить форму Adjust
ON SELECTION BAR 3 OF SUPPORT DO FORM Adjust
* При переходе в
пункт 4 меню показать POPUP-меню SETDEL
ON BAR 4 OF SUPPORT ACTIVATE POPUP SETDEL
* При выборе
5-го пункта меню запустить процедуру
ON SELECTION BAR 5 OF SUPPORT DO CALENDAR
ON SELECTION BAR 6 OF SUPPORT DO CALCULATOR
ON SELECTION BAR 7 OF SUPPORT DO STOP
* Описание
POPUP-меню "Удаленные записи"
DEFINE POPUP SETDEL MARGIN FONT [Arial
Cyr],11
DEFINE BAR 1 OF SETDEL PROMPT "\<Удаленные записи видимы"
DEFINE BAR 2 OF SETDEL PROMPT "Удаленные \<записи НЕвидимы"
ON SELECTION BAR 1 OF SETDEL SET DELETE OFF
ON SELECTION BAR 2 OF SETDEL SET DELETE ON
* Описание POPUP-меню "Информация"
DEFINE POPUP INFORMATIONS
MARGIN FONT [Arial Cyr],11
DEFINE BAR 1 OF INFORMATIONS PROMPT "Об \<авторе"
DEFINE BAR 2 OF INFORMATIONS PROMPT "\<О компьютере"
DEFINE BAR 3 OF INFORMATIONS PROMPT "О \<заполнении таблиц";
SKIP FOR CountRecords=.F.
DEFINE BAR 4 OF INFORMATIONS PROMPT "О \<правах доступа";
SKIP FOR RightAccess=.F.
DEFINE BAR 5 OF INFORMATIONS PROMPT "\<Совершенно секретно"
ON SELECTION BAR 1 OF INFORMATIONS DO FORM Author
ON SELECTION BAR 2 OF INFORMATIONS DO INFORM
ON SELECTION BAR 3 OF INFORMATIONS DO FORM Fill
ON SELECTION BAR 4 OF INFORMATIONS DO FORM Access
ON SELECTION BAR 5 OF INFORMATIONS DO ABSOLUTELY
* Описание POPUP-меню Здания
DEFINE POPUP BUILDING MARGIN FONT [Arial
Cyr],11
DEFINE BAR 1 OF BUILDING PROMPT "\<Поиск здания";
SKIP FOR SeekBuilding=.F.
DEFINE BAR 2 OF BUILDING PROMPT "\<Добавить здание";
SKIP FOR EddBuilding=.F.
ON SELECTION BAR 1 OF BUILDING DO FORM Search
ON SELECTION BAR 2 OF BUILDING DO FORM AddBuild
* Справочники
DEFINE POPUP DICTIONARY
MARGIN FONT [Arial Cyr],11
DEFINE BAR 1 OF DICTIONARY PROMPT "\<Улицы города";
SKIP FOR StreetTown=.F.
DEFINE BAR 2 OF DICTIONARY PROMPT "\<Районы города";
SKIP FOR DistrictTown=.F.
DEFINE BAR 3 OF DICTIONARY PROMPT "\<Материал стен";
SKIP FOR MaterialWall=.F.
DEFINE BAR 4 OF DICTIONARY PROMPT "\<Работники";
SKIP FOR Staff=.F.
ON SELECTION BAR 1 OF
ON SELECTION BAR 2 OF DICTIONARY DO FORM District
ON SELECTION BAR 3 OF DICTIONARY DO FORM Wall
ON SELECTION BAR 4 OF DICTIONARY DO FORM Employee
* Запуск обработчика событий Visual FoxPro
READ EVENTS
DO STOP && Процедура STOP находится в файле FileProc
Запустить на выполнение головной модуль можно из командного
окна Command,
набрав команду Do RealEstate. А если вы находитесь в редакторе текстов
Visual FoxPro, то щелкните по пиктограмме с восклицательным знаком, которую легко найти
в главном меню СУБД.