Создает меню.

DEFINE POPUP MenuName [FROM nRow1, nColumn1] [TO nRow2, nColumn2]
[IN [WINDOW] WindowName | IN SCREEN]
[FONT cFontName [, nFontSize] [, nFontCharSet]] [STYLE cFontStyle]
[FOOTER cFooterText] [KEY KeyLabel] [MARGIN]
[MARK cMarkCharacter] [MESSAGE cMessageText] [MOVER] [MULTISELECT]
[PROMPT FIELD FieldName | PROMPT FILES [LIKE FileSkeleton]
| PROMPT STRUCTURE] [RELATIVE] [SCROLL] [SHORTCUT]
[TITLE cMenuTitleText] [RTLJUSTIFY]
[COLOR SCHEME nSchemeNumber | COLOR ColorPairList]

Параметры

MenuName

Определяет имя меню для создания.
FROM nRow1 , nColumn1 TO nRow2 , nColumn2

Определяет местоположение меню. nRow1 , nColumn1 определяют координаты для левого верхнего угла меню. Если Вы опускаете предложение FROM, Visual FoxPro размещает левый верхний угол меню в первой строке и первом столбце главного окна Visual FoxPro или пользовательского окна. Чтобы создавать меню с определенным размером, Вы можете также включить TO nRow2 , nColumn2 для задания местоположения нижнего правого угла меню. Если Вы включаете FROM nRow1 , nColumn1 и опускаете TO nRow2 , nColumn2 , Visual FoxPro автоматически устанавливает размеры меню. Меню имеет ширину самого длинного его пункта (если пункты создаются командой DEFINE BAR) и длину, необходимую для отображения всех его пунктов. Длина меню ограничена размером главного окна Visual FoxPro или пользовательского окна, в котором помещено меню. Если меню не имеет достаточных размеров для размещения всех пунктов, то появляется полоса прокрутки так, чтобы Вы смогли просматривать пункты меню.
IN [WINDOW] WindowName

Размещает меню в определяемое пользователем окно, которое Вы задаете опцией WindowName . Если Вы опускаете это предложение, меню помещается в главное окно Visual FoxPro по умолчанию, если нет активного пользовательского окна. Если есть активное пользовательское окно, то меню помещается в активное окно.
IN SCREEN

Явно помещает меню в главное окно Visual FoxPro.
FONT cFontName [, nFontSize [, nFontCharSet ]]

Определяет заданный по умолчанию шрифт для меню. Вы можете отменить заданный по умолчанию шрифт для индивидуального пункта меню включением предложения FONT в команде DEFINE BAR. cFontName определяет имя шрифта, и nFontSize определяет размер шрифта. Вы можете определить начертание языка через nFontCharSet . См. GETFONT () Функциядля получения списка доступных значений начертания языка. Например, следующая команда создает меню со шрифтом  Courier 12 пунктов:
Скопировать код
DEFINE POPUP popMyPopup FONT 'Courier', 12
Если шрифт, который Вы определяете, не доступен, то он заменяется шрифтом с подобными характеристиками. Если Вы включаете предложение FONT, но опускаете размер пункта nFontSize , то используется шрифт в 10 пунктов.
STYLE cFontStyle

Определяет заданный по умолчанию стиль шрифта для меню. Вы можете отменить заданный по умолчанию стиль для индивидуального пункта меню, включением предложения FONT в команде DEFINE BAR. Если Вы опускаете предложение STYLE, или если стиль шрифта, который Вы определяете недоступен, используется шрифт Normal. Стили шрифтов, которые Вы можете определить с помощью cFontStyle перечислены в следующей таблице:

Character Font style

B

Bold

I

Italic

N

Normal

Q

Opaque

-

Strikeout

T

Transparent

U

Underline

Вы можете включить более одного символа, чтобы определить комбинацию стилей шрифта. Например, следующая команда определяет Полужирный курсив:
Скопировать код
DEFINE MENU popMyPopup STYLE 'BI'
FOOTER cFooterText

Создает нижний колонтитул с текстом, указанным cFooterText , центрированным в нижнем бордюре меню.
KEY KeyLabel

Определяет клавишу доступа или комбинацию клавиш для меню. Для списка доступных клавиш и комбинаций и их наименований, см. ON KEY LABEL . Включение KEY эквивалентно применению следующей команды:
Скопировать код
ON KEY LABEL KeyLabel ACTIVATE POPUP MenuName
Обратите внимание:
Если тем же самым наименованием клавиш уже определен клавиатурный макрос, то клавиатурный макрос имеет приоритет, и меню не может быть активизировано указанной клавишей или комбинацией.

MARGIN

