我们在开发界面的时候,有时候工具栏菜单太多,看一个按钮是不是可以弹出一个菜单,这样就可以多做很多的入口了,而且不占用工具栏空间。
首先来看下效果,加图标会更好看
VFP的弹出菜单指令
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
分别是行和列,而非坐标系
定义一个快捷菜单的指令
Define Popup shortcut shortcut From nRow1,nColumn1
那这个nRow1,nColumn1怎么求呢?
通过表单的长宽和行列的关系,来求出按钮控件应该弹出菜单的位置。
loForm=Thisform
*--进行位置换算
nrow=Wrows()/loForm.Height*(this.Top+this.height)
ncol=Wcols()/loForm.width*this.left
这样就求出了菜单应弹出的位置。
按钮CLICK方法完整的代码就如下了
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() 为表单的自定义方法,打印
测试一下,效果不错。
右键弹出,是跟随鼠标左键
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类
*坐标计算
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
这个功能猫猫也老是忘记怎么写,发在文章也做个记录。