define pad 命令

示例 请参阅

在用户自定义菜单栏或 Visual FoxPro 系统菜单栏上创建一个菜单标题。

语法

DEFINE PAD MenuTitle1 OF MenuBarName PROMPT cMenuTitleText
[AT nRow, nColumn]
[BEFORE MenuName2 | AFTER MenuName3]
[NEGOTIATE cContainerPosition [, cObjectPosition]]
[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”键从“
Receive”菜单中选择“Invoices”,按下“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 子句,第一个菜单标题的左端就放在 Visual FoxPro 主窗口或用户自定义窗口的第 0 行,下一个菜单标题放在第一个标题的右端,依此类推。

注意 对于由 DEFINE MENU 中的 BAR 子句创建的菜单栏,不能通过包含 AT 子句指定菜单标题的位置。

BEFORE MenuName2

将菜单栏上的菜单标题放到 MenuName2 指定的菜单标题的左边。通过键盘访问菜单标题的顺序与菜单栏中菜单标题的位置一致。

AFTER MenuName3

将菜单栏上的菜单标题放到 MenuName3 指定的菜单标题的右边。通过键盘访问菜单标题的顺序与菜单栏中菜单标题的位置一致。
首先必须创建在 BEFORE 或 AFTER 子句中指定的菜单标题。如果不创建菜单标题,那么菜单栏上的菜单标题的放置就由创建的顺序或用 AT 子句指定的位置决定。
对于不带 BAR 创建的菜单栏,BEFORE 或 AFTER 子句决定了由键盘访问菜单标题的顺序,菜单标题的位置由 AT 子句指定。
运行下面两个示例,并注意当分别用 AT 子句和不用 AT 子句定义菜单标题时菜单标题的位置与访问顺序的区别:

*** 程序示例 1 不用 AT 子句 ***
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
***程序示例 2 使用 AT 子句 ***
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 cContainerPosition [, cObjectPosition]

cContainerPosition 指定当对 Visual FoxPro 表单中的一个 ActiveX 控件进行OLE 可视编辑时,菜单标题在 Visual FoxPro 菜单栏中的位置。

cObjectPosition 指定菜单标题在 Active Document 宿主程序的菜单栏中的位置。

cContainerPosition 的设置有:

设置 说明
NONE 不显示菜单标题。
LEFT 菜单标题放在“文件组”的右边。
MIDDLE 菜单标题放在“容器组”的右边,“编辑”菜单的后面。
RIGHT 菜单标题放在“窗口组”的左边。

cObejectPosition 的设置有:

设置 说明
NONE 不显示菜单标题。
LEFT 菜单标题放在“文件组”的右边。
MIDDLE 菜单标题放在“容器组”的右边,“编辑”菜单的后面。
RIGHT 菜单标题放在“帮助”菜单中。

注意,在 Active Document 应用程序中可能只有一个“RIGHT”菜单标题。如果指定了一个以上“RIGHT”菜单标题,那么所有的菜单标题都将放置在“帮助”菜单的左方。


如果省略 NEGOTIATE 子句,则当进行 OLE 可视编辑时从菜单栏中删除菜单标题。ONE 是 cContainerPosition 和 cObjectPosition 的默认值。

FONT cFontName [, nFontSize]

为菜单标题指定字体。cFontName 指定字体名称,nFontSize 指定磅值。例如,下列命令创建一个12 磅 Courier 字体的菜单标题:

DEFINE PAD padPageAccts OF mnuReceive FONT 'Courier', 12

如果在 FONT 子句中省略磅值 nFontSize,则使用 10 磅的字体。如果指定的字体不可用,那么就用相似的字体代替。

添加到 Visual FoxPro 系统菜单 _MSYSMENU 中的菜单标题忽略 FONT 子句,注意菜单设计器使用 Visual FoxPro 系统菜单。

STYLE cFontStyle

为菜单标题指定字形。如果省略 STYLE 子句,那么就使用常规字形。在Visual FoxPro 中,如果指定的字形不可用,那么就用相似的字形代替。

下表列出了可以使用 cFontStyle 指定的字形:

字符 字形
B 粗体
I 斜体
N 常规
Q 不透明
- 删除
T 透明
U 下划线

可以组合多个字符来指定字形。例如,下列命令指定粗斜体:

DEFINE PAD padPageAccts OF mnuReceive STYLE 'BI'

添加到 Visual FoxPro 系统菜单 _MSYSMENU 中的菜单标题忽略 STYLE 
子句,注意菜单设计器使用 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 for MS-DOS 中默认的标记字符为菱形,在 Visual FoxPro、
FoxPro for Windows 和 FoxPro for Macintosh 中默认的标记字符为对号。
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中忽略 MARK 子句,且当包含菜单标题的菜单栏是 Visual FoxPro 系统菜单时将使用默认的标记字符。如果菜单栏所在的 Visual FoxPro 主窗口或用户自定义窗口中的字体不是 FoxFont,也忽略 MARK 子句。

用 DEFINE PAD 指定的标记字符优先于 DEFINE MENU 中用 MARK 子句指定的标记字符。SET MARK OF 用来切换标记的打开或关闭。它也能用来为单个菜单标题或所有的菜单标题指定标记字符。

注意 指定一个标记字符并不能给菜单标题做标记,可以使用 SET MARK OF 
命令以及指定的字符去标记一个菜单标题。

SKIP [FOR lExpression]

指定一个条件。如果 lExpression 为“真”(.T.),菜单标题被废止,禁止用户选择;如果 lExpression 为“假”(.F.),则允许选择菜单标题。
也可以在菜单标题文本前放置反斜杠 (\) 来废止一个菜单项。例如:

DEFINE PAD padPageAccts OF mnuReceive PROMPT '\Age Accounts'

菜单标题 padPageAccts 以暗灰色显示,表明不能选择它。
在 FoxPro for MS-DOS 中,不能选择用 SKIP 或反斜杠 (\) 废止的菜单标题。
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中废止的菜单标题可以显示但不能选择。但是可以显示由 MESSAGE 指定的菜单信息。
在 FoxPro for 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”的内存变量计算为“真”(.T.)时跳过某一菜单标题,应该在菜单启动代码中包含下列代码行来利用 _MEMVARMASK 变量:

PUBLIC _memvarmask
_memvarmask = "skipvar"
STORE .T. TO skipvar && 初始时跳过。


要创建一组跳过变量,可在菜单启动代码中包含下列代码行:

PUBLIC _memvarmask
_memvarmask = "skip*"
STORE .T. TO skipthis, skipthat && 初始时跳过。


当运行拼写检查和向导应用程序时,它们并不隐藏 SKIP FOR 表达式中的变量,这样,当拼写检查或向导处于活动状态时就可以避免出现可能遇到的错误信息。
注意,_MEMVARMASK 不是系统内存变量。

MESSAGE cMessageText

当选择一个菜单标题时显示信息。在 FoxPro for MS-DOS 中,默认情况下信息 cMessageText 显示在 FoxPro 主窗口最后一行的中央;信息的显示位置可用 SET MESSAGE 改变。
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中,信息放在图形方式状态栏中。如果图形方式状态栏用 SET STATUS BAR OFF 关闭,信息就显示在 Visual FoxPro 主窗口最后一行的中央。

COLOR SCHEME nSchemeNumber

为单个菜单标题指定颜色,它将取代默认的或用 DEFINE MENU 指定的颜色。在 FoxPro for MS-DOS 中,可以为所有的菜单标题、标记字符和信息指定颜色。

COLOR ColorPairList

为单个菜单标题指定颜色。它将取代默认的或用 DEFINE MENU 指定的颜色。在 FoxPro for MS-DOS 中,可以为所有的菜单标题、标记字符和信息指定颜色。
默认情况下,菜单栏中菜单标题的颜色由当前颜色集中的配色方案 2 决定。
有关配色方案与颜色对的详细内容,请参阅颜色概述主题。

说明
必须用 define pad 命令创建放置在菜单栏上的每个菜单标题。在放置菜单标题之前,必须用 DEFINE MENU 定义菜单栏,且必须在 DEFINE PAD 中包含菜单栏名。
如果使用菜单设计器创建菜单,根本没有必要使用这些命令,菜单设计器会自动为菜单创建这些命令。菜单设计器使用的是 Visual FoxPro 系统菜单。您可以通过添加自己的菜单项来更新它。有关创建菜单的详细内容,请参阅创建菜单系统和《开发指南》的第十二章“设计菜单和工具条”。

附注
在 FoxPro for Macintosh 中,添加的菜单标题不要超过屏幕的宽度。可以在 Balloon Help 菜单标题以外添加菜单标题,但它们是不可访问的。