首先来看下效果,加图标会更好看
VFP的弹出菜单指令
代码语言:javascript复制DEFINE POPUP MenuName [FROM nRow1, nColumn1] [TO nRow2, nColumn2]
[IN [WINDOW] WindowName | IN SCREEN]
[FONT cFontName [, nFontSize] [, nFontCharSet]] [STYLE cFontStyle]
[FOOTER cFooterText] [KEY KeyLabel] [MARGIN]
[MARK cMarkCharacter] [MESSAGE cMessageText] [MOVER] [MULTISELECT]
[PROMPT FIELD FieldName | PROMPT FILES [LIKE FileSkeleton]
| PROMPT STRUCTURE] [RELATIVE] [SCROLL] [SHORTCUT]
[TITLE cMenuTitleText] [RTLJUSTIFY]
[COLOR SCHEME nSchemeNumber | COLOR ColorPairList]
参数非常多,我们只需要了解一个重点,在哪里弹出 From nRow1,nColumn1 分别是行和列,而非坐标系
定义一个快捷菜单的指令
代码语言:javascript复制Define Popup shortcut shortcut From nRow1,nColumn1
那这个nRow1,nColumn1怎么求呢? 通过表单的长宽和行列的关系,来求出按钮控件应该弹出菜单的位置。
代码语言:javascript复制loForm=Thisform
*--进行位置换算
nrow=Wrows()/loForm.Height*(this.Top this.height)
ncol=Wcols()/loForm.width*this.left
这样就求出了菜单应弹出的位置。
按钮CLICK方法完整的代码就如下了
代码语言:javascript复制loForm=Thisform
*--进行位置换算
nrow=Wrows()/loForm.Height*(this.Top this.height)
ncol=Wcols()/loForm.width*this.left
Define Popup shortcut shortcut From nrow,ncol
Define Bar 1 Of shortcut Prompt "打印预览" Skip For .F.
Define Bar 2 Of shortcut Prompt "打印" Skip For .F.
On Selection Bar 1 Of shortcut loForm.topreview()
On Selection Bar 2 Of shortcut loForm.toprint()
Activate Popup shortcut
loForm.topreview() 为表单的自定义方法,预览
预览
loForm.toprint() 为表单的自定义方法,打印
测试一下,效果不错。 右键弹出,是跟随鼠标左键
代码语言:javascript复制loForm=Thisform
*--坐标计算
nrow=mrow()
ncol=mcol()
Define Popup shortcut shortcut From nrow,ncol
Define Bar 1 Of shortcut Prompt "打印预览" Skip For .F.
Define Bar 2 Of shortcut Prompt "打印" Skip For .F.
On Selection Bar 1 Of shortcut loForm.topreview()
On Selection Bar 2 Of shortcut loForm.toprint()
Activate Popup shortcut
倦猫弹出菜单类用起来会更简单 首先是引入倦猫的Cat_PopMenu类
代码语言:javascript复制*坐标计算
nrow=This.Left
ncol=This.Top This.Height
loPop = Newobject("PopMenu", "Cat_PopMenu")
loPop.nReturn = 1
loPop.Add("", "print", "打印")
loPop.Add("", "priview", "打印预览")
lcRet = loPop.Show(nrow,ncol) &&关键
If (Empty(m.lcRet))
Return
Endif
Do Case
Case m.lcRet = "print"
Messagebox("我是打印")
Case m.lcRet = "priview"
Messagebox("我是预览")
Endcase
右键弹出,跟随左键 loPop = Newobject("PopMenu", "Cat_PopMenu") loPop.nReturn = 1 loPop.Add("", "print", "打印") loPop.Add("", "priview", "打印预览") lcRet = loPop.Show() If (Empty(m.lcRet)) Return Endif
Do Case Case m.lcRet = "print" Messagebox("我是打印") Case m.lcRet = "priview" Messagebox("我是预览") Endcase
这个功能猫猫也老是忘记怎么写,发在文章也做个记录。