Создает элемент в меню, определенном с помощью команды DEFINE POPUP.

DEFINE BAR nMenuItemNumber1 | SystemItemName OF MenuName 
   PROMPT cMenuItemText [PICTURE cFileName] [PICTRES cMenubarName]
   [BEFORE nMenuItemNumber2 | AFTER nMenuItemNumber3]
   [FONT cFontName [, nFontSize [, nFontCharSet]]] [STYLE cFontStyle]
   [KEY KeyLabel [, cKeyText]] [MARK cMarkCharacter]
   [MESSAGE cMessageText] [SKIP [FOR lExpression]] 
   [COLOR SCHEME nSchemeNumber | COLOR ColorPairList] 
   [MRU] [INVERT]

Параметры

nMenuItemNumber1
Задает номер элемента меню. По этому номеру на данный элемент меню можно ссылаться в других командах и функциях.
SystemItemName
Задает номер элемента меню. По этому номеру на данный элемент меню можно ссылаться в других командах и функциях. Например, чтобы обеспечить доступ к пункту меню Print, выполните следующее:
  Копировать код
DEFINE BAR _MFI_PRINT OF popMyPopup PROMPT "Print..."
Не все элементы системных меню Visual FoxPro являются доступными. Получить список имен доступных системных меню Visual FoxPro можно с помощью функции SYS(2013).
OF MenuName
Задает имя меню, в которое будут включены элементы меню..
PROMPT cMenuItemText
Задает текст названия элемента меню. Вы можете создать строку-разделитель, задав в качестве cMenuItemText обратную косую черту с дефисом (\-). Строка-разделитель применяется для отделения друг от друга различных групп элементов в меню. Например, если включить в определение меню приведенную ниже команду, то она создаст между третьим и пятым элементами меню строку-разделитель:
  Копировать код
DEFINE BAR 4 OF popMyPopup PROMPT '\-'
Вы можете создать многоколоночные меню, определяя обратную косую и вертикальную черту (\ |) в начале cMenuItemText. Пункт меню начинает новый столбец, и последующие пункты меню будут помещены в тот же самый столбец, пока не встретится другой пункт меню начинающийся \ |. Например, включая следующую команду в определении меню создает новый столбец в меню:
  Копировать код
DEFINE BAR 4 OF popMyPopup PROMPT '\|Start a new column'
Вы можете создать для элемента меню клавишу доступа, поставив перед нужным символом обратную косую черту со знаком "меньше" (\<). Например:
  Копировать код
DEFINE POPUP popReceive
DEFINE BAR 1 OF popReceive PROMPT '\<Invoices'
DEFINE BAR 2 OF popReceive PROMPT 'In\<quiry'
ACTIVATE POPUP popReceive
Нажав клавишу I, пользователь сможет выбрать команду Invoices из меню Receive; нажав клавишу Q, он выберет команду Inquiry из того же меню.
PICTURE cPictureName
Дает Вам возможность использовать существующее изображение со строкой меню. Вы можете определить cPictureName как относительный путь.
PICTRES cMenubarName
Определяет имя пункта системного меню как ресурс для меню. Если cPictureName = " ", тогда содержание поля Resname .mnx структуры таблицы обработано, поскольку имя файла для использования в DEFINE BAR...PICTURE. Эти функциональные возможности были введены в Visual FoxPro 7.0.
Замечание:
Чтобы функционировало должным образом, Вы должны включить предложение MARGIN в соответствующую команду DEFINE POPUP для предложений PICTURE ИЛИ PICTRES.

BEFORE nMenuItemNumber2
Помещает данный элемент меню перед элементом с номером nMenuItemNumber2.
AFTER nMenuItemNumber3
Помещает данный элемент меню после элемента с номером nMenuItemNumber3.
Замечание :
Чтобы опции BEFORE и AFTER действовали, необходимо при создании меню с помощью команды DEFINE POPUP включить предложение RELATIVE.

В предложениях BEFORE и AFTER также можно задавать значения _MFIRST и _MLAST. Если в предложении BEFORE задано _MFIRST, данный элемент будет первым элементом в меню. Если _MFIRST задано в предложении AFTER, данный элемент будет вторым в меню. Если в предложении AFTER задано значение _MLAST, данный элемент будет последним элементом меню. Если _MLAST задано в предложении BEFORE, данный элемент будет предпоследним в меню. Меню, создаваемые по команде DEFINE POPUP RELATIVE, не резервируют место для неопределенных элементов меню. Например, если вы определили в меню элементы 1, 2, 4 и 5, место для элемента 3 не резервируется. Вы можете вставить элемент 3 позднее; меню соответствующим образом расширится. Следующая программа отображает различия порядке и местоположении элементов каждого из меню:
  Копировать код
   * DEFINE POPUP... 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
   
   * DEFINE POPUP... non-relative example
   DEFINE POPUP popRelatNo FROM 1,10
   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 popRelatYes NOWAIT
             && Display "relative" poup
   ACTIVATE POPUP popRelatNo
             && Display "non-relative" popup
FONT cFontName[, nFontSize [, nFontCharSet]]
Задает шрифт для элемента меню. cFontName задает имя шрифта, а nFontSize его размер в пунктах. Вы можете определить сценарий языка с nFontCharSet. Функцию GETFONT( ) для списка доступных значений сценария языка. Например, следующая команда создает элемент меню с помощью 12-пунктового шрифта Courier:
  Копировать код
DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' FONT 'Courier', 12
Если вы задали предложение FONT, не задав размер шрифта nFontSize, используется размер 10 пунктов. Если в Visual FoxPro заданный шрифт отсутствует, его заменяет шрифт с похожими характеристиками.
STYLE cFontStyle
Задает стиль шрифта для элемента меню. Если предложение STYLE опущено, используется стиль Normal (нормальный). Если в Visual FoxPro заданный стиль шрифта отсутствует, его заменяет стиль Normal (нормальный). В качестве cFontStyle можно задавать следующие стили шрифтов:

Символ Стиль шрифта

B

Bold (Полужирный)

I

Italic (Курсив)

N

Normal (Нормальный)

Q

Opaque (Непрозрачный)

Strikeout (Перечеркнутый)

T

Transparent (Прозрачный)

U

Underline (Подчеркнутый)

Можно указать сразу несколько символов, задав комбинацию стилей. Например, следующая команда задает полужирный курсив (Bold Italic):
  Копировать код
   DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' STYLE 'BI'
KEY KeyLabel[, cKeyText]
Задает клавишу доступа или комбинацию клавиш для элемента меню. Чтобы выбрать такой элемент меню, необязательно активизировать само меню, в отличие от ситуации, когда вы назначаете клавишу доступа с помощью обратной косой черты и знака "меньше" (\<). Список доступных клавиш и комбинаций клавиш вместе с их названиями см. в теме ON KEY LABEL.
Замечание :
Если для заданного названия клавиши уже определена макрокоманда клавиатуры, она имеет приоритет и вы не сможете выбрать элемент меню с помощью указанной клавиши или комбинации клавиш.

Задав cKeyText, вы можете заменить название клавиши собственным текстом. Например, если задать KEY Ctrl+B, то в меню справа от имени данного элемента будет стоять текст Ctrl+B. Если задать KEY Ctrl+B, "^B", то в меню будет стоять ^B. Чтобы отменить отображение названия клавиши, задайте в качестве cKeyText пустую строку.
MARK cMarkCharacter
Задает символ маркировки, который ставится слева от элемента меню. Предложение MARK позволяет заменять принятый по умолчанию символ маркировки на символ, определенный аргументом cMarkCharacter. Если cMarkCharacter содержит более одного символа, в качестве символа маркировки используется только первый из них. В качестве символа маркировки в FoxPro для MS-DOS по умолчанию используется ромб, а в Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh ѕ галочка. Когда в Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh меню с данным элементом интегрируется в системное меню Visual FoxPro, предложение MARK игнорируется и используется символ маркировки, принимаемый по умолчанию. Кроме того, предложение MARK игнорируется, если шрифт главного окна Visual FoxPro или пользовательского окна, в котором размещается меню с данным элементом, отличен от FoxFont.
Замечание :
Задавая символ маркировки, вы не помечаете элемент меню. Используйте для этого команду SET MARK OF.

Символы маркировки, заданные в команде DEFINE BAR, имеют более высокий приоритет по сравнению с символами маркировки, заданными в предложении MARK команды DEFINE POPUP. Команда SET MARK OF используется как переключатель, отображающий или убирающий символы маркировки, и позволяет задать символ маркировки для отдельного элемента меню или для всех элементов меню.
MESSAGE cMessageText
Выдает сообщение при выборе элемента меню. Сообщение выводится в графической строке состояния. Если отображение строки состояния отключено по команде SET STATUS BAR OFF, сообщение располагается в центре последней строки главного окна Visual FoxPro.
SKIP [FOR lExpression]
Задает условие доступности элемента меню: если выражение lExpression имеет значение "истина" (.T.), элемент меню недоступен и пользователь не может выбирать его, а если выражение имеет значение "ложь" (.F.), элемент меню доступен. Недоступный элемент меню отображается определенными для данного состояния цветами. Вы также можете сделать элемент недоступным, поставив перед его названием обратную косую черту (\). Например:
  Копировать код
DEFINE BAR 1 OF popReceive PROMPT '\Invoices'
Пункт меню, заблокированный с помощью условия заданного в SKIP или \, не может быть выбран.
COLOR SCHEME nSchemeNumber
Задает цвета для отдельного элемента меню, отменяя цвета, принятые по умолчанию или заданные с помощью команды DEFINE POPUP.
COLOR ColorPairList
Задает цвета для отдельного элемента меню, отменяя цвета, принятые по умолчанию или заданные с помощью команды DEFINE POPUP. Вы можете задать цвета для всех элементов меню, символов маркировки и сообщений. По умолчанию цвета элементов меню определяются цветовой схемой 2 текущего цветового набора.
MRU
Определяет для изображения меню вертикальные двойные угловые скобки, указывающие Последний раз Используемое меню. Вы должны обеспечить сценарий, который динамически обрабатывает меню и добавляет любые новые строки меню. Для меню, вызванных с ключевым словом MRU, Visual FoxPro налагает 1-2 секунды задержки перед вызовом команды ON SELECTION BAR. Пользователь может нажать на строку меню, чтобы немедленно вызвать команду ON SELECTION BAR. Если Вы используете ключевое слово MRU, Visual FoxPro игнорирует PROMPT и другие ключевые слова, связанные с данный пунктом.
  Копировать код
DEFINE BAR 4 OF popMyPopup MRU
INVERT
Определяет отображение меню с эффектом инверсии цветов.
  Копировать код
DEFINE BAR 4 OF popMyPopup PROMPT '\|Start a new column' ;
   PICTRES _med_copy INVERT

Комментарии

Команда DEFINE BAR используется совместно с командой DEFINE POPUP для создания меню. Меню создается и получает имя с помощью команды DEFINE POPUP. Чтобы поместить элементы в меню, нужно выдать серию команд DEFINE BAR.

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

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

Чтобы создать для некоторого элемента меню ниспадающее подменю, воспользуйтесь командой ON BAR.

Example

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

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

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

  Копировать код
   *** Name this program DEFINBAR.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 definbar 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 definbar 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

Смотреть также