前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VFP按钮弹出菜单,今天来讲两个方法,非常实用

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

作者头像
加菲猫的VFP
发布2022-04-07 19:58:57
8710
发布2022-04-07 19:58:57
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP
我们在开发界面的时候,有时候工具栏菜单太多,看一个按钮是不是可以弹出一个菜单,这样就可以多做很多的入口了,而且不占用工具栏空间。

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档