设置首页  |   加入收藏  |  联系我们   
您的位置: 主页>程序设计>VFP>正文
定义自己的右键快捷菜单
文章来源:  编辑:  发布时间:2007-12-12


    VFP5.0的多数控件具有自己的RightClick方法来响应鼠标右键单击事件。我们可以利用这一特性,方便地定制适合自己需要的快捷菜单。比如在常用的编辑框里单击一下鼠标右键,就可以获得一个编辑快捷菜单,包含有常用的复制、剪切、粘贴、还原、重做等功能。下面是创建动态菜单的步骤。
  首先,需要创建一个不可视类ShortcutMenu,该类用来响应自定义快捷菜单的显示和动作:选择新建类,在“新类”对话框中填入新类名称ShortcutMenu,该类派生于Container,将其存储在dymenu.vcx中。
  在类设计器界面下,将其调整为一个图标大小(16*16)。为该类添加一个“新方法程序” ShowMenu,用于显示快捷菜单。

  ·建立菜单·

  1.为showmenu填入以下代码:
  LPARAMETERS taMenu
  *:\\taMenu是上级传来的数组
  LOCAL lcOnSelection, lnMenuCount, lnCount, llDoubleArray
  LOCAL lcMenuItem, lcMenuSelection
  IF PARAMETERS()=0 OR TYPE(″taMenu″)#″C″
  RETURN .F.
  ENDIF
  lnMenuCount=0
  lnMenuCount=ALEN(taMenu,1)
  *:\\获取数组的行数,即菜单项数
  IF lnMenuCount=0
  RETURN .F.
  ENDIF
  llDoubleArray=(ALEN(taMenu,2)>0)
  *:\\检查传来的数组是否是二维数组
  ACTIVATE SCREEN
  DEACTIVATE POPUP —popShortcutMenu
  *:定义动态菜单
  DEFINE POPUP —popShortcutMenu ;
  FROM MROW(),MCOL() ;
  MARGIN ;
  RELATIVE ;
  SHORTCUT
  FOR lnCount = 1 TO lnMenuCount
  *:根据上级传来的参数定义菜单条目
  lcMenuItem=IIF(llDoubleArray,taMenu[lnCount,1],taMenu[ln
  Count])
  *:\\ 逐一提取菜单项。如果是二维数组则取第lnCount行
  第一列元素
  *:\\ 否则如果是二维数组则取第lnCount行元素
  DEFINE BAR lnCount OF —popShortcutMenu PROMPT
  (lcMenuItem)
  *:\\定义第lnCount菜单项
  ENDFOR
  ON SELECTION POPUP —popShortcutMenu DEACTIVATE
  POPUP —popShortcutMenu
  ACTIVATE POPUP —popShortcutMenu
  RELEASE POPUP —popShortcutMenu
  *:\\如果没有活动菜单或者用户按下 Esc 键则直接返回
  IF BAR()=0
  RETURN .F.
  ENDIF
  IF llDoubleArray
  lcMenuSelection=taMenu[BAR(),2]
  *:\\ 根据实际选择的内容提取对应的命令语句,并送入字
  符变量lcOnSelection
  IF (NOT EMPTY(lcMenuSelection)) AND
  (TYPE(″lcMenuSelection″)==″C″)
  lcOnSelection=ALLTRIM(lcMenuSelection)
  ENDIF
  IF EMPTY(lcOnSelection)
  lcOnSelection=ALLTRIM(IIF(EMPTY(tcOnSelection),″″,t
  cOnSelection))
  ENDIF
  ELSE
  lcOnSelection=ALLTRIM(IIF(EMPTY(tcOnSelection),″″,tcOn
  Selection))
  ENDIF
  IF EMPTY(lcOnSelection)
  *:\\如果对应命令为空则返回
  RETURN .F.
  ELSE
  *:\\否则展开命令字符串解释执行
  &lcOnSelection
  ENDIF
  2.在方法destroy中填入以下代码:
  DEACTIVATE MENU —popShortcutMenu
  3.在方法Init Event中填入以下代码:
  THIS.visible = .F. &&运行期间不显示。
  至此,我们的幕后响应工作已经完成。
  方法ShowMenu用一个二维数组接收一组快捷菜单命令,动态地定义、显示它们。其中,数组的第一列数据是菜单提示信息,第二列是对应的命令字符串。因此,调用过程只需按此格式定义好一个二维数组,然后发送给ShortcutMenu类的实例即可。

  ·使用动态菜单·

  1.先建立一个表单form1;
  2.按下表单控制工具栏上的查看类按钮,添加一个用户自定义的类库:dymenu.vcx,注册自定义控制:shortcutmenu;
  3.在表单上添加一个快捷菜单类的控制shortcutmenu1;
  4.在表单上添加上一个编辑框edit1。在其RightClick Event方法中添加如下代码:
  LOCAL laMenu[7,2]
  *:\\ 为该编辑框定义7个菜单条目
  *:\\ 数组的第一列是菜单条提示信息,第二列是要执行的命令字符串。
  IF THIS.SELLENGTH>0
  laMenu[1,1]=″\   ELSE
  laMenu[1,1]=″\拷贝″
  ENDIF
  laMenu[1,2]=[SYS(1500,″—med—copy″,″—medit″)]
  IF THIS.SELLENGTH>0
  laMenu[2,1]=″\   ELSE
  laMenu[2,1]=″\剪切″
  ENDIF
  laMenu[2,2]=[SYS(1500,″—med—cut″,″—medit″)]
  laMenu[3,1]=″粘贴″
  laMenu[3,2]=[SYS(1500,″—med—paste″,″—medit″)]
  laMenu[4,1]=′\-′ &&分隔条
  laMenu[4,2]=′ ′
  laMenu[5,1]=′复原′
  laMenu[5,2]=[SYS(1500,″—MED—UNDO″,″—medit″)]
  laMenu[6,1]=′重做′
  laMenu[6,2]=[SYS(1500,″—MED—REDO″,″—medit″)]
  laMenu[7,1]=′自定义′
  laMenu[7,2]=″ wait window ′能看见我么?′ ″
  THISFORM. Shortcutmenu1.ShowMenu(@laMenu)
  *:\\调用快捷菜单方法,注意要以传地址方式传递数组
  RETURN
  5.单击运行按钮,然后右击编辑框,快捷菜单就被激活了。
  在实际使用当中,可以为不同的控制在RightClick Event方法中定义不同的快捷菜单,使用起来就更为方便。当然,一个表单上有一个shortcutmenu类的控制就够了!


Tags:菜单 快捷 自己 定义 laMenu 一个 ENDIF IF popShortcutMenu

Google
 
上一篇: 在VFP中实现菜单、表单与工具条的动态连接   下一篇: 在VFP的报表生成器中巧构IIF()函数实现条
【返回顶部】 【打印】 【大】 【中】 【小】 【关闭】

 我来说两句
用户名: 新注册) 密码: 匿名评论 [论坛讨论]
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 相关文章
 热门文章

 
版权所有  2005-2006  Linux集中营  闽ICP备07500055号