怎样可以在程序里得到各菜单栏及子菜单项的中文名称?
BAR()
返回值
数值型
备注
DEFINE BAR 给菜单上的每一个菜单项赋予一个编号。当从菜单中选择一个菜单项时,BAR( ) 返回该菜单项对应的编号。根据 BAR() 的返回值,一个程序可以分支调用其他例程。
如果没有活动菜单,或者用户按下 Esc 键退出菜单,那么 BAR() 返回 0。
示例
下面的示例使用 bar() 将一个菜单项的编号传递给一个过程。用 set sysmenu save 命令将当前系统菜单栏保存到内存中,然后用 set sysmenu to 命令删除所有系统菜单标题。
define pad 命令创建了两个菜单标题,define popup 为每一个菜单标题创建一个菜单,define bar 在每一个菜单上创建菜单项。
当选择菜单标题时,on pad 使用 activate popup 命令激活相应菜单。当从菜单中选择一个菜单项时,on selection popup 使用 bar() 和 popup() 把菜单项编号和菜单标题传递给 choice 过程,choice 过程将显示所选菜单项的编号及其所属的菜单的名称。若选择 card info 菜单的 exit 项,原来的 Visual FoxPro 系统菜单将由 set sysmenu to default 命令恢复。
*** 该程序名字为 BAR_EXAM.PRG ***
CLEAR
SET SYSMENU SAVE
SET SYSMENU TO
DEFINE PAD padConv OF _MSYSMENU ;
PROMPT \<Conversions Color Scheme 3 ;
KEY ALT+C,
DEFINE PAD padCard OF _MSYSMENU ;
PROMPT Card \<Info Color Scheme 3 ;
KEY ALT+I,
ON PAD padConv OF _MSYSMENU ACTIVATE POPUP popConv
ON PAD padCard OF _MSYSMENU ACTIVATE POPUP popCard
DEFINE POPUP popConv MARGIN RELATIVE Color Scheme 4
DEFINE BAR 1 OF popConv PROMPT Ar\<ea KEY CTRL+E, ^E
DEFINE BAR 2 OF popConv PROMPT \<Length ;
KEY CTRL+L, ^L
DEFINE BAR 3 OF popConv PROMPT Ma\<ss ;
KEY CTRL+S, ^S
DEFINE BAR 4 OF popConv PROMPT Spee\<d ;
KEY CTRL+D, ^D
DEFINE BAR 5 OF popConv PROMPT \<Temperature ;
KEY CTRL+T, ^T
DEFINE BAR 6 OF popConv PROMPT T\<ime ;
KEY CTRL+I, ^I
DEFINE BAR 7 OF popConv PROMPT Volu\<me ;
KEY CTRL+M, ^M
*** 这里是 POPCONV 菜单使用 BAR( ) 函数的地方
*** 要传递一个 菜单项编号 到 PROCEDURE 调用选择如下。
ON SELECTION POPUP popConv;
DO choice IN bar_exam WITH BAR(), POPUP()
DEFINE POPUP popCard MARGIN RELATIVE Color Scheme 4
DEFINE BAR 1 OF popCard PROMPT \<View Charges ;
KEY ALT+V,
DEFINE BAR 2 OF popCard PROMPT View \<Payments ;
KEY ALT+P,
DEFINE BAR 3 OF popCard PROMPT Vie\<w Users ;
KEY ALT+W,
DEFINE BAR 4 OF popCard PROMPT \-
DEFINE BAR 5 OF popCard PROMPT \<Charges ;
KEY ALT+C
DEFINE BAR 6 OF popCard PROMPT \-
DEFINE BAR 7 OF popCard PROMPT E\<xit ;
KEY ALT+X
*** 这里是 POPCARD 菜单使用 BAR( ) 函数的地方
*** 要传递一个 菜单项编号 到过程调用选择如下。
ON SELECTION POPUP popCard;
DO choice IN bar_exam WITH BAR(), POPUP()
*** 用 gnBar 参数选择的过程
*** t包含 BAR( ) 函数传递的值。
PROCEDURE choice
PARAMETERS gnBar, gcPopup
WAIT WINDOW 你选择了 bar # + LTRIM(STR(gnBar)) + ;
从弹式菜单 + gcPopup NOWAIT
pad( ) 函数
以大写字符串形式返回在菜单栏中最近选取的菜单标题。
语法
PAD( )
返回值类型
字符型
说明
为使 pad( ) 函数返回一个菜单标题,必须定义且激活一个菜单栏。可以使用 DEFINE MENU 和 ACTIVATE MENU 命令创建和激活菜单栏。
pad( ) 函数也可以应用于 Visual FoxPro 的系统菜单栏。
如果没有定义并激活一个菜单栏或者在命令窗口中使用 pad( ) 函数,pad( ) 函数将返回一个空字符串。
pad( ) 函数示例
本示例应用 pad( ) 函数向一个过程传送菜单标题。
用 set sysmenu save 命令把当前 visual foxpro 系统菜单栏保存在内存中,并且用 set sysmenu to 命令删除所有系统菜单标题。一些系统菜单标题是用 define pad 命令创建的。当选择了一个菜单标题时,用pad( ) 函数把菜单标题传给名为 choice 的过程,choice 显示所选的菜单标题及菜单栏的名字。如果选择了“退出”菜单标题,则还原原始的 visual foxpro 系统菜单。
*** 此程序名为 padexam.prg ***
clear
set sysmenu save
set sysmenu to
define pad padsys of _msysmenu prompt \<system color scheme 3 ;
key alt+s,
define pad padedit of _msysmenu prompt \<edit color scheme 3 ;
key alt+e,
define pad padrecord of _msysmenu prompt \<record color scheme 3 ;
key alt+r,
define pad padwindow of _msysmenu prompt \<window color scheme 3 ;
key alt+w,
define pad padreport of _msysmenu prompt re\<ports color scheme 3 ;
key alt+p,
define pad padexit of _msysmenu prompt e\<xit color scheme 3 ;
key alt+x,
on selection menu _msysmenu ;
do choice in padexam with pad( ), menu( )
procedure choice
parameters gcpad, gcmenu
wait window you chose + gcpad + ;
from menu + gcmenu nowait
if gcpad = padexit
set sysmenu to default
endif
getpad( ) 函数
返回菜单栏给定位置上的菜单标题。
语法
GETPAD(cMenuBarName, nMenuBarPosition)
参数
cMenuBarName
指定菜单栏名称。
nMenuBarPosition
指定菜单栏上的某一位置。nMenuPosition 的取值范围从 1 开始(对应菜单栏上最左面的菜单标题),直到菜单中菜单标题的总数。
返回值类型
字符型
说明
可以添加、删除或重新调整标题栏上的菜单名。使用 DEFINE PAD 命令可以向标题栏中添加主菜单名,使用 RELEASE PAD 命令可以删除菜单标题。
getpad( ) 函数示例
下面的示例用 getpad( ) 函数测试“编辑”菜单名是否在 visual foxpro 的系统菜单栏上。如果在,getpad( ) 函数返回该菜单名(要把“编辑”菜单栏还原为默认状态,可执行 se sysmenu to default 命令)。
for gncount = 1 to cntpad(_msysmenu) && 菜单的数目
if prmpad(_msysmenu, getpad(_msysmenu, gncount)) = edit
release pad (getpad(_msysmenu, gncount)) of _msysmenu
exit
endif
endfor
我想你是期望獲得當前沒有激活菜單時的所有菜單元素.
countpad=cntpad("_msysmenu")
Dime padname[countpad,2]
j=1
rcp=countpad
For i=1 to countpad
padname[j,2]=getpad("_msysmenu",i)
padname[j,1]=left(prmpad("_msysmenu",padname[j,2]),len(prmpad("_msysmenu",padname[j,2]))-3)
j=j+1
Endfor
For i=1 to rcp
countbar=cntbar(padname[i,2])
Dime barname[countbar,2]
barcount1=0
For j=1 to countbar
barname[j,2]=j
barname[j,1]=prmbar(padname[i,2],barname[j,2])
?barname[j,1]+"----"+barname[j,2]
endfor
endfor