Вставляет дополнительный пробел слева и справа от каждого пункта меню. Символы метки отображаются слева от пункта, а стрелки, указывающие, что доступны дополнительные каскадные подменю, отображаются справа от пунктов меню. Если Вы опускаете MARGIN, символы метки вставляются вместо первого символа в имени пункта меню; стрелки иерархии вставляются вместо последнего символа пунктов меню.
Обратите внимание:
Вы должны включить это предложение, если Вы хотите использовать в DEFINE BAR ... предложения PICTURE ИЛИ PICTRES.

MARK cMarkCharacter

Определяет символ, который появляется слева от пункта меню. Заданный по умолчанию символ метки - галочка. Предложение MARK игнорируется, и заданный по умолчанию символ метки используется, если меню интегрировано в системное меню Visual FoxPro. Также, предложение MARK игнорируется, если FoxFont - не является шрифтом главного окна FoxPro или пользовательского окна, в котором находится меню. MARK может быть включено, чтобы изменить заданный по умолчанию символ метки на символ, указанный cMarkCharacter . Если cMarkCharacter включает более одного символа, то используется только первый символ как символ метки.
Обратите внимание:
Определение символа метки не отмечает пункт меню. Используйте SET MARK OF, чтобы отметить пункт меню.

Предложение MARK устанавливает символ метки для всех пунктов меню. Символы метки, указанные командой DEFINE BAR имеют приоритет над символам метки, указанными предложением MARK в команде DEFINE POPUP. SET MARK OF используется, чтобы переключать символы метки в положения включено-выключено и может также использоваться, чтобы определить символ метки для индивидуального пункта или для всех пунктов меню.
MESSAGE cMessageText

Выводит сообщение, когда Вы выбираете пункт меню. Сообщение помещается в графической статусной строке. Если включена символьная статустная строка с помощью SET STATUS ON, то сообщение центрируется в последней строке главного окна Visual FoxPro.
MOVER

Размещает двунаправленную стрелку
ArrowUpDown screenshot
в блоке ползунка слева от выбранного пункта меню. Вы можете перетащить двунаправленную стрелку, чтобы переместить пункт в другую позицию в пределах меню. GETBAR( ) может использоваться, чтобы определить, в какой позиции установлен каждый пункт меню. Вы не можете перестроить пункты меню, созданным предложением PROMPT.
MULTISELECT

Позволяет пользователю выбирать несколько пунктов меню одновременно. Когда пользователь выбирает пункт меню, слева от пункта появляется символ метки. Вы не можете делать множественный выбор из меню, созданного предложением PROMPT. MRKBAR( ) может использоваться, чтобы определить, какие пункты меню выбраны. Если Вы включаете MULTISELECT в DEFINE POPUP, Вы можете включить MARGIN, чтобы резервировать пробел в каждом пункте для символа метки. В следующем примере создается меню popFruits . MULTISELECT включен, чтобы создать меню, которое разрешает множественным выбор пунктов. Каждый из этих четырех пунктов имеет разный символ метки. Когда пользователь выбирает пункты меню, пункты помечаются и процедура yourchoice отображает выбранные пункты.
Скопировать код
CLEAR
ACTIVATE SCREEN
DEFINE POPUP popFruits FROM 5,5 ;
MULTISELECT MARGIN && Create multi-choice menu
DEFINE BAR 1 OF popFruits ;
PROMPT '\<Apples' MARK CHR(3) && First item
DEFINE BAR 2 OF popFruits ;
PROMPT '\<Bananas' MARK CHR(4) && Second item
DEFINE BAR 3 OF popFruits ;
PROMPT '\<Grapes' MARK CHR(5) && Third item
DEFINE BAR 4 OF popFruits ;
PROMPT '\<Lemons' MARK CHR(6) && Fourth item
@ 12,5 SAY 'Your choices:'
ON SELECTION POPUP popFruits DO yourchoice && Choice routine
ACTIVATE POPUP popFruits
PROCEDURE yourchoice && Executed when choice is made
@ 13,5 CLEAR
FOR gnCount = 1 TO CNTBAR('popFruits') && Loop for # of items
IF MRKBAR('popFruits', gnCount) = .T. && Option is marked,
? PRMBAR('popFruits', gnCount) AT 5 && display caption
ENDIF
NEXT
PROMPT FIELD FieldName

Определяет имя поля открытой таблицы, записи которой становятся пунктами меню. Меню содержит пункт для каждой записи в таблице. Когда меню активизировано, то текущей, становится рабочая область этой таблицы.
Совет:
Вы можете использовать в своих интересах Оптимизацию Запросов Rushmore при установке фильтра по полю, указанному в PROMPT FIELD. Для подробной информации относительно Rushmore QueryOptimization, см. SET OPTIMIZE и Использование оптимизации Rushmore Query Optimization для ускорения доступа к данным в разделе  Оптимизация Приложений .

