动态的定义POPUP,涉及字符串处理、递归、菜单定义语句等等。

也挺费劲的,

做出这个函数,就可扩展基类 _FORM, 以加上 接口:_c菜单定义 、_v菜单事件() 。

(1) 使用例子

TEXT to cMenu 
文件
    打开
        EXCEL
        WORD
    关闭
    Quit
    
编辑
    Copy
    paste
帮助    
ENDTEXT

glDefinePopup(cMenu,'abc')    
Activate Popup abc

(2)函数定义

*******************************************************************
Function glDefinePopup()Function glDefinePopup
Lparameters tcPopupDefine, tcPopupName 
*- 功能: 定义多级的关联popup菜单
*-
*- 参数
*- (1) tcPopupDefine: 菜单定义字符串,每项以换行分隔,以TAB确定级别
*- 例子: 
*- text to cPpDefine
*-    文件
*-        打开
*-            EXCEL
*-            WORD
*-        关闭
*- endtext
*-
*- (2) tcPopupName: 定出来的POPUP的名字
*-
Local i,cLine,n当前级数,n上级id_

Release POPUPS (tcPopupName) extended 

*- 转变为链表结构 ----------------
Create Cursor _csDefine_menu_MenuStru (id_ i , fid_ i , 菜单定义 c(240), 级数 i,子女数 i )
For i=1 to GetWordCount(tcPopupDefine,Chr(13))
    cLine = Alltrim( GetWordNum(tcPopupDefine,i,Chr(13)) , 1, Chr(10),Chr(32))
    If Empty(cLine)
        Loop
    EndIf 
    n当前级数 =  _n求级数(cLine) 

    n上级id_=0
    Do while not bof() && 往回找,找到级别比自己小[1级]的, 就是父. 取其id作fid_, 父的子女数+1
        If 级数 < n当前级数
            n上级id_ =  id_
            Replace 子女数 with 子女数+1
            Exit
        EndIf         
        Skip -1
    EndDo 
    
    Append Blank 
    Replace id_ with i, fid_ with n上级id_, 级数 with n当前级数, 菜单定义 with Ltrim(cLine,1,Chr(9)) 
Next 

_vDefinePopUp(0,0,tcPopupName)
Return .t.
**********************************************
Function _vDefinePopup()Function _vDefinePopup
Lparameters tn上级id, tn上级barID, tc上级popUp名
Local nBarCnt,nRecNo,c本级popup名

    
If tn上级barID = 0
    c本级popup名 = tc上级popUp名
Else
    c本级popup名 = tc上级popUp名+'_'+Alltrim(Str(tn上级barID,10))
    _vfp.DoCmd( Textmerge('On Bar <<tn上级barID>> of <<tc上级popUp名>> activate popup <<c本级popup名>>'))
EndIf     
_vfp.DoCmd( Textmerge("Define Popup <<c本级popup名>> shortcut relative "))
_vfp.DoCmd( Textmerge("On Selection Popup <<c本级popup名>> Deactivate Popup <<c本级popup名>> "))
*---

nBarCnt=0
nRecNo=Recno()
Scan for fid_ = tn上级id
    nBarCnt = nBarCnt + 1 
    _vfp.DoCmd( Textmerge("define Bar <<nBarCnt>>  of <<c本级popup名>> prompt '<<Trim(菜单定义)>>' " ))
    
    If 子女数 > 0
        _vDefinePopup(id_,nBarCnt,c本级popup名)
    EndIf     
EndScan 
Go (nRecNo)
Return 

**********************************************
Function _n求级数()Function _n求级数
Lparameters tcStr
Local nCnt,i
nCnt=0
For i=1 To Len(tcStr)
    If Substr(tcStr,i,1)=Chr(9)
        nCnt = nCnt + 1
    Else
        Exit
    Endif
Next

Return nCnt+1
**********************************************************


转载于:https://www.cnblogs.com/maxchan/archive/2007/08/30/876077.html

函数glDefinePopup(),动态定义多级的popup菜单相关推荐

  1. 动态导航多级下拉菜单 html,css3实现的多级渐变下拉菜单导航效果代码

    本文实例讲述了css3实现的多级渐变下拉菜单导航效果代码.分享给大家供大家参考.具体如下: 这是一款基于css3实现的下拉菜单导航,是非常漂亮的动画菜单,而且是多级菜单的形式,测试时发现可支持5级,估 ...

  2. python 定义函数方法_Python动态定义函数的方法介绍

    本篇文章给大家带来的内容是关于Python动态定义函数的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 基于 MIT 许可协议 在 Python 中,没有可以在运行时简化函数 ...

  3. python 动态定义函数_Python骚操作:动态定义函数

    标题:Python Tips: Dynamic function definition 作者:Philip Trauner 译者:豌豆花下猫 基于 MIT 许可协议 在 Python 中,没有可以在运 ...

  4. 下拉框可筛选多层级菜单多选_用Excel做多级下拉菜单媲美网页筛选器

    用Excel进行数据收集,做好一个数据录入文件给用户使用,结果收回来的数据让你令人抓狂:手机号不是11位 面积单位有人写平方米,有人写m2 张冠李戴,明明写姓名的地方,写了性别 说好写保留一位小数,却 ...

  5. qml中使用combobox实现多级菜单_excel实用技巧:如何构建多级下拉菜单

    编按:哈喽,大家好!说到做下拉菜单,小伙伴们都知道直接使用Excel中的数据验证就可以实现,但是二级.三级,甚至更多级的下拉菜单,可能就有点蒙圈了.其实用Excel制作三级下拉菜单,一点都不难,它就跟 ...

  6. 用 JA Transmenu 模块做多级弹出菜单

    转自http://www.joomlagate.com "弹出菜单"这个说法本来不规范,尽管你我都明白这是什么意思,而实际上我们所理解的那个菜单样式英文说法是"Slide ...

  7. excel实用技巧:如何构建多级下拉菜单

    使用数据有效性制作下拉菜单对大多数小伙伴来说都不陌生,但说到二级和三级下拉菜单大家可能就不是那么熟悉了. 什么是二级和三级下拉菜单呢?举个例子,在一个单元格选择某个省后,第二个单元格选项只能出现该省份 ...

  8. css画表格多级表头,element UI实现动态生成多级表头

    一.效果图 二.封装两个组件,分别为DynamicTable.vue和TableColumn.vue,TableColumn.vue主要是使用递归来对表头进行循环生成 DynamicTable.vue ...

  9. python中自定义函数如何传递动态参数_python 函数的动态参数

    1. 函数的动态参数 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 顺序:位置参数, *args, 默认值, **kwargs def func(*args, **k ...

  10. c语言不允许对数组的大小做动态定义,数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt...

    <数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt>由会员分享,可在线阅读,更多相关<数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt(32页珍藏版)> ...

最新文章

  1. linux进程管理fork,Linux -- 进程管理之 fork() 函数
  2. ajax加php实现三级联动
  3. 并发优化–减少锁粒度
  4. Guzzle – 构建 RESTful Web 服务的 PHP HTTP 框架
  5. 2639-Bone Collector II (01背包之第k优解)
  6. 线程安全的map_面试必问-几种线程安全的Map解析
  7. 技术宅的乐趣!网友编写出《流浪地球》“春节十二响”C语言源码
  8. Vue中,在<template>内进行页面链接跳转
  9. Openlayer:学习笔记之控件
  10. mysql 5.7 root 修改密码_Mysql5.7忘记root密码及mysql5.7修改root密码的方法
  11. 过度使用微信,正在让人越来越焦虑
  12. 当人工智能遇上医疗影像,你不得不知道这13家影像AI公司
  13. android 编程app_2020年用于Android App开发的顶级编程语言
  14. 算法——指定日期的星期推算
  15. 上海市高校计算机考试准考证
  16. qpython3下载-QPython3下载
  17. android版本新 老程序不能用_微信拍一拍功能不知道怎么用?教你拍好友和拍自己...
  18. 时间轮算法概念;netty时间轮使用
  19. unity3D游戏开发实战(四)——使用道具与密码锁
  20. python 游戏辅助脚本,python写游戏脚本辅助作范文

热门文章

  1. 【spring源码分析】spring中类型转换器详解
  2. 数组转ArrayList的正确方式
  3. 算法实践——改良的求解数独的暴力搜索法
  4. nginx+iis、NLB、Web Farm、Web Garden、ARR
  5. 基于RPM包的LAMP搭建
  6. phpMyAdmin安装配置方法全过程,及问题解决
  7. java 与 c# 3des 加解密
  8. [Android] 软件中选择文件夹功能
  9. [2018.11.03 T4] 7w523
  10. [2018.10.23 T2] 行星通道计划