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

143 篇文章 34 订阅
订阅专栏

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

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

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

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

写文章

热门文章

  • BS开发必须知道的两个函数,掌握它就入门啦 9043
  • 公众号回复消息不能超过5秒,大数据处理来不及怎么办? 7222
  • 快撸三合一BS用户管理模块,撸完就去泡咖啡,谁能享受人生? 4548
  • 成立了一个软件工作室,但是如何才能接到项目呢? 3635
  • VFP+VUE碰撞出火花来了,我入门猫框后开始摸索开发自己的系统 3137

分类专栏

  • VFP 143篇
  • 副业赚钱 6篇

最新评论

  • VFP创建和读取二维码的DLL库

    cwb635712: 大佬,如何做到无需注册调用dll; 在网上找了一篇博客:VB调用JMail发邮件(无需注册JMail.dll) http://www.cppblog.com/Zezese/archive/2010/11/07/132840.html 但是没能力改成VFP,大佬有空出个教程表情包

  • MSSQL触发器语句自定义错误,VFP怎么获取?

    cwb635712: 此代码在执行某些查询时会出现个别字段不显示,如果只查询SQL SERVER数据库表中的某个字段时还会失败

  • MSSQL触发器语句自定义错误,VFP怎么获取?

    cwb635712: [code=plain] Public gnConnhandle &&将该SQL连接句柄设为全局变量,其他过程中仍可继续调用 FUNCTION Mssql_Connection(pODBCDriver AS String, pODBCServer AS String, pODBCDatabase AS String, pna AS String, ppa AS String) AS Boolean gnConnhandle = SQLSTRINGCONNECT('driver=&pODBCDriver;Server=&pODBCServer;uid=&pna;pwd=&ppa;database=&pODBCDatabase') IF gnConnhandle > 0 &&判断SQL连接是否成功 SQLSETPROP(gnConnhandle, 'DispLogin', 3) &&连接失败时弹出提示框 SQLSETPROP(gnConnhandle, 'IdleTimeout', 0) &&设置连接一直有效 RETURN .T. ELSE RETURN .F. ENDIF ENDFUNC FUNCTION Mssql_Query(pSqlCmd, pCursorName) SQLEXEC(gnConnhandle, pSqlCmd, pCursorName) ENDFUNC [/code]

  • MSSQL触发器语句自定义错误,VFP怎么获取?

    cwb635712: 你好,MSSQLHelper.prg能否借鉴一下?

  • VFP使用BLOB字段存取图片到SQL2000,显示出来也EASY

    16AQCGZS: 太牛牛了,受教了。

大家在看

  • 低代码开发平台:高效开发新体验
  • 基于springboot+vue的便捷洗衣服务平台-可用于计算机毕设-课程设计-练手学习
  • [内网渗透]CobaltStrike4在Kali系统中实际应用
  • C++ | C++中与const相关的权限放大和缩小详解 909
  • 基于单片机的远程无线控制系统设计 1864

最新文章

  • VFP微信公众号标准库进度情况
  • 揭密VFP顶层菜单的秘密,精准控制
  • VFP调用模板消息主动发送给用户
2024年39篇
2023年62篇
2022年74篇
2021年73篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王武汉学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 网站制作 网站优化