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