Создание меню средствами проектировщика в VFP
« Назад Создадим меню, обеспечивающее вызов рассмотренных в гл. 10 форм. На уровне Menu Bar (рис. 11.3) определим 2 подменю с заголовками "Формы" и "Взаимодействие форм" и одну вызываемую при выборе пункта "Закончить" процедуру со следующим кодом: && Процедура пункта "Закончить" проектируемого меню release noFormsFound, aFormNames set sysmenu to default && Возвращаемся к системному меню Рис. 11.3. Фрагмент проектировщика меню Смысл имеющихся в процедуре переменных noFormsFound, aFormNames поясним ниже. Выделим подменю "Формы" и нажмем на кнопку в столбце Options. В появившемся диалоге (рис. 11.4) определим сочетание клавиш-ускорителей, раскрывающих это подменю, например Alt+F. Рис. 11.4. Фрагмент диалога Prompt Options Такое дополнение обязательно, поскольку заголовок подменю написан по-русски и при генерации меню в качестве ускорителя будут указаны для подменю "Формы" клавиши Alt+Ф, что недопустимо: наличие русской буквы в ускорителе вызовет ошибку. Аналогичные действия проведем и в отношении иных пунктов рассматриваемого уровня меню. Кроме того, в поле Skip For диалога Prompt Options укажем имя переменной noFormsFound. Ее эффект следующий: если значение noFormsFound равно .T., то подменю "Формы" окажется недоступным, и будет доступным – в противном случае. Значение переменной noFormsFound мы определим в Setup-коде меню, выполняемом перед открытием меню. Определенный в поле Message текст "Вызов пробных форм" будет появляться в статус-строке главного окна VFP при выборе подменю "Формы". Вновь выберем подменю "Формы" и нажмем на кнопку Create (рис. 11.5). Рис. 11.5. Создание подменю "Формы" В появившееся диалоге определим 3 команды (рис. 11.6), открывающие различные формы. Рис. 11.6. Проектирование подменю "Формы" Посредством кнопки в столбце Option для каждой из команд определим в поле Skip For диалога Prompt Options условие ее недоступности (табл. 11.2). Таблица 11.2 Skip For-выражения
Чтобы пояснить смысл переменной noFormsFound и массива aFormNames рассмотрим Setup-код создаваемого меню. Окно редактирования этого кода открывается, когда активен проектировщик меню, в результате выбора в меню View – General Options, а затем в появившемся диалоге флажка Setup (рис. 11.7) и кнопки OK. Рис. 11.7. Фрагмент диалога General Options В том же диалоге в группе переключателей Location, регулирующих статус и положение создаваемого меню относительно системного меню, выберем Replace (новое меню после открытия будет замещать системное). Замечания.
Назначение Setup-кода проектируемого меню в том, чтобы проверить, имеются ли на диске файлы открываемых форм. И если ни одного из файлов нет, то сделать недоступным подменю "Формы", присвоив для этого глобальной переменной noFormsFound значение .T. Если же хотя бы один из файлов имеется, то noFormsFound получит значение .F., на зато могут быть изменены значения второго столбца массива aFormNames, отвечающего за доступность пунктов подменю "Формы". Первый столбец этого массива содержит имена открываемых форм. && Setup-код меню && clear && #define PATH 'D:\' && Путь к формам #define EXT '.scx' && Расширение файлов форм #define NOFFORMS 3 && Число форм && && Переменные noFormsFound и aFormNames должны быть глобальными public noFormsFound, aFormNames(NOFFORMS, 2) && && Инициализация первого столбца массива aFormNames && При создании все элементы массива равны .F. aFormNames(1, 1) = 'SomeForm1' aFormNames(2, 1) = 'NextForm1' aFormNames(3, 1) = 'SomeFormSet' && && Число не найденных форм notFound = 0 for ind = 1 to NOFFORMS if not File(PATH + aFormNames(ind, 1) + EXT) then && Форма не найдена; изменяем notFound и элемент массива notFound = notFound + 1 aFormNames(ind, 2) = .T. endif next && && Значение noFormsFound, отвечающее за доступность подменю "Формы" noFormsFound = (notFound = NOFFORMS) Созданные глобальные переменные noFormsFound и aFormNames будут освобождены при восстановлении системного меню (см. выше процедуру пункта "Закончить"). Сохраним меню в виде файла d:\SomeMenu.mnx; выполним генерацию меню (Menu – Generate) и запустим его, например в командном окне, на исполнение: do d:\SomeMenu.mpr Расширение в имени файла DO-команды, если запускается меню, обязательно. Причем указывается расширение MPR, поскольку им обладает созданный генератором меню файл. Опробуем меню и выберем затем его пункт "Закончить". Просмотрим теперь код в сгенерированном файле d:\SomeMenu.mpr меню (в приводимом коде частично опущен комментарий): * * * * This PROGRAM was automatically generated BY GENMENU * * * * Setup Code * * && && См. приведенный выше Setup-код меню && * * * * Menu Definition * * set sysmenu to set sysmenu automatic define pad _1gs1cql3z of _MSYSMENU prompt "Формы" color scheme 3 ; key ALT+F, "ALT+F" ; skip for noFormsFound ; message "Вызов пробных форм" define pad _1gs1cql40 OF _MSYSMENU prompt "Взаимодействие форм" color scheme 3 ; key ALT+C, "ALT+C" define pad _1gs1cql41 of _MSYSMENU prompt "Закончить" color scheme 3 ; KEY ALT+B, "ALT+B" on pad _1gs1cql3z OF _MSYSMENU activate popup формы on pad _1gs1cql40 OF _MSYSMENU activate popup взаимодейс on selection pad _1gs1cql41 of _MSYSMENU ; do _1gs1cql42 ; in LocFile("d:\SomeMenu", "MPX;MPR|FXP;PRG", "Where is SomeMenu?") define popup формы margin relative shadow color scheme 4 define bar 1 of формы prompt "Some Form" skip for aFormNames[1, 2] define bar 2 of формы prompt "Next Form" skip for aFormNames[2, 2] define bar 3 of формы prompt "Some Form Set" skip for aFormNames[3, 2] on selection bar 1 of формы do form d:\SomeForm on selection bar 2 of формы do form d:\NextForm on selection bar 3 of формы do form d:\SomeFormSet define popup взаимодейс margin relative shadow color scheme 4 define bar 1 of взаимодейс PROMPT "Панель инструментов" define bar 2 of взаимодейс PROMPT "Две формы" on selection bar 1 of взаимодейс do form d:\ListForm on selection bar 2 of взаимодейс do form d:\FormOne * * * * _1GS1CQL42 ON SELECTION PAD * * procedure _1gs1cql42 release noFormsFound, aFormNames set sysmenu to default Замечания: 1. Pad-имена пунктов меню могут быть заданы в диалоге Prompt Options (поле Pad Name). Тогда они заменят в MPR-файле автоматически генерируемые имена пунктов меню. 2. Имя файла с программой, выполняющей генерацию меню, хранит системная переменная _GENMENU. |