4.1. Головной модуль

Головной модуль – это программа, управляющая ходом работы приложения. Включает в себя, как правило, настройку среды 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 DICTIONARY DO FORM Street

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, то щелкните по пиктограмме  с восклицательным знаком, которую легко найти в главном меню СУБД.