Как сделать меню в foxpro

Обновлено: 07.07.2024

Для разработки меню в Visual FoxPro проще всего использовать Конструктор меню (Menu Designer). Интересно отметить , что с помощью Конструктора меню можно не только разрабатывать меню для пользовательского приложения , но и настраивать меню Visual FoxPro для наиболее эффективной работы программиста .

В проекте выберем вкладку Other, найдем заголовок Menus и дадим команду New. На экране появится окно Конструктора меню , внешний вид которого приведен на рис . 9.16. На этом же рисунке поясняются основные элементы этого Конструктора . Обратите внимание , что

Конструктор меню принципиально отличается от других визуальных средств проектирования

converted to PDF by HupBaH9I

Visual FoxPro. После того как мы опишем с его помощью меню , необходимо сгенерировать программу . Файл с этой программой будет иметь расширение MPR, а файл после компиляции - MPX. Этот файл и следует запускать для работы с созданным меню . Недаром раньше такой инструмент программиста так и назывался - Генератор . Для генерации программы в меню Menu необходимо выбрать команду Generate .

Рис. 9.16. Конструктор меню в Visual FoxPro

Если в вашу задачу входит настройка главного меню Visual FoxPro, то самое подходящее в этом случае решение - в меню Menu выбрать команду Quick Menu . После этого в Конструкторе меню в качестве заготовки мы получаем копию существующего меню Visual FoxPro, с которым можем проделывать любые изменения , включая удаление каких - либо меню и команд , добавление новых и т . д . Не стоит слишком усердствовать с удалением , помните , что , изымая какую - либо команду из меню , вы теряете предусмотренную наличием этой команды функциональность . Например , удалив меню Edit , вы не сможете использовать стандартные возможности переноса , копирования и поиска при работе с текстом . В соответствии со

сложившимися правилами включать свои собственные меню в главное меню следует перед меню Help , которое должно оставаться последним .

Для разработки меню пользовательской программы нам придется вручную описать все необходимые пункты . Рассмотрим последовательность , в которой следует выполнить эти действия .

Запишем заголовки пользовательского меню в столбце Prompt. Если после выбора меню на экране должен появиться список команд , выберем в столбце Result пункт Submenu и щелкнем на появившейся справа кнопке Create. Мы окажемся на следующем уровне меню , где запишем заголовки команд , входящих в это подменю . Если структура нашего меню предусматривает еще один уровень вложения , повторите указанные действия . Для перехода с уровня подменю на верхний уровень необходимо выбрать его из комбинированного списка Menu Level. Если вы хотите выделить группы команд , поместите в столбце Prompt в строке , разделяющей группы команд меню , знаки \-. Вы всегда можете проверить , как визуально будет выглядеть ваше меню на экране , нажав клавишу Preview.

Для быстрого перемещения по меню можно назначить для его команд " горячие клавиши ". Нажимая соответствующую алфавитную клавишу , пользователь может сразу выполнить нужную команду или перейти в какое - либо меню . Выбранная клавиша в меню подчеркивается . Для задания такой клавиши перед нужной буквой необходимо поставить знаки \ Например , если мы хотим , чтобы команда Счет выполнялась при нажатии клавиши С , мы должны заголовок этой команды написать в виде \ . После этого в меню буква С будет подчеркнута . Естественно , в одном меню не может быть несколько команд , использующих в качестве " горячих клавиш " одну и ту же букву . К сожалению , при использовании русских заголовков для меню не все так просто и , чтобы можно было реализовать описанные возможности , необходимо прочитать следующий абзац .

converted to PDF by HupBaH9I

Наиболее часто выполняемым командам в меню можно присвоить клавиатурные комбинации .

Вы можете регулировать доступ к тем или иным командам меню с помощью поля проверки Skip For, находящегося в диалоговом окне Prompt Options. Если вы щелкнете на этом поле , появится уже знакомое вам окно Построителя выражения , в котором можно сформировать условие доступа к этой команде меню . Если условие будет равно .F., команда будет доступна , если .T. - недоступна . Наиболее часто эта возможность используется для регулирования доступа различных пользователей прикладной программы к тем или иным ее функциям .