FieldName может также содержать множественные имена полей и выражения, составленные операцией сложения (+). FieldName может также быть именем поля таблицы, открытой в другой рабочей области или пользовательской функцией. Ограничений количества записей, которые могут появиться в меню, созданном PROMPT FIELD, не существует.
PROMPT FILES [LIKE FileSkeleton ]

Создает меню, которое выводит имена файлов, доступных в текущем каталоге. LIKE FileSkeleton позволяет Вам определять файлы, которые отображены в меню, используя подстановочные знаки. Например, чтобы создать меню, которое выводит имена таблиц в заданном по умолчанию диске и каталоге, примените следующую команду:
Скопировать код
PROMPT FILES LIKE *.DBF
Вы можете создать меню, которое выводит имена файлов на других дисках и в других каталогах или папках, включением описаний диска или тома, каталога, или обоих сразу. Например, чтобы создать меню, которое отображает имена программных файлов в каталоге по имени PROGRAMS на диске C, включите следующую команду:
Скопировать код
PROMPT FILES LIKE C:\PROGRAMS\*.PRG
PROMPT STRUCTURE

Выводит имена полей текущей таблици в меню согласно структуре полей таблицы. Когда меню активизируется, рабочая область таблицы становится текущей.
RELATIVE

Определяет порядок, в котором размещаются пункты меню. Если Вы создаете меню без предложения RELATIVE, пункт меню установливается в порядке, заданным номером строки пункта. Пробел в меню резервируется за пунктом, который не был определен. Например, если первые и третьи пункты определены, и меню активируется, то в меню помещается пустая строка, зарезервированная за вторым пунктом. Если Вы создаете меню с применением RELATIVE, пункты меню появляются в порядке, в котором они были определены. Пробел в меню не резервируется за пунктами, которые не были определены. Определение меню с использвоанием RELATIVE также позволяет Вам использовать предложения BEFORE И AFTER в DEFINE BAR, чтобы позиционировать пункты меню относительно других пунктов. Если меню создано без RELATIVE, применение BEFORE или AFTER в DEFINE BAR генерирует ошибку. Выполните следующие два програмных примера и сравните размещение пунктов каждого меню.
Скопировать код
*** RELATIVE Example  ***
DEFINE POPUP popRelatYes RELATIVE FROM 1,1
DEFINE BAR 4 OF popRelatYes PROMPT '4444'
DEFINE BAR 3 OF popRelatYes PROMPT '3333'
DEFINE BAR 2 OF popRelatYes PROMPT '2222'
DEFINE BAR 1 OF popRelatYes PROMPT '1111'
DEFINE BAR 6 OF popRelatYes PROMPT '6666' BEFORE 4
ACTIVATE POPUP popRelatYes
*** NON-RELATIVE Example ***
DEFINE POPUP popRelatNo FROM 1,1
DEFINE BAR 4 OF popRelatNo PROMPT '4444'
DEFINE BAR 3 OF popRelatNo PROMPT '3333'
DEFINE BAR 2 OF popRelatNo PROMPT '2222'
DEFINE BAR 1 OF popRelatNo PROMPT '1111'
DEFINE BAR 6 OF popRelatNo PROMPT '6666'
ACTIVATE POPUP popRelatNo
SCROLL

Размещает полосу прокрутки справа от меню. Полоса прокрутки отображается в том случае, когда количество пунктов больше чем может уместиться в меню, или если меню слишком длинное, чтобы уместиться в главном окне Visual FoxPro или пользовательском окне, в котором оно размещается.
SHORTCUT

Создает подручное меню. Подручное меню обычно появляется, когда по строке выбора, инструментальной панели, или кнопке панели задач щелкают правой кнопкой мыши. Подручное меню выводит команды, которые имеют отношение к области экрана, в которой произошел щелчок правой кнопки мыши. Вы можете включить MROW( ) и MCOL( ) в предложении FROM, чтобы активизировать всплывающее меню в местоположении щелчка.
TITLE cMenuTitleText

Отображает заголовок в центре верхнего бордюра меню. cTitleText определяет заголовок меню.
RTLJUSTIFY

Определяет, что текст во всплывающем меню выровнен в направлении справа налево. Предложение RTLJUSTIFY предназначено для использования со шрифтами, которые поддерживают двунаправленное выравнивание. примените SET SYSMENU TO LTRJUSTIFY, чтобы возвратить систему меню к значению по умолчанию для выравнивания слева направо. Эта опция доступна только когда Windows конфигурирована для локализации Middle-Eastern.
COLOR SCHEME nSchemeNumber

Определяет цвета для всех элементов меню. По умолчанию, цвета меню, созданных DEFINE POPUP управляются цветовой схемой 2.
COLOR ColorPairList

Определяет цвета для всех элементов меню.

Замечания

Для размещения набора пунктов меню, которые Вы определяете, используйте последовательность команд DEFINE BAR. Для размещения записей, файлов, или полей в меню, используйте опции PROMPT FIELD, PROMPT FILES, или PROMPT STRUCTURE команды DEFINE POPUP.

Когда меню отображено и активизировано функцией ACTIVATE POPUP, Вы можете выбирать один из пунктов меню. В зависимости от выбранного пункта, может быть выполнена процедура, или может быть отображено и активировано другое меню. Меню, которое выводит другое меню при выборе пункта, называется каскадным подменю. Для подробной информации относительно создания подменю, см. ON BAR .

Если Вы используете Menu Designerчтобы создавать ваше меню, Вам, вероятно, не придется использовать эти команды вообще. Дизайнер Меню автоматически создает команды для вашего меню. Дизайнер Меню использует системное меню Visual FoxPro, которое Вы можете изменить, добавляя ваши собственные пункты меню.

Для подробной информации относительно создания меню, см. Создание Системы Меню .

Пример

Следующий пример использует DEFINE POPUP, чтобы создать меню, которые активируются при выборе заголовка меню в строке меню. Текущая полоса системного меню сначала сохраняется в памяти командой SET SYSMENU SAVE и затем все заголовки системного меню удаляются командой SET SYSMENU TO.

Создаются два новых заголовка системного меню командой DEFINE PAD, а DEFINE POPUP создает выпадающее меню для каждого заголовка меню. DEFINE BAR создает пункты каждого меню. Когда заголовок меню выбран, ON PAD использует команду ACTIVATE POPUP, чтобы активизировать соответствующее меню.

Когда пункт менюв выбран, ON SELECTION POPUP использует PROMPT( ) и POPUP( ), чтобы передать номер пункта и имя меню в процедуру CHOICE. CHOICE отображает текст выбранного пункта и имя меню, содержащее этот пункт. Если пункт Exit выбран из меню Card Info, то первоначальное системное меню Visual FoxPro восстановливается.

Скопировать код
*** Name this program DEFINPOP.PRG ***
CLEAR
SET SYSMENU SAVE
SET SYSMENU TO
DEFINE PAD convpad OF _MSYSMENU PROMPT '\<Conversions' COLOR SCHEME 3 ;
KEY ALT+C, ''
DEFINE PAD cardpad OF _MSYSMENU PROMPT 'Card \<Info' COLOR SCHEME 3 ;
KEY ALT+I, ''
ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion
ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo
DEFINE POPUP conversion MARGIN RELATIVE COLOR SCHEME 4
DEFINE BAR 1 OF conversion PROMPT 'Ar\<ea' KEY CTRL+E, '^E'
DEFINE BAR 2 OF conversion PROMPT '\<Length' ;
KEY CTRL+L, '^L'
DEFINE BAR 3 OF conversion PROMPT 'Ma\<ss' ;
KEY CTRL+S, '^S'
DEFINE BAR 4 OF conversion PROMPT 'Spee\<d' ;
KEY CTRL+D, '^D'
DEFINE BAR 5 OF conversion PROMPT '\<Temperature' ;
KEY CTRL+T, '^T'
DEFINE BAR 6 OF conversion PROMPT 'T\<ime' ;
KEY CTRL+I, '^I'
DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;
KEY CTRL+M, '^M'
ON SELECTION POPUP conversion;
DO choice IN definpop WITH PROMPT( ), POPUP( )
DEFINE POPUP cardinfo MARGIN RELATIVE COLOR SCHEME 4
DEFINE BAR 1 OF cardinfo PROMPT '\<View Charges' ;
KEY ALT+V, ''
DEFINE BAR 2 OF cardinfo PROMPT 'View \<Payments' ;
KEY ALT+P, ''
DEFINE BAR 3 OF cardinfo PROMPT 'Vie\<w Users' ;
KEY ALT+W, ''
DEFINE BAR 4 OF cardinfo PROMPT '\-'
DEFINE BAR 5 OF cardinfo PROMPT '\<Charges '
DEFINE BAR 6 OF cardinfo PROMPT '\-'
DEFINE BAR 7 OF cardinfo PROMPT 'E\<xit '
ON SELECTION POPUP cardinfo;
DO choice IN definpop WITH PROMPT( ), POPUP( )
PROCEDURE choice
PARAMETERS mprompt, mpopup
WAIT WINDOW 'You chose ' + mprompt + ;
' from popup ' + mpopup NOWAIT
IF mprompt = 'Exit'
SET SYSMENU TO DEFAULT
ENDIF

См. Также