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


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

也挺费劲的,geek.gif

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

(1) 使用例子
TEXT  to  cMenu 
文件
    打开
        EXCEL
        WORD
    关闭
    Quit
    
编辑
    Copy
    paste
帮助    
ENDTEXT

glDefinePopup(cMenu,
' abc')    
Activate Popup abc

(2)函数定义

None.gif *******************************************************************
ExpandedBlockStart.gifContractedBlock.gif
Function glDefinePopup() Function glDefinePopup
InBlock.gifLparameters tcPopupDefine, tcPopupName 
InBlock.gif
*- 功能: 定义多级的关联popup菜单
InBlock.gif
*-
InBlock.gif
*- 参数
InBlock.gif
*- (1) tcPopupDefine: 菜单定义字符串,每项以换行分隔,以TAB确定级别
InBlock.gif
*- 例子: 
InBlock.gif
*- text to cPpDefine
InBlock.gif
*-    文件
InBlock.gif
*-        打开
InBlock.gif
*-            EXCEL
InBlock.gif
*-            WORD
InBlock.gif
*-        关闭
InBlock.gif
*- endtext
InBlock.gif
*-
InBlock.gif
*- (2) tcPopupName: 定出来的POPUP的名字
InBlock.gif
*-
InBlock.gifLocal i,cLine,n当前级数,n上级id_
InBlock.gif
InBlock.gifRelease POPUPS (tcPopupName) extended 
InBlock.gif
InBlock.gif
*- 转变为链表结构 ----------------
InBlock.gifCreate Cursor _csDefine_menu_MenuStru (id_ i , fid_ i , 菜单定义 c(
240), 级数 i,子女数 i )
InBlock.gif
For i=1 to GetWordCount(tcPopupDefine,Chr(13))
InBlock.gif    cLine 
= Alltrim( GetWordNum(tcPopupDefine,i,Chr(13)) , 1Chr(10),Chr(32))
InBlock.gif    
If Empty(cLine)
InBlock.gif        
Loop
InBlock.gif    EndIf 
InBlock.gif    n当前级数 
=  _n求级数(cLine) 
InBlock.gif
InBlock.gif    n上级id_
=0
InBlock.gif    
Do while not bof() && 往回找,找到级别比自己小[1级]的, 就是父. 取其id作fid_, 父的子女数+1
InBlock.gif        
If 级数 < n当前级数
InBlock.gif            n上级id_ 
=  id_
InBlock.gif            
Replace 子女数 with 子女数+1
InBlock.gif            
Exit
InBlock.gif        EndIf         
InBlock.gif        Skip 
-1
InBlock.gif    EndDo 
InBlock.gif    
InBlock.gif    Append Blank 
InBlock.gif    
Replace id_ with i, fid_ with n上级id_, 级数 with n当前级数, 菜单定义 with Ltrim(cLine,1,Chr(9)) 
InBlock.gif
Next 
InBlock.gif
InBlock.gif_vDefinePopUp(
0,0,tcPopupName)
InBlock.gif
Return .t.
InBlock.gif
**********************************************
ExpandedSubBlockStart.gifContractedSubBlock.gif
Function _vDefinePopup()Function _vDefinePopup
InBlock.gifLparameters tn上级id, tn上级barID, tc上级popUp名
InBlock.gifLocal nBarCnt,nRecNo,c本级popup名
InBlock.gif
InBlock.gif    
InBlock.gif
If tn上级barID = 0
InBlock.gif    c本级popup名 
= tc上级popUp名
InBlock.gif
Else
InBlock.gif    c本级popup名 
= tc上级popUp名+'_'+Alltrim(Str(tn上级barID,10))
InBlock.gif
    _vfp.DoCmd( Textmerge('On Bar <<tn上级barID>> of <<tc上级popUp名>> activate popup <<c本级popup名>>'))
InBlock.gif
EndIf     
InBlock.gif_vfp.DoCmd( Textmerge(
"Define Popup <<c本级popup名>> shortcut relative "))
InBlock.gif_vfp.DoCmd( Textmerge(
"On Selection Popup <<c本级popup名>> Deactivate Popup <<c本级popup名>> "))
InBlock.gif
*---
InBlock.gif
InBlock.gifnBarCnt
=0
InBlock.gifnRecNo
=Recno()
InBlock.gifScan 
for fid_ = tn上级id
InBlock.gif    nBarCnt 
= nBarCnt + 1 
InBlock.gif    _vfp.DoCmd( Textmerge(
"define Bar <<nBarCnt>>  of <<c本级popup名>> prompt '<<Trim(菜单定义)>>' " ))
InBlock.gif    
InBlock.gif    
If 子女数 > 0
InBlock.gif        _vDefinePopup(id_,nBarCnt,c本级popup名)
InBlock.gif    EndIf     
InBlock.gifEndScan 
InBlock.gifGo (nRecNo)
InBlock.gif
Return 
InBlock.gif
InBlock.gif
**********************************************
ExpandedSubBlockStart.gifContractedSubBlock.gif
Function _n求级数()Function _n求级数
InBlock.gifLparameters tcStr
InBlock.gifLocal nCnt,i
InBlock.gifnCnt
=0
InBlock.gif
For i=1 To Len(tcStr)
InBlock.gif    
If Substr(tcStr,i,1)=Chr(9)
InBlock.gif        nCnt 
= nCnt + 1
InBlock.gif    
Else
InBlock.gif        
Exit
InBlock.gif    Endif
InBlock.gif
Next
InBlock.gif
InBlock.gif
Return nCnt+1
InBlock.gif
**********************************************************
InBlock.gif
InBlock.gif
InBlock.gif

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值