В связи с тем , что Visual FoxPro поддерживает редактирование на месте OLE- объектов , с помощью поля проверки Negotiate мы можем для меню верхнего уровня указать , где меню будет располагаться после активизации OLE- сервера . По умолчанию действует установка None - меню убирается при редактировании OLE- объекта .

Для пояснения назначения той или иной команды меню с помощью поля проверки Message можно задать текст , который будет появляться в строке состояния . Для задания такого текста используется Построитель выражения . Если вы непосредственно набираете текст , не забудьте поместить его в кавычки .

В окне Prompt Options осталось еще одно поле проверки - Pad Name, о котором можно было бы ничего и не говорить , если бы мы не использовали русские заголовки для меню . При

проектировании меню Конструктор автоматически присваивает имена меню на основании их заголовков . В то же время Visual FoxPro, как и его предшественники , на дух не переносит русских названий в меню . Не будем раздражаться по столь мелкому поводу , щелкнем на поле проверки Pad Name и изменим русское название на латинское .

Для выполнения каких - либо действий при выборе пользователем команд меню необходимо в колонке Result для каждой команды меню назначить команду Visual FoxPro, функцию или процедуру . Для назначения команды Visual FoxPro в столбце Result выберите пункт Command и наберите соответствующую команду в текстовом поле справа . Например , DO Log_user . Если указанная в этой команде процедура находится в блоке Cleanup Конструктора меню ( о нем мы расскажем чуть позднее ), то команду следует записать в виде : DO Log_user IN Main , где Main -

converted to PDF by HupBaH9I

это имя файла меню .

Для задания при выборе команды меню выполнения какой - либо процедуры , в случае , когда меню не имеет подменю , необходимо в колонке Result выбрать пункт Procedure. Щелкнуть на кнопке Create и в появившемся окне поместить необходимый код .

Код , выполняемый при выборе любой из команд >> DO CASE

Код , выполняемый для первой команды в меню >> CASE BAR() = 2

Код , выполняемый для второй команды в меню >>

Функция BAR() возвращает номер выбранной команды меню . Вы можете при необходимости присвоить свои номера командам меню , использовав поле справа от колонки Result.

Общие установки для системы меню можно выполнить , выбрав из меню View Visual FoxPro команду General Options . После появления диалогового окна с таким же названием , приведенного на рис . 9.18, можно написать программный код , который будет выполняться перед расположением меню на экране , выбрав поле проверки Setup. Процедуры , которые вы используете для выполнения команд меню , и действия , которые необходимо выполнить после исчезновения меню с экрана , можно записать , выбрав поле проверки Cleanup. С помощью группы кнопок выбора Location можно задать условия расположения меню после его запуска :

∙ Кнопка Replace - заменяет существующую систему меню .

∙ Кнопка Append - добавляет данное меню к существующей системе .

∙ Кнопка Before - располагает меню перед указанным в появляющемся справа списке меню .

∙ Кнопка After - располагает меню после указанного в появляющемся справа списке меню .

Репутация: нет
Всего: 15

Создал меню.
Сделал главную форму (ShowWindow = AsTopLevelForm(2))

А как мне теперь сделать так, чтобы при запуске формы высвечивалось меню? В доках нашел DO "path\to\menu.mpr". Поставил эту строку на событие Load но результата нет

Репутация: нет
Всего: 15

значит решается все так. Идем в дирекорию где заинсталирован foxpro? потом 'Samples\Solution\Forms' там лежит четыре файла

все копируем к себе в проект (меняем название если угодно, но только всех четырех) после куда надо (обычно в метод Init() главной формы) вставляем вот этот кусок кода:

Код
DO sdiform.mpr WITH THISFORM,.T.
если меняли название файлов надо заменить и здесь. поскольку после появления меню верняя граница "упадет" на 20 пикселей вниз, надо не забыть рассчитать поправку всех элементов главной формы

