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

2022-04-07 19:58:57 浏览数 (1)

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

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

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

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

0 人点赞