Команда DEFINE PAD

Создает заголовок меню в пользовательской строке меню или в системной строке меню Visual FoxPro.

Синтаксис:

DEFINE PAD MenuTitle1 OF MenuBarName PROMPT cMenuTitleText
	[AT nRow, nColumn]
	[BEFORE MenuName2 | AFTER MenuName3]
	[NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT]
	[FONT cFontName [, nFontSize]]
	[STYLE cFontStyle]
	[KEY KeyLabel [, cKeyText]]
	[MARK cMarkCharacter]
	[SKIP [FOR lExpression]]
	[MESSAGE cMessageText]
	[COLOR SCHEME nSchemeNumber
	| COLOR ColorPairList]

Параметры:
MenuTitle1
Задает создаваемый заголовок меню. По этому имени вы сможете ссылаться на данный заголовок меню в других командах и функциях.
OF MenuBarName
Задает имя строки меню, в которой размещается заголовок меню.
PROMPT cMenuTitleText
Задает текст заголовка меню.
Вы можете создать для заголовка меню клавишу доступа, поставив перед нужным символом обратную косую черту со знаком "меньше" (\<). В следующем примере пользователь, нажав клавишу I, сможет выбрать команду Invoices из меню Receive, а нажатием клавиши Q он выберет командуInquiry из того же меню:

DEFINE MENU mnuReceive
DEFINE PAD padInvoice OF mnureceive PROMPT "\<Invoices"
DEFINE PAD padInquire OF mnureceive PROMPT "In\<quiry"
ACTIVATE MENU mnuReceive

AT nRow, nColumn
Указывает, в каком месте строки меню должен стоять заголовок меню. nRow, nColumn представляют собой координаты левой стороны заголовка меню в основном окне Visual FoxPro или в пользовательском окне.
Если опустить предложение AT, левая сторона первого заголовка меню будет находиться в строке 0 основного окна Visual FoxPro или пользовательского окна. Следующий заголовок меню будет вставлен справа от первого имени в строке 0 и т.д.
Замечание. Предложение AT нельзя использовать для задания местоположения заголовков меню в строках меню, созданных с помощью предложения BAR по команде DEFINE MENU.
BEFORE MenuName2
Вставляет заголовок меню в строку меню слева от заголовка меню, заданного именем MenuName2. Порядок доступа к заголовкам меню с клавиатуры определяется их расположением в строке меню.
AFTER MenuName3
Вставляет заголовок меню в строку меню справа от заголовка меню, заданного именем MenuName3. Порядок доступа к заголовкам меню с клавиатуры определяется их расположением в строке меню.
Предварительно нужно создать заголовок меню, указываемый в предложении BEFORE или AFTER. Если этого не сделать, местоположение данного заголовка меню в строке меню будет определяться временем его создания или позицией, заданной в предложении AT.
Если строка меню создана с помощью предложения BAR, то предложения BEFORE и AFTER определяют порядок доступа к ее заголовкам меню с клавиатуры. Местоположение заголовка меню определяется позицией, заданной в предложении AT.
Выполните два следующих примера программ и обратите внимание на различия в размещении заголовков меню и в порядке доступа к ним, в зависимости от использования предложения AT при определении этих заголовков меню:

*** Program Example 1 without ATs ***
DEFINE MENU mnuBefAft
DEFINE PAD padOne   OF mnuBefAft PROMPT '1111'
DEFINE PAD padTwo   OF mnuBefAft PROMPT '2222'
DEFINE PAD padThree OF mnuBefAft PROMPT '3333'
DEFINE PAD padFour  OF mnuBefAft PROMPT '4444' BEFORE padTwo
ACTIVATE MENU mnuBefAft

*** Program Example 2 with ATs ***
DEFINE MENU mnuBefAft
DEFINE PAD padOne   OF mnuBefAft PROMPT '1111' AT 1,5
DEFINE PAD padTwo   OF mnuBefAft PROMPT '2222' AT 1,15
DEFINE PAD padThree OF mnuBefAft PROMPT '3333' AT 1,25
DEFINE PAD padFour  OF mnuBefAft PROMPT '4444' BEFORE padTwo AT 1,35
WAIT WINDOW 'Press ESC to erase menu' NOWAIT
ACTIVATE MENU mnuBefAft

NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT
Задает положение заголовка меню в строке меню Visual FoxPro, когда осуществляется визуальное редактирование OLE.
NEGOTIATE LEFT указывает, что заголовок меню помещается слева от File Group>.
NEGOTIATE MIDDLE указывает, что заголовок меню помещается слева от Container Group после меню Edit.
NEGOTIATE RIGHT указывает, что заголовок меню помещается слева от Window Group.
Если предложение NEGOTIATE опущено, заголовок меню во время визуального редактирования OLE убирается из строки меню.
FONT cFontName [, nFontSize]
Допустимо только в Visual FoxPro.
Задает шрифт для заголовка меню. cFontName задает имя шрифта, а nFontSize его размер в пунктах. Например, следующая команда создает заголовок меню с помощью 12-пунктового шрифта Courier:

DEFINE PAD padPageAccts OF mnuReceive FONT 'Courier', 12

Если вы задали предложение FONT, опустив размер шрифта nFontSize, используется размер 10 пунктов. Если в Visual FoxPro заданный шрифт отсутствует, его заменяет шрифт с похожими характеристиками.
Предложение FONT игнорируется для заголовков меню, добавленных в системное меню Visual FoxPro _MSYSMENU. Заметьте, что это системное меню 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 PAD padPageAccts OF mnuReceive STYLE 'BI'

Предложение STYLE игнорируется для заголовков меню, добавленных в системное меню Visual FoxPro _MSYSMENU. Заметьте, что это системное меню Visual FoxPro используется в конструкторе меню.

KEY KeyLabel [, cKeyText]

Задает клавишу доступа или комбинацию клавиш для заголовка меню. Список доступных клавиш и комбинаций клавиш вместе с их названиями см. в теме ON KEY LABEL.
Замечание. Если для заданного названия клавиши уже определена макрокоманда клавиатуры, она имеет приоритет и вы не сможете выбрать заголовок меню с помощью указанной клавиши или комбинации клавиш.
В строках меню, созданных без участия предложения BAR, название клавиши ставится правее заголовка меню. В строках меню, созданных с помощью предложения BAR, и в системной строке меню Visual FoxPro названия клавиш для заголовков меню не отображаются.
Задав cKeyText, вы можете заменить название клавиши собственным текстом. Например, если задать KEY ALT+B, то справа от заголовка меню будет стоять текст ALT+B. Если задать KEY ALT+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.
Символы маркировки, заданные в команде DEFINE PAD, имеют более высокий приоритет по сравнению с символами маркировки, заданными в предложении MARK команды DEFINE MENU. Команда SET MARK OF используется как переключатель, отображающий или убирающий символы маркировки, и позволяет задать символ маркировки для отдельного заголовка меню или для всех заголовков меню.
Замечание. Задавая символ маркировки, вы не помечаете заголовок меню; для этого следует пользоваться командой SET MARK OF.
SKIP [FOR lExpression]
Задает условие доступности заголовка меню: если выражение lExpression имеет значение "истина" (.T.), заголовок меню недоступен, и пользователь не может выбирать его, а если выражение имеет значение "ложь" (.F.), элемент меню доступен.
Вы также можете сделать элемент меню недоступным, поставив перед текстом заголовка меню обратную косую черту (\). Например:

DEFINE PAD padPageAccts OF mnuReceive PROMPT '\Age Accounts'

Заголовок меню padPageAccts будет изображен в тусклых тонах, указывающих на то, что пользователь не может его выбрать.
В FoxPro для MS-DOS заголовок меню, сделанный недоступным с помощью предложения SKIP или обратной косой черты (\), нельзя выделить.
В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh недоступный заголовок меню можно отобразить, но нельзя выделить. Впрочем, соответствующее ему сообщение, определенное предложением MESSAGE, появится на экране.
В 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 не является системной переменной памяти.
MESSAGE cMessageText
Выдает сообщение при выделении заголовка меню. В FoxPro для MS-DOS сообщение cMessageText по умолчанию размещается в центре последней строки основного окна FoxPro; положение сообщения можно изменить с помощью команды SET MESSAGE.
В Visual FoxPro, FoxPro для Windows и FoxPro для Macintosh сообщение выводится в графической строке состояния. Если отображение строки состояния отключено по команде SET STATUS BAR OFF, сообщение располагается в центре последней строки основного окна Visual FoxPro.
COLOR SCHEME nSchemeNumber
Задает цвета для отдельного заголовка меню, отменяя цвета, принятые по умолчанию или заданные командой DEFINE MENU. В FoxPro для MS-DOS можно задать цвета для всех заголовков меню, символов маркировки и сообщений.
COLOR ColorPairList
Задает цвета для отдельного заголовка меню, отменяя цвета, принятые по умолчанию или заданные с помощью команды DEFINE MENU. В FoxPro для MS-DOS можно задать цвета для всех заголовков меню, символов маркировки и сообщений.
По умолчанию цвета заголовков меню в строках меню определяются цветовой схемой 2 текущего цветового набора.
Подробнее о цветовых схемах и цветовых парах см. тему Использование цветов.

Комментарии:
Каждый заголовок меню, вставляемый в строку меню, должен быть создан с помощью отдельной команды DEFINE PAD. Строка меню должна быть определена с помощью команды DEFINE MENU до того, как вы начнете помещать в нее заголовки меню, и имя этой строки меню следует указать в команде DEFINE PAD.
Если вы для создания меню используете конструктор меню, вы можете вообще обойтись без этих команд. Конструктор меню автоматически генерирует команды, описывающие меню. В конструкторе меню используется системное меню Visual FoxPro, которое вы можете модифицировать, добавляя свои элементы. Подробнее о работе в конструкторе меню см. тему Создание системы меню и главу 12 "Конструирование меню" Руководства разработчика.
Замечание В FoxPro для Macintosh не следует вставлять в строку меню больше заголовков меню, чем помещается вдоль экрана. Вы можете формировать заголовки меню правее заголовка Balloon Help, но все они будут недоступны.

Пример:

* В следующем примере команда DEFINE PAD используется для
* размещения заголовков меню в системной строке меню Visual FoxPro.
* Сначала текущая системная строка меню сохраняется в памяти с
* помощью команды SET SYSMENU SAVE, а затем все системные заголовки
* меню удаляются командой SET SYSMENU TO.
* С помощью команды DEFINE PAD создаются заголовки системных меню.
* Когда выбирается заголовок меню, выполняется процедура CHOICE. Она
* отображает имя выбранного заголовка меню и имя строки меню, а также
* устанавливает или сбрасывает символ маркировки для заголовков меню.
* Если выбрать заголовок меню Exit, восстанавливается первоначальная
* система меню Visual FoxPro.
*** Name this program DEFINPAD.PRG ***
CLEAR
SET TALK OFF
SET SYSMENU SAVE
SET SYSMENU TO
PUBLIC markpad
markpad = .T.
DEFINE PAD syspad    OF _MSYSMENU PROMPT '\<System'  COLOR SCHEME 3 ;
	KEY ALT+S, ''
DEFINE PAD editpad   OF _MSYSMENU PROMPT '\<Edit'    COLOR SCHEME 3 ;
	KEY ALT+E, ''
DEFINE PAD recordpad OF _MSYSMENU PROMPT '\<Record'  COLOR SCHEME 3 ;
	KEY ALT+R, ''
DEFINE PAD windowpad OF _MSYSMENU PROMPT '\<Window'  COLOR SCHEME 3 ;
	KEY ALT+W, ''
DEFINE PAD reportpad OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 ;
	KEY ALT+P, ''
DEFINE PAD exitpad   OF _MSYSMENU PROMPT 'E\<xit'    COLOR SCHEME 3 ;
	KEY ALT+X, ''
ON SELECTION MENU _MSYSMENU ;
	DO choice IN definpad WITH PAD( ), MENU( )
PROCEDURE choice
PARAMETER mpad, mmenu
WAIT WINDOW 'You chose ' + mpad + ;
	' from menu ' + mmenu NOWAIT
SET MARK OF PAD (mpad) OF _MSYSMENU TO ;
	! MRKPAD('_MSYSMENU', mpad)
markpad = ! markpad
IF mpad = 'EXITPAD'
	SET SYSMENU TO DEFAULT
ENDIF

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