Репутация: нет
Всего: 7

Royan, я тут тоже парился над этой траблой .
Что бы не маяться с копированием примеров - есть следующий метод.
1. Создаёшь форму
2. Ставишь у неё свойство ShowWindow = 2 - As Top Level Form
3. Создаёшь меню
4. При открытом дизайнере меню (в котором открыта нужная менюха) заходишь (в самой IDE FoxPro) View->General Options.
и там ставишь галочку Top-Level Form
5. Затем открываешь код своей формы в методе Init (в дизайнере форм щёлкне по свободному месту на своей форме,
в открывшемся окне в шапке в поле Objec t должно быть имя твоей формы, а в поле Procedure должно стоять Init)
и добавляешь следующий код:

З.Ы. - данное шаманство было вычитано в хелпе к фокс-про, самое странное что работает ))

Репутация: нет
Всего: нет

Для создания графического интерфейса VFP имеет специальные инструменты – конструктор меню (Menu Designer). Его можно использовать не только для создания привычных выпадающих меню, но и для построения контекстных меню, вызываемых на экране щелчком правой мыши. Вызвать Menu Designer можно двумя способами File  New  MENU или команда CREATE MENU. Образ созданного меню будет занесен в два файла с расширением .MNX и .MNT.
Во всех случаях появится запрос уточняющий, что именно вы собираетесь создать – раскрывающееся меню (Menu) или контекстное меню (Shortcut).

1. Строка Меню (Menu Bar) – меню самого верхнего уровня, пункты которого присутствуют на экране почти все время. Если вы работаете с приложением, которое в зависимости от режима заменяет одну строку меню другой, то значит, при отключении его работы нужно ссылаться на разные строки меню. (Внутри файла .MPR – команда DEFINE MENU)
2. Выпадающее меню (Menu Pad) – это меню следующего уровня в иерархии. Каждый пункт строки меню представляет собой выпадающее меню. Щелчок по некоторым пунктам выпадающего меню может запускать некоторые операции, но чаще всего приводит к появлению на экране некоторого списка подпунктов. (Внутри файла .MPR – команда DEFINE PAD).
3. раскрывающееся меню (POPUP MENU) – это вертикальный список пунктов, который раскрывается при щелчке на поле выпадающего меню. (Внутри файла .MPR – команда DEFINE POPUP).
4. Пункт меню (MENU PROMPT) – это некоторая надпись в раскрывающемся меню (элемент списка). Щелчок на пункте меню может либо запускать процесс выполнения некоторой операции, либо привести к появлению на экране подменю (SUBMENU) с другим списком пунктов (Внутри файла .MPR – команда DEFINE BAR).

В разделе PROMPT – вводится наименование пунктов меню. Возможно использование следующих комбинаций клавиш:
\ .MPR.

VFP позволяет по уже описанной технологии проектировать и контекстные меню. Обычно такие меню можно вызывать щелчком правой кнопки мыши на некотором объекте формы. Отличие – высшим уровнем в иерархии является выпадающее меню.
Для запуска контекстного меню в приложении нужно вписать команду
DO .MPR
в метод обработки RightClick того объекта, к которому относится данное контекстное меню.

Если меню является основной программой, включите в код завершения (Cleanup окна General Options ) команды
READ EVENTS
SET SYSMENU TO DEFAULT
а для элемента меню, по которому происходит выход из системы меню CLEAR EVENTS. Это необходимо сделать в целях недопущения выхода программы на командный уровень (в окно Command). Принцип работы обработчика событий:
Read Events начинает обработку событий. Чтобы прекратить обработку событий Clear Events. В результате будет возобновлено выполнение программы со строки, непосредственно следующей за командой Read Events. В данном случае Set sysmenu to default – возвращает назад системное меню VFP.

В FoxPro можно создавать меню разными способами. Наиболее простой из них – команда prompt. Ее синтаксис: @ , prompt . Вот пример листинга для организации меню программы:

После выполнения вышеперечисленных строк на экране появиться меню, выбранный пункт будет в переменной menu_it.

Недостаток команды prompt состоит в том, что он не предусматривает автоматически всплывающие подменю и “горячие клавиши”. Для этой цели в FoxPro существуют более мощные команды:

Вызвать меню, определенное этими командами можно командой activate menu . Теперь нам осталось “навесить” на меню конкретные процедуры. Для первого варианта, с командой prompt можно использовать оператор do case или if. Рассмотрим два примера:

Если основное меню имеет какие то подменю, то их придется реализовывать уже в навешанных на пункты основного меню процедуры, например:

Согласитесь, трудоемкий процесс. Поэтому рассмотрим пример со вторым вариантом:

Как видно из примера, подменю навешиваются прямо на пункты основного меню, а процедуры прямо на пункты подменю, и при этом программа выглядит более компактно. Не надо никаких конструкций разветвления и множественного выбора. Всего гораздо проще и быстрее, но в тоже время, немного мудренее. Так что каким способом программировать меню программы, решайте сами. А я тем временем расскажу о других возможностях по созданию меню:

Можно заменить системное меню своим меню, выполнив следующие команды:

Ключевое слово KEY ,[ ] позволяет навесить на пункт меню “горячую” клавишу. Пример:

Отчет - форматированное представление данных, выводимое на экран, принтер или в файл. Конструктор отчетов FoxPro позволяет создавать отчеты как в табличном виде, так и в произвольной форме.

Табличный отчет - представляет собой напечатанную таблицу, в которой данные упорядочены по столбцам и строкам. Каждый из столбцов отчета содержит поле исходной таблицы или вычисляемое поле, а строка представляет собой запись.

На практике в ряде случаев поля исходной таблицы должны располагаться в специально отведенных для них местах отчета. Очевидно, что табличный отчет не пригоден для этих целей.

Отчеты в свободной форме - позволяют устранить ограничения, свойственные табличным отчетам. При получении отчета в свободной форме вы можете воспользоваться стандартным форматом, автоматически создаваемым Visual FoxPro для каждой таблицы. В этом формате поля исходной таблицы расположены вертикально. Однако с помощью конструктора отчетов вы можете разработать специальный формат отчета, где поля исходной таблицы будут расположены в требуемых местах отчета.

Строка меню и всплывающее меню в FoxPro

Строка меню - горизонтальное меню, расположенное в верхней части экрана. Примером строки меню является основное меню Visual FoxPro. Вы можете создать собственную строку меню, которая будет замещать основное меню Visual FoxPro или добавляться к нему. Для создания строки меню выполните следующие действия:

Откройте окно конструктора меню;

Опишите пункты меню;

Отобразите строку меню на экране;

Определите действия, выполняемые при выборе пункта меню.

При открытии окна конструктора меню необходимо указать тип меню: Menu - строка меню и Shortcut - всплывающее меню. На каждом шаге создания меню приложения вы можете просматривать внешний вид меню с помощью кнопки Preview. Ниже приведены возможные типы пунктов меню:

Command - При выборе пункта меню будет выполняться связанная с ним команда;

Pad Name - При выборе пункта меню никаких действий выполняться не будет. Как правило, используется в качестве дополнительного пояснения к меню;

Submenu - При выборе пункта меню раскрывается связанное с данным пунктом ниспадающее меню;

Procedure - При выборе пункта меню вызывается процедура, которую вы определяете для данного пункта меню.

Выбор пункта меню осуществляется при помощи клавиш-стрелок или мыши. Дополнительно вы можете определить символ из имени пункта меню, активизирующий этот пункт при нажатии комбинации Alt и указанного символа, называемого оперативной клавишей. Существует возможность определения для каждого пункта меню клавиши ускоренного действия. В качестве такой клавиши могут использоваться символы, функциональные клавиши, а так же комбинации клавиш.

Для восстановления на экране системного меню в командном окне введите команду SET SYSMENU TO DEFAULT.

Читайте также: