# VFP按钮弹出菜单,今天来讲两个方法,非常实用

我们在开发界面的时候,有时候工具栏菜单太多,看一个按钮是不是可以弹出一个菜单,这样就可以多做很多的入口了,而且不占用工具栏空间。

首先来看下效果,加图标会更好看

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]
1
2
3
4
5
6
7
8
9

参数非常多,我们只需要了解一个重点,在哪里弹出 From nRow1,nColumn1 分别是行和列,而非坐标系

定义一个快捷菜单的指令

Define Popup shortcut shortcut From nRow1,nColumn1
1

那这个nRow1,nColumn1怎么求呢? 通过表单的长宽和行列的关系,来求出按钮控件应该弹出菜单的位置。

loForm=Thisform
*--进行位置换算
nrow=Wrows()/loForm.Height*(this.Top+this.height)
ncol=Wcols()/loForm.width*this.left
1
2
3
4

这样就求出了菜单应弹出的位置。

按钮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
1
2
3
4
5
6
7
8
9
10
11
12
13
14

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14

倦猫弹出菜单类用起来会更简单 首先是引入倦猫的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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

右键弹出,跟随左键 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

这个功能猫猫也老是忘记怎么写,发在文章也做个记录。

天下网标王网站关键词优化排名怎么做的孝感外包网站优化价格贵州公司网站排名优化汉中网站优化排名推广中心随州网站优化费用北京服务网站优化设计宜昌低成本网站优化公司峡江网站关键词优化网站的优化方案怎么写专业网页设计网站seo优化无后台单页网站如何优化新站网站优化外包公司推广网站蜘蛛屯排名优化济源靠谱网站优化哪家好保山如何优化网站沿河网站关键词优化浙江信息化网站优化质量保障朝阳网站优化代理莲塘大型网站优化长春推荐网站推广优化不利于网站优化的做许昌网站自然优化哪家正规成都网站优化价格博乐网站优化服务电影网站关键字优化越秀网站关键词优化多少钱兰州网站整站优化怎么选优化网站建设哪家技术好易贝网站优化标题网站seo优化的技巧香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化