Команда DEFINE BAR

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

Синтаксис:

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

Параметры:
nMenuItemNumber1
Задает номер элемента меню. По этому номеру на данный элемент меню можно ссылаться в других командах и функциях.
SystemItemName
Задает элемент системного меню Visual FoxPro. Например, чтобы получить доступ к элементу меню 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 '\-'

Вы можете создать для элемента меню клавишу доступа, поставив перед нужным символом обратную косую черту со знаком "меньше" (\<). Например:

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 из того же меню. 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 позднее; меню соответствующим образом расширится.
Выполните программы, приведенные ниже в качестве примеров, и обратите внимание на различия в порядке и местоположении элементов каждого из меню:

*** 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,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 popRelatNo 

FONT cFontName [, nFontSize]
Допустимо только в Visual FoxPro.
Задает шрифт для элемента меню. cFontName задает имя шрифта, а nFontSize его размер в пунктах. Например, следующая команда создает элемент меню с помощью 12-пунктового шрифта Courier:

DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' FONT 'Courier', 12
Если вы задали предложение FONT, не задав размер шрифта nFontSize, используется размер 10 пунктов. Если в Visual FoxPro заданный шрифт отсутствует, его заменяет шрифт с похожими характеристиками.
STYLE cFontStyle
Допустимо только в Visual FoxPro.
Задает стиль шрифта для элемента меню. Если предложение STYLE опущено, используется стиль Normal (нормальный). Если в Visual FoxPro заданный стиль шрифта отсутствует, его заменяет стиль с похожими характеристиками.
В качестве cFontStyle можно задавать следующие стили шрифтов:
Символ	Стиль шрифта
B	Bold (Полужирный)
I	Italic (Курсив)
N	Normal (Нормальный)
O	Outline (Контурный)
Q	Opaque (Непрозрачный)
S	Shadow (Затененный)
-	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
Выдает сообщение при выборе элемента меню. В FoxPro для MS-DOS сообщение cMessageText по умолчанию размещается в центре последней строки главного окна FoxPro; положение сообщения можно изменить с помощью команды SET MESSAGE.
В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh сообщение выводится в графической строке состояния. Если отображение строки состояния отключено по команде SET STATUS BAR OFF, сообщение располагается в центре последней строки главного окна Visual FoxPro.
SKIP [FOR lExpression]
Задает условие доступности элемента меню: если выражение lExpression имеет значение "истина" (.T.), элемент меню недоступен и пользователь не может выбирать его, а если выражение имеет значение "ложь" (.F.), элемент меню доступен. Недоступный элемент меню отображается определенными для данного состояния цветами.
Вы также можете сделать элемент недоступным, поставив перед его названием обратную косую черту (\). Например:

DEFINE BAR 1 OF popReceive PROMPT '\Invoices' 

В Visual FoxPro, FoxPro для Windows и FoxPro для MS-DOS нельзя выделить элемент меню, сделанный недоступным с помощью предложения SKIP или символа \. В FoxPro для Macintosh недоступный элемент меню можно выделить, но нельзя выбрать. При выделении недоступного элемента меню на экране появляется соответствующее ему сообщение.
В FoxPro для Windows меню, созданные с использованием выражений SKIP FOR, могут неадекватно функционировать, когда активно средство проверки орфографии или программа-мастер.
Выражения SKIP FOR обычно зависят от значений определенных переменных (переменных пропуска), но эти переменные невидимы для ваших меню при работе программы проверки орфографии или программ-мастеров. В код инициализации этих приложений (соответственно SPELLCHK.APP и GENGRAPH.APP) специально включена команда PRIVATE ALL. В результате этого переменные пропуска будут скрыты от пользовательских меню и при выборе такого меню будет возникать сообщение об ошибке.
Чтобы исправить подобную ситуацию, в начало приложений проверки орфографии и программ-мастеров вставляется следующий код:

IF TYPE("_memvarmask") = "C" and !EMPTY(_memvarmask)
	PRIVATE ALL EXCEPT &_memvarmask
ELSE
	PRIVATE ALL
ENDIF

Предположим, вам необходимо пропустить некоторый элемент меню, когда переменная памяти "skipvar" имеет значение "истина". Чтобы воспользоваться переменной _MEMVARMASK, в код настройки вашего меню нужно включить следующие строки:

PUBLIC _memvarmask
_memvarmask = "skipvar"
STORE .T. TO skipvar             && Skip initially.

Чтобы создать набор переменных пропуска, включите в код настройки меню следующие строки:

PUBLIC _memvarmask
_memvarmask = "skip*"
STORE .T. TO skipthis, skipthat  && Skip initially.

При запуске программы проверки орфографии и программы-мастера они не будут скрывать переменные в выражениях SKIP FOR, что позволит избежать появления сообщений об ошибках.
Следует отметить, что _MEMVARMASK не является системной переменной памяти.

COLOR SCHEME nSchemeNumber
Задает цвета для отдельного элемента меню, отменяя цвета, принятые по умолчанию или заданные с помощью команды DEFINE POPUP. В FoxPro для MS-DOS можно задать цвета для всех элементов меню, символов маркировки и сообщений.
COLOR ColorPairList
Задает цвета для отдельного элемента меню, отменяя цвета, принятые по умолчанию или заданные с помощью команды DEFINE POPUP. Вы можете задать цвета для всех элементов меню, символов маркировки и сообщений.
По умолчанию цвета элементов меню определяются цветовой схемой 2 текущего цветового набора.
Подробнее о цветовых схемах и цветовых парах см. тему Использование цветов .

Комментарии:
Команда DEFINE BAR используется совместно с командой DEFINE POPUP для создания меню. Меню создается и получает имя с помощью команды DEFINE POPUP. Чтобы поместить элементы в меню, нужно выдать серию команд DEFINE BAR.
Если вы для создания меню используете конструктор меню, вы можете вообще обойтись без этих команд. Конструктор меню автоматически генерирует команды, описывающие меню. В конструкторе меню используется системное меню Visual FoxPro, которое вы можете модифицировать, добавляя свои элементы. Подробнее о создании меню см. тему Создание системы меню и главу 12 "Конструирование меню" Руководства разработчика.
Вы также можете создать меню, содержащее записи или поля из таблицы или список имеющихся на диске файлов. Подробнее см. описание предложений PROMPT FIELD, PROMPT STRUCTURE и PROMPT FILES команды DEFINE POPUP.
Чтобы создать для некоторого элемента меню ниспадающее подменю, воспользуйтесь командой ON BAR.

Пример:

* В следующем примере команда 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 SHADOW 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 SHADOW 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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 01.01.2003