DEFINE PAD 命 令
在用户自定义菜单栏或 Visual FoxPro 系统菜单栏上创建一个菜单标题 主菜单名
语 法
DEFINE PAD MenuTitle1 OF MenuBarName PROMPT cMenuTitleText
[AT nRow , nColum n ]
[BEFORE MenuName2 | AFTER MenuName3 ] [NEGOTIATE cContainerPosition [, cObjectPosition ]] [FONT cFontName [, nFontSize ]]
[STYLE cFontStyle ]
[KEY KeyLabel [, cKeyTex t]] [MARK cMarkCharacte r]
[SKIP [FOR lExpression ]] [MESSAGE cMessageText ]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairLis t]
参 数 描 述
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 是 菜 单 标 题 的 左 端 在
V isual FoxPro 主 窗 口 或 用 户 自 定 义 窗 口 中 的 坐 标
如果省略了 AT 子句 第一个菜单标题的左端就放在 Visual FoxPro 主窗口或用户自定义窗口的第 0 行 下一个菜单标题放在第一个标题的右端 依此类推
注 意 对 于 由 DEFINE MENU 中 的 BAR 子 句 创 建 的 菜 单 栏 不 能 通 过 包 含 A T
子 句 指 定 菜 单 标 题 的 位 置
BEFORE MenuName2
将 菜 单 栏 上 的 菜 单 标 题 放 到 MenuName2 指 定 的 菜 单 标 题 的 左 边 通 过 键 盘访 问 菜 单 标 题 的 顺 序 与 菜 单 栏 中 菜 单 标 题 的 位 置 一 致
AFTER MenuName3
将 菜 单 栏 上 的 菜 单 标 题 放 到 MenuName3 指 定 的 菜 单 标 题 的 右 边 通 过 键 盘访 问 菜 单 标 题 的 顺 序 与 菜 单 栏 中 菜 单 标 题 的 位 置 一 致
首先必须创建在 BEFORE 或 AFTER 子句中指定的菜单标题 如果不创建菜单标题那么菜单栏上的菜单标题的放置就由创建的顺序或用 AT 子句指定的位置决定
不是用 BAR BEFORE 或 AFTER 子句创建的菜单栏决定了由键盘访问菜单标题的顺序 菜单标题的位置由 AT 子句指定
运行下面两个 example 并注意当分别用 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 指 定 当 对 V isual FoxPro 表 单 中 的 一 个 ActiveX 控 件 进 行
OLE 可 视 编 辑 时 菜 单 标 题 在 V isual FoxPro 菜 单 栏 中 的 位 置
cObjectPosition 指 定 菜 单 标 题 在 Active Document 宿 主 程 序 的 菜 单 栏 中 的 位置
cContainerPosition 的 设 置 有
设 置 说 明
NONE 不显示菜单标题
LEFT 菜单标题放在 文件组 的右边
MIDDLE RIGHT |
菜单标题放在 菜单标题放在 |
容器组 窗口组 |
的右边 的左边 |
编辑 |
菜单的后面 |
---|---|---|---|---|---|
c Obejec t Position 的 设 置 有 |
|||||
设 置 |
说 明 |
||||
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 子 句 那 么 就 使 用 常 规 字 形 在
V isual FoxPro 中 如 果 指 定 的 字 形 不 可 用 那 么 就 用 相 似 的 字 形 代 替
下表列出了可以使用 cFontStyle 指定的字形
字 符 字 形
B 粗体
I 斜体
N 常规
Q 不透明
- 删除
-
透明
-
下划线
可以组合多个字符来指定字形 例如 下列命令指定粗斜体
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 指定空字符串可以不显示一个键标记
M A R K cMarkCharacter
指 定 出 现 在 菜 单 标 题 左 端 的 标 记 字 符 包 含 M A R K 子 句 可 以 将 默 认 的 标 记字 符 改 写 为 cMarkCharacter 指 定 的 字 符 如 果 cMarkCharacter 包 含 一 个 以上 字 符 则 仅 用 第 一 个 字 符 作 为 标 记 字 符
默认的标记字符为对勾号 当包含菜单标题的菜单栏是 Visual FoxPro 系统菜单时 就忽略 MARK 子句 且将使用默认的标记字符 如果菜单栏的 Visual FoxPro 所在的主窗口或用户自定义窗口中的字体不是 FoxFont 则忽略 MARK 子句
用 DEFINE PAD 指定的标记字符优先于 DEFINE MENU 中用 MARK 子句指定的标记字符 SET MARK OF 用来切换标记的打开或关闭 它也能用来为单个菜单标题或所有的菜单标题指定标记字符
注 意 指 定 一 个 标 记 字 符 并 不 能 给 菜 单 标 题 做 标 记 可 以 使 用 SET MARK OF 命
令 以 及 指 定 的 字 符 去 标 记 一 个 菜 单 标 题
SKIP [FOR lExpression ]
指 定 一 个 条 件 如 果 lExpression 为 真 (.T.) 菜 单 标 题 被 禁 止 禁 止 用 户
选 择 如 果 lExpression 为 假 (.F.) 则 允 许 选 择 菜 单 标 题
也可以在菜单标题文本前放置反斜杠 (\) 来禁止一个菜单项 For example: DEFINE PAD padPageAccts OF mnuReceive PROMPT '\Age Accounts'
菜单标题 padPageAccts 以暗灰色显示 表明不能选择它
在 Visual FoxPro 中禁止的菜单标题可以显示但不能选择 但是会显示由 MESSAGE 指定的菜单信息
MESSAGE cMessageText
选 择 一 个 菜 单 标 题 时 显 示 信 息 在 V isual FoxPro 中 消 息 放 在 图 形 方 式 状 态栏 中 如 果 图 形 方 式 状 态 栏 用 SET STATUS BAR OFF 关 闭 信 息 就 显 示 在V isual FoxPro 主 窗 口 最 后 一 行 的 中 央
COLOR SCHEME nSchemeNumber
为 单 个 菜 单 标 题 指 定 颜 色 它 将 取 代 默 认 的 或 用 DEFINE MENU 指 定 的 颜色
COLOR ColorPairList
为 单 个 菜 单 标 题 指 定 颜 色 它 将 取 代 默 认 的 或 用 DEFINE MENU 指 定 的 颜色
默认情况下 菜单栏中菜单标题的颜色由当前颜色集中的配色方案 2 决定有关颜色方案和颜色对的详细内容 请参阅稍前部分的 颜色概述
说 明
必须用 DEFINE PAD 命令创建放置在菜单栏上的每个菜单标题 在放置菜单标题之前 必须用 DEFINE MENU 定义菜单栏 且必须在 DEFINE PAD 中包含菜单栏名
如果使用菜单设计器创建菜单 根本没有必要使用这些命令 菜单设计器会自动为菜单创建这些命令 菜单设计器使用的是 Visual FoxPro 系统菜单 您可以通过添加自己的菜单项来更新它
有关创建菜单的详细内容 请参阅 Microsoft Visual FoxPro 6.0 中文版程序员指南第十一章 设计菜单和工具栏 中的 创建菜单系统
示 例
以下示例使用 DEFINE PAD 命令在 Visual FoxPro 系统菜单栏中放置菜单标题 首先使用 SET SYSMENU SAVE 命令将当前系统菜单栏存入内存 然 后 使 用 SET SYSMENU TO 命令清除系统菜单标题
使用 DEFINE MENU 命令创建菜单栏 使用 DEFINE PAD 命令创建两个菜单标题DEFINE POPUP 为每个菜单标题创建菜单 DEFINE BAR 创建在每个菜单上的菜单项 当选择菜单标题时 ON PAD 使用 ACTIVATE POPUP 激活相应的菜单ACTIVATE MENU 显示并激活菜单栏
当从菜单中选取菜单项时 执行 CHOICE 过程 CHOICE 显示已选取菜单项的名称和包含菜单项的菜单名
使用 DEFINE MENU 命令创建几个菜单栏 当从菜单中关闭菜单项时 执行 CHOICE 过程 CHOICE 显示已关闭菜单项的名称和包含菜单项的菜单名 并切换菜单标题的标记字符 开 和 关 如果关闭了 Exit 菜单标题 恢复原始的 Visual FoxPro
系统菜单
*** Name this program DEFINPAD.PRG *** CLEAR
SET TALK OFF
SET SYSMENU SAVE
SET SYSMENU TO
PUBLIC markpad markpad = .T.
ALT+R, ''
ALT+S, ''
ALT+E, ''
syspad _MSYSMENU '\<System' 3 ;
editpad _MSYSMENU '\<Edit' 3 ;
recordpad _MSYSMENU '\<Record' 3 windowpad _MSYSMENU '\<Window' 3 ;
ALT+W, ''
reportpad _MSYSMENU 'Re\<ports' 3 ;
ALT+P, ''
exitpad _MSYSMENU 'E\<xit' 3 ;
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
请 参 阅
ACTIVATE MENU , CREATE MENU , DEACTIVATE MENU , DEFINE
M E N U , GETPAD ( ) , HIDE MENU , MRKPAD( ) , ON PAD , ON SELECTION PAD , PRMPAD( ) , RELEASE PAD , S E T M A R K O F , SET MESSAGE , SET SYSMENU , S H O W M E N U