VFP下动态快捷菜单

NOTE 动态快捷菜单生成
NOTE 作者:张雁鸿
NOTE 时间:2004-12-26
NOTE
NOTE
* 要求
* 提供:快捷菜单数据存放的cursor
* Cursor格式:id c(10),name c(50),parent c(10)
* id 必须以字母为开头

PARAMETERS m.tcurname,m.tnrow,m.tncol

IF NOT USED(tcurname)
 ERROR [没有提供菜单数据表]
 RETURN ''
ENDIF

SELECT (tcurname)

*!* IF NOT FIELD([id]) OR NOT FIELD([name]) OR NOT FIELD([parent]) OR NOT FIELD([level])
*!*  ERROR [数据格式不匹配]
*!*  RETURN ''
*!* ENDIF

IF VARTYPE(m.tnrow)<>'N'
 m.tnrow=MROW()
ENDIF
IF VARTYPE(m.tncol)<>'N'
 m.tncol=MCOL()
ENDIF

m.selid=""

DEFINE POPUP shtmnu RELATIVE SHORTCUT

createBar("",[shtmnu])

ACTIVATE POPUP shtmnu AT m.tnrow,m.tncol

RETURN m.selid

FUNCTION createBar(tcp as String,tcpop as String) as Boolean
 LOCAL m.lcur as String,m.llr as Boolean
 m.llr=.f.
 m.lcur=SYS(2015)
 IF NOT (EMPTY(m.tcp) OR ISNULL(m.tcp))
  SELECT * FROM (tcurname) INTO CURSOR (lcur) WHERE parent=m.tcp
  DEFINE POPUP (m.tcp) SHORTCUT RELATIVE
 ELSE
  SELECT * FROM (tcurname) INTO CURSOR (lcur) WHERE EMPTY(parent) OR ISNULL(parent)
 ENDIF
 IF RECCOUNT(m.lcur)>0
  
  SELECT (m.lcur)
  LOCAL m.i
  m.i=0
  SCAN
   m.i=m.i+1
   
   DEFINE BAR (m.i) OF (m.tcpop) PROMPT (ALLTRIM(name))
   
   LOCAL m.lcid
   m.lcid=ALLTRIM(id)
   IF createBar(m.lcid,m.lcid)
    ON BAR (m.i) OF (m.tcpop) ACTIVATE POPUP (m.lcid)
   ELSE
    ON SELECTION BAR (m.i) OF (m.tcpop) shortcutclick('&lcid.')
   ENDIF
   
  ENDSCAN
  m.llr=.t.
 ENDIF
 USE IN (lcur)
 RETURN m.llr
ENDFUNC

FUNCTION shortcutclick(mnuid as String)
 m.selid=m.mnuid
ENDFUNC

posted @ 2005-01-07 23:36  Roland  阅读(1193)  评论(0编辑  收藏  举报