在 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 系统菜单中的一个菜单项。例如,要访问“打印”菜单项,可发出如下命令:
DEFINE BAR _MFI_PRINT OF popMyPopup PROMPT "Print..."
不是所有的 Visual FoxPro 系统菜单项都可用,使用 SYS(2013) 可返回可用的 Visual FoxPro 系统菜单列表。
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”键从 Receive 菜单中选择 Invoices,按下“Q”键从同样的菜单中选择 Inquiry。
BEFORE nMenuItemNumber2
在 nMenuItemNumber2 指定的菜单项前面放置一个菜单项。
AFTER nMenuItemNumber3
在 nMenuItemNumber3 指定的菜单项后面放置一个菜单项。
附注
为了使 BEFORE 或 AFTER 有效,用 DEFINE POPUP 创建菜单时必须包含 RELATIVE 子句。
也可以在 BEFORE 和 AFTER 子句中包含 _MFIRST 和 _MLAST。如果 BEFORE 子句中包含 _MFIRST,则菜单项就是菜单中的第一项;如果 AFTER 子句中包含 _MFIRST,则菜单项就是菜单上的第二项;如果在 AFTER 子句中包含 _MLAST,则菜单项就是菜单上的最后一项;如果在 BEFORE 子句中包含 _MLAST,则菜单项就是菜单上的倒数第二项。
用 DEFINE POPUP RELATIVE 创建的菜单不会给没有定义的菜单项保留空间。例如,如果在一个菜单上定义了项 1,2,4 和 5,则不为项 3 保留空间,可在以后插入项 3,使菜单扩充来容纳该项。
运行下列程序示例。注意每个菜单上菜单项的顺序和放置的区别:
*** RELATIVE示例 ***
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示例 ***
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]
为菜单项指定字体。cFontName 指定字体的名称,nFontSize 指定字体磅值。例如,下面的命令用 12 磅 Courier 字体创建一个菜单项:
DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' FONT 'Courier', 12
如果包含 FONT 子句但省略磅值 nFontSize,则使用 10 磅。在 Visual FoxPro 中,如果指定的字体不可用,则用相似的字体代替。
STYLE cFontStyle
为菜单项指定字形。如果省略 STYLE 子句,则使用常规字形。在 Visual FoxPro 中,如果指定的字形不可用,则用相似的字形代替。
cFontStyle 可指定以下字形:
字符 | 字形 |
B | 粗体 |
I | 斜体 |
N | 常规 |
Q | 不透明 |
– | 删除线 |
T | 透明 |
U | 下划线 |
可组合多个字符指定一个字形。例如,下面的命令指定字形为“粗斜体”:
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 for MS-DOS 中默认的标记字符为一个菱形,而在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中是一个对勾。
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中,如果包含菜单项的菜单合并到 Visual FoxPro 系统菜单中,则忽略 MARK 子句而使用默认的标记字符。如果包含菜单项的菜单放置在 Visual FoxPro
主窗口或用户自定义窗口中,而 FoxFont 不是该窗口的字体,则忽略 MARK 子句。
注意 标记字符并不标记一个菜单项,可使用 SET MARK OF 来标记一个菜单项。
在 DEFINE BAR 中指定的标记字符优先于 DEFINE POPUP 中用 MARK
指定的标记字符。SET MARK OF 用来将标记字符切换为开或关,也可用来为单个菜单项或所有菜单项指定标记字符。
MESSAGE cMessageText
当选择一个菜单项时显示一条信息。在 FoxPro for MS-DOS 中,默认的情况是将信息 cMessageText 放在 FoxPro 主窗口最后一行的中央;可用 SET MESSAGE 改变信息的位置。
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for Macintosh 中,信息放在图形方式状态栏中。如果用 SET STATUS BAR OFF 关闭图形方式状态栏,则信息放到 Visual FoxPro 主窗口最后一行的中央。
SKIP [FOR lExpression]
指定一个条件。如果 lExpression 计算为“真”(.T.),则使菜单项无效,不让用户选择它;如果为“假”(.F.),则激活此菜单项。无效的菜单项以暗灰色显示。
也可以通过在提示文本前加一个反斜杠 (\) 使一个菜单项无效。例如:
DEFINE BAR 1 OF popReceive PROMPT '\Invoices'
在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中不能选择用 SKIP 或 \ 废止的菜单项;而在 FoxPro for Macintosh 中,可以选定一个废止的菜单项但不能选择执行。当选定废止的菜单项后,仍然显示有关废止菜单项的信息。
在 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”的内存变量计算为“真”时要跳过某一菜单项。可以在菜单启动代码中包含下面几行来利用 _MEMVARMASK 变量:
PUBLIC _memvarmask
_memvarmask = "skipvar"
STORE .T. TO skipvar && 初始时跳过。
要创建一组跳过变量,可以在菜单启动代码中包含下面几行:
PUBLIC _memvarmask
_memvarmask = "skip*"
STORE .T. TO skipthis, skipthat && 初始时跳过。
当运行拼写检查和向导时,它们不隐藏 SKIP FOR 表达式中的变量,这就避免了在拼写检查或向导处于活动状态时可能遇到的错误信息。
注意:_MEMVARMASK 不是一个系统内存变量。
COLOR SCHEME nSchemeNumber
为单个菜单项指定颜色,这会改写默认颜色或 DEFINE POPUP 指定的颜色。在 FoxPro for MS-DOS 中,可指定所有菜单项、标记字符以及信息的颜色。
COLOR ColorPairList
为单个菜单项指定颜色,这将改写默认颜色或 DEFINE POPUP 指定的颜色。可为所有菜单项、标记字符以及信息指定颜色。
默认情况下,菜单项颜色由当前颜色集的配色方案 2 决定。
有关配色方案和颜色对的详细内容,请参阅颜色概述主题。
说明
DEFINE BAR 和 DEFINE POPUP 共同来创建菜单,用 DEFINE POPUP 创建菜单并给它命名,用一组 define bar 命令在菜单上放置菜单项。
如果使用菜单设计器创建菜单,则没有必要使用这些命令。菜单设计器自动为菜单创建一个命令。菜单设计器使用 Visual FoxPro 系统菜单,您可以增加菜单项来更改它。有关创建菜单的详细内容,请参阅创建菜单系统和《开发指南》的第十二章“设计菜单和工具条”。
也可创建一个菜单,让它包含位于磁盘上的表或一组文件中的记录或字段。有关详细内容,请参阅 DEFINE POPUP 中的 PROMPT FIELD 子句、PROMPT STRUCTVRE 子句和 PROMPT FILES 子句。
使用 ON BAR 可为菜单项创建一个层叠式子菜单。