您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VFP >> 辅导 >> 正文    
  用SPT访问SQL数据表生成动态菜单 【注册男护士专用博客】          

用SPT访问SQL数据表生成动态菜单

www.nanhushi.com     佚名   不详 

  * *modify date: 2002.06.04 mender: Niko 满足菜单打开多个窗口,窗口已打开则Activate,工具条及权限随激活窗口而改变
  * *modify date: 2002.06.21 mender: Niko 增加文件,编辑,帮助三项,文件项中内容随工具条内按钮相应变更
  * * 该程序动态生成 菜单根据 全局变量表 global_right
  * *global_right(program_id c(6),descr c(40) null,search logic ,amend logic,new logic,candele logic)
  * * 主菜单固定 (new)
  * * 1.市场管理 M (Market)
  * * 2.生产计划 P (Production)
  * * 3.工程管理 E (Engineer)
  * * 4.品质(管理) Q (Quantity)
  * * 5.财务(系统) A (Account)
  * * 6.报关(系统) C (Custom)
  * * 7.车间(管理) W (Workshop)
  * * 8.采购(管理) B (Workshop)
  * * 9.仓库(管理) S (Workshop)
  * * 10.其它(功能) O (Other)
  * * 11.帮助 H (Help)
  * * 12.退出 X (eXit)

  LPARAMETERS oFormRef, getMenuName, lUniquePopups
  LOCAL cMenuName, nTotPops, a_menupops, cTypeParm2, cSaveFormName,i,macro1,programid,loginsucc
  *!* IF TYPE("m.oFormRef") # "O" OR ;
  *!* LOWER(m.oFormRef.BaseClass) # 'form' OR ;
  *!* m.oFormRef.ShowWindow # 2
  *!* MESSAGEBOX([只能从顶层表单调用该菜单。请确认您表单的 ShowWindow 属性已设为 2。阅读此菜单 MPR 文件的头部分,可以获得详细信息。])
  *!* RETURN
  *!* ENDIF
  m.cTypeParm2 = TYPE("m.getMenuName")
  m.cMenuName ='MAINFORM' &&& SYS(2015)
  m.cSaveFormName = m.oFormRef.Name
  IF m.cTypeParm2 = "C" OR (m.cTypeParm2 = "L" AND m.getMenuName)
  m.oFormRef.Name = m.cMenuName
  ENDIF
  IF m.cTypeParm2 = "C" AND !EMPTY(m.getMenuName)
  m.cMenuName = m.getMenuName
  ENDIF

  i=0
  && select * from global_right where len(alltrim(program_id))>3 into cursor temp &&第三级菜单
  select distinct left(program_id,3) as program_id from global_right where len(alltrim(program_id))>3 into cursor temp
  i=_tally &&得到有有多少个第二级菜单有第三级菜单
  select * from global_right where exists(select * from temp where global_right.program_id=temp.program_id) and len(alltrim(global_right.program_id))>3 into cursor temp_menu
  &&tempp_menu 得到有第三级菜单的程序代号权限表。

  select * from global_right where exists(select * from temp where global_right.program_id==temp.program_id) into cursor tempp
  &&tempp 得到有第三级菜单的第二级菜单项

  DIMENSION a_menupops[i+13]
  IF TYPE("m.lUniquePopups")="L" AND m.lUniquePopups
  FOR nTotPops = 3 TO ALEN(a_menupops)
  a_menupops[m.nTotPops]= SYS(2015)
  ENDFOR
  ELSE
  a_menupops[1]="文件" && F
  a_menupops[2]="编辑" && D
  a_menupops[3]="报价" && M
  a_menupops[4]="生产计划" && P
  a_menupops[5]="工程" && E
  a_menupops[6]="品质" && Q
  a_menupops[7]="车间生产" && W
  a_menupops[8]="采购" && B
  a_menupops[9]="仓库" && S
  a_menupops[10]="报关" && C
  a_menupops[11]="财务" && A
  a_menupops[12]="系统管理" && O
  a_menupops[13]="帮助" && H
  j=0
  select tempp
  scan
  j=j+1
  a_menupops[13+j]=alltrim(tempp.descr)
  endscan
  ENDIF

  #define m_num 13 &&定义一级菜单个数
  dimension m_menu[m_num]
  m_menu[1]="F%" && 1.文件 M (Market)
  m_menu[2]="D%" && 2.编辑 P (Production)
  m_menu[3]="M%" && 3.报价 E (Engineer)
  m_menu[4]="P%" && 4.生产计划 Q (Quantity)
  m_menu[5]="E%" && 5.工程 A (Account)
  m_menu[6]="Q%" && 6.品质 C (Custom)
  m_menu[7]="W%" && 7.车间生产 W (Workshop)
  m_menu[8]="B%" && 8.采购 B (Workshop)
  m_menu[9]="S%" && 9.仓库 S (Workshop)
  m_menu[10]="C%" && 10.报关 O (Other)
  m_menu[11]="A%" && 11.财务 H (Help)
  m_menu[12]="O%" && 12.系统管理 X (eXit)
  m_menu[13]="H%" && 13.帮助

  ** 一级菜单定义 **

  DEFINE MENU (m.cMenuName) IN (m.oFormRef.Name) BAR

  DEFINE PAD fileobj OF (m.cmenuname) PROMPT "文件(\ KEY ALT+F, "ALT+F" ;
  MESSAGE "新建, Store,删除,Restore,关闭窗口, 打印, or 退出系统"
  DEFINE PAD editobj OF (m.cmenuname) PROMPT "编辑(\ KEY ALT+E, ""
  DEFINE PAD fobobj OF (m.cmenuname) PROMPT "报价(\ KEY ALT+M, ""
  DEFINE PAD planwork OF (m.cmenuname) PROMPT "生产计划(\ KEY ALT+P, ""
  DEFINE PAD procedobj OF (m.cmenuname) PROMPT "工程(\ KEY ALT+E, ""
  DEFINE PAD quality OF (m.cmenuname) PROMPT "品质(\ KEY ALT+Q, ""
  DEFINE PAD factwork OF (m.cmenuname) PROMPT "车间生产(\ KEY ALT+W, ""
  DEFINE PAD buygoods OF (m.cmenuname) PROMPT "采购(\ KEY ALT+B, ""
  DEFINE PAD goods OF (m.cmenuname) PROMPT "仓库(\ KEY ALT+S, ""
  DEFINE PAD customs OF (m.cmenuname) PROMPT "报关(\ KEY ALT+C, ""
  DEFINE PAD finance OF (m.cmenuname) PROMPT "财务(\ KEY ALT+A, ""
  DEFINE PAD defaultsys OF (m.cmenuname) PROMPT "系统管理(\ KEY ALT+O, "" ;
  MESSAGE "系统用户权限及基础信息定义"
  DEFINE PAD helpobj OF (m.cmenuname) PROMPT "帮助(\ KEY ALT+H, ""

  ON PAD fileobj OF (m.cMenuName) ACTIVATE POPUP filepad
  ON PAD editobj OF (m.cMenuName) ACTIVATE POPUP editpad
  ON PAD fobobj OF (m.cMenuName) ACTIVATE POPUP (a_menupops[3])
  ON PAD planwork OF (m.cMenuName) ACTIVATE POPUP (a_menupops[4])
  ON PAD procedobj OF (m.cMenuName) ACTIVATE POPUP (a_menupops[5])
  ON PAD quality OF (m.cMenuName) ACTIVATE POPUP (a_menupops[6])
  ON PAD factwork OF (m.cMenuName) ACTIVATE POPUP (a_menupops[7])
  ON PAD buygoods OF (m.cMenuName) ACTIVATE POPUP (a_menupops[8])
  ON PAD goods OF (m.cMenuName) ACTIVATE POPUP (a_menupops[9])
  ON PAD customs OF (m.cMenuName) ACTIVATE POPUP (a_menupops[10])
  ON PAD finance OF (m.cMenuName) ACTIVATE POPUP (a_menupops[11])
  ON PAD defaultsys OF (m.cMenuName) ACTIVATE POPUP (a_menupops[12])
  ON PAD helpobj OF (m.cMenuName) ACTIVATE POPUP helppad

  **** 文件项菜单
  DEFINE POPUP filepad MARGIN RELATIVE SHADOW COLOR SCHEME 4
  DEFINE BAR 1 OF filepad PROMPT "打开窗口(\ KEY CTRL+O, "CTRL+O"
  DEFINE BAR 2 OF filepad PROMPT "\-"
  DEFINE BAR 3 OF filepad PROMPT "增加记录(\ KEY CTRL+I, "CTRL+I" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command1.Enabled=.F.);
  MESSAGE "在当前窗口增加新记录"
  DEFINE BAR 4 OF filepad PROMPT "修改记录(\ KEY CTRL+E, "CTRL+E" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command2.Enabled=.F.);
  MESSAGE "修改当前窗口记录"
  DEFINE BAR 5 OF filepad PROMPT "删除记录(\ KEY CTRL+D, "CTRL+D" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command3.Enabled=.F.);
  MESSAGE "删除当前记录"
  DEFINE BAR 6 OF filepad PROMPT "\-"
  DEFINE BAR 7 OF filepad PROMPT "保存录入(\ KEY CTRL+S, "CTRL+S" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command4.Enabled=.F.);
  MESSAGE "保存当前窗口记录"
  DEFINE BAR 8 OF filepad PROMPT "撤消录入(\ KEY CTRL+R, "CTRL+R" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command5.Enabled=.F.) ;
  MESSAGE "还原当前窗口记录"
  DEFINE BAR 9 OF filepad PROMPT "\-"
  DEFINE BAR 10 OF filepad PROMPT "查询记录(\ KEY CTRL+F, "CTRL+F" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command6.Enabled=.F.) ;
  MESSAGE "还原当前窗口记录"
  DEFINE BAR 11 OF filepad PROMPT "打印机设置(\ KEY CTRL+U, "CTRL+U" ;
  MESSAGE "选择打印机并设置纸张"
  DEFINE BAR 12 OF filepad PROMPT "打印报表(\ KEY CTRL+P, "CTRL+P" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command7.Enabled=.F.);
  MESSAGE "直接打印"
  DEFINE BAR 13 OF filepad PROMPT "确认记录(\ KEY CTRL+K, "CTRL+K" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.Command8.Enabled=.F.)
  DEFINE BAR 14 OF filepad PROMPT "即时帮助(\ KEY CTRL+H, "CTRL+H" ;
  SKIP FOR type("bar1") # "O"
  DEFINE BAR 15 OF filepad PROMPT "\-"
  DEFINE BAR 16 OF filepad PROMPT "关闭窗口(\ KEY ESC, "ESC" ;
  SKIP FOR type("bar1") # "O" OR ( Bar1.activenum = 0) ;
  MESSAGE "关闭当前窗口"
  DEFINE BAR 17 OF filepad PROMPT "\-"
  DEFINE BAR 18 OF filepad PROMPT "第一条记录" ;
  KEY HOME ,"Home" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.gotop.Enabled=.F.)
  DEFINE BAR 19 OF filepad PROMPT "上一条记录" ;
  KEY PGUP , "Page Up" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.goback.Enabled=.F.)
  DEFINE BAR 20 OF filepad PROMPT "下一条记录" ;
  KEY PGDN, "Page Down" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.gonext.Enabled=.F.)
  DEFINE BAR 21 OF filepad PROMPT "末一条记录" ;
  KEY End ,"End" ;
  SKIP FOR type("bar1") # "O" OR (Bar1.gobottom.Enabled=.F.)
  DEFINE BAR 22 OF filepad PROMPT "\-"
  DEFINE BAR 23 OF filepad PROMPT "更新组别" KEY CTRL+F9,"CTRL+F9"
  DEFINE BAR 24 OF filepad PROMPT "更新权限" KEY CTRL+F10,"CTRL+F10"
  DEFINE BAR 25 OF filepad PROMPT "系统信息" KEY CTRL+F11,"CTRL+F11"
  *** DEFINE BAR 26 OF filepad PROMPT "重新登录" KEY F9,"F9"
  DEFINE BAR 27 OF filepad PROMPT "\-"
  DEFINE BAR 28 OF filepad PROMPT "E\ MESSAGE "退出泽冠 MRP II 系统"

  ON SELECTION BAR 1 OF filepad ;
  DO openform ;
  IN LOCFILE("\MRP\mainmenu" ,"MPX;MPR|FXP;PRG" ,"WHERE is MAIN?")
  ON SELECTION BAR 3 OF filepad Bar1.Command1.Click()
  ON SELECTION BAR 4 OF filepad Bar1.Command2.Click()
  ON SELECTION BAR 5 OF filepad Bar1.Command3.Click()
  ON SELECTION BAR 7 OF filepad Bar1.Command4.Click()
  ON SELECTION BAR 8 OF filepad Bar1.Command5.Click()
  ON SELECTION BAR 10 OF filepad Bar1.Command6.Click()
  ON SELECTION BAR 11 OF filepad ;
  DO setupprint ;
  IN LOCFILE("\MRP\mainmenu" ,"MPX;MPR|FXP;PRG" ,"WHERE is MAIN?")
  ON SELECTION BAR 12 OF filepad Bar1.Command7.Click()
  ON SELECTION BAR 13 OF filepad Bar1.Command8.Click()
  ON SELECTION BAR 14 OF filepad bar1.rightclick()
  ON SELECTION BAR 16 OF filepad Bar1.Command9.Click()
  ON SELECTION BAR 18 OF filepad Bar1.gotop.Click()
  ON SELECTION BAR 19 OF filepad Bar1.goback.Click()
  ON SELECTION BAR 20 OF filepad Bar1.gonext.Click()
  ON SELECTION BAR 21 OF filepad Bar1.gobottom.Click()
  ON SELECTION BAR 23 OF filepad release bar1,currselect
  ON SELECTION BAR 24 OF filepad DO program\checkright
  ON SELECTION BAR 25 OF filepad messagebox("当前用户: " + user_no_ +chr(13)+;
  "用户姓名: " + user_name_+ chr(13) + ;
  "本机终端: " + sys(0) + chr(13) + ;
  "登录时间: " + ttoc(login_time_)+chr(13)+;
  "当前客户: " + customer_no_ +" / "+customer_c_abbr_ + chr(13) + ;
  "当前供应商: " + supplier_no_ +" / "+supplier_c_abbr_+ chr(13) + ;
  "当前仓库: " + store_no_ + " / "+ store_name_c_,64,"系统信息")
  ***ON SELECTION BAR 23 OF filepad DO FORM login To loginsucc
  ON SELECTION BAR 28 OF filepad DO proexit ;
  IN LOCFILE("\MRP\mainmenu" ,"MPX;MPR|FXP;PRG" ,"WHERE is MAIN?")

  ***** 编辑项菜单
  DEFINE POPUP editpad MARGIN RELATIVE SHADOW COLOR SCHEME 4
  DEFINE BAR _med_undo OF editpad PROMPT "撤消(\ KEY CTRL+Z, "Ctrl+Z" ;
  MESSAGE "撤消上一次命令或操作"
  DEFINE BAR _med_redo OF editpad PROMPT "重作(\ KEY CTRL+R, "Ctrl+R" ;
  MESSAGE "重复上一次命令或操作"
  DEFINE BAR 3 OF editpad PROMPT "\-"
  DEFINE BAR _med_cut OF editpad PROMPT "剪切(\ KEY CTRL+X, "Ctrl+X" ;
  MESSAGE "移去选定内容并将其放入剪贴板"
  DEFINE BAR _med_copy OF editpad PROMPT "复制(\ KEY CTRL+C, "Ctrl+C" ;
  MESSAGE "将选定内容复制到剪贴板"
  DEFINE BAR _med_paste OF editpad PROMPT "粘贴(\ KEY CTRL+V, "Ctrl+V" ;
  MESSAGE "粘贴剪贴板上的内容"
  DEFINE BAR 7 OF editpad PROMPT "\-"
  DEFINE BAR _med_slcta OF editpad PROMPT "全选(\ KEY CTRL+A, "Ctrl+A" ;
  MESSAGE "选定当前窗口中的所有文本或数据项"

  ******帮助菜单项
  DEFINE POPUP helppad MARGIN RELATIVE SHADOW COLOR SCHEME 4
  DEFINE BAR 1 OF helppad PROMPT "帮助文件"
  DEFINE BAR 2 OF helppad PROMPT "\-"
  DEFINE BAR 3 OF helppad PROMPT "有关泽冠MRP管理系统"
  DEFINE BAR 4 OF helppad PROMPT "\-"

  ON SELECTION BAR 1 OF helppad HtmlHelpA(0,"mrp.chm",0,"weltouse.htm")
  ON SELECTION BAR 3 OF helppad do form aboutinfo

  **** 定义二级菜单 S (System)

  for k=1 to m_num
  i=1
  DEFINE POPUP (a_menupops[k]) MARGIN RELATIVE shadow COLOR SCHEME 4
  select * from global_right where program_id like m_menu[k] and len(alltrim(program_id))<=3 into cursor temp
  &&&temp 为第二级菜单有的项目

  select temp
  scan
  programid=temp.program_id
  if descr="-" then
  DEFINE BAR i OF (a_menupops[k]) PROMPT "\-"
  i=i+1
  loop
  endif
  if forbit=.t.
  define bar i of (a_menupops[k]) prompt alltrim(temp.program_id)+" "+alltrim(temp.descr)
  set skip of bar i of (a_menupops[k]) .t.
  else
  if search=.f. and amend=.f. and new=.f. and candele=.f. then
  define bar i of (a_menupops[k]) prompt alltrim(temp.program_id)+" "+alltrim(temp.descr)
  set skip of bar i of (a_menupops[k]) .t.
  else
  define bar i of (a_menupops[k]) prompt alltrim(temp.program_id)+" "+alltrim(temp.descr)
  endif
  endif
  select tempp &&tempp 有第三级菜单的第二级菜单
  locate for left(program_id,3)=alltrim(programid)
  if found() then && 该菜单有子菜单
  for j=13 to alen(a_menupops)
  if a_menupops[j]=temp.descr then
  on bar i of (a_menupops[k]) activate popup (a_menupops[j])
  i=i+1
  exit
  endif
  endfor
  loop
  endif
  on selection bar i of (a_menupops[k]) do onselectdo in mainmenu with prompt() &&& form ¯o1
  i=i+1
  endscan
  endfor

  && 定义第三级菜单

  for m=m_num+1 to alen(a_menupops)
  define popup (a_menupops[m]) margin relative shadow color scheme 4
  select tempp &&有第三级菜单的第二级菜单项
  locate for alltrim(tempp.descr)=a_menupops[m]
  if not found() then
  messagebox("该系统不存在",0+16+0,"ERROR")
  return
  endif
  programid=tempp.program_id
  select * from temp_menu where left(program_id,3)=programid into cursor temp2
  select temp2
  k=1
  scan
  if descr="-" then
  DEFINE BAR k OF (a_menupops[m]) PROMPT "\-"
  k=k+1
  loop
  endif
  if forbit=.t. then
  define bar k of (a_menupops[m]) prompt alltrim(temp.program_id)+" "+alltrim(temp.descr)
  set skip of bar k of (a_menupops[k]) .t.
  else
  if search=.f. and amend=.f. and new=.f. and candele=.f. then
  define bar k of (a_menupops[m]) prompt temp2.program_id+" "+alltrim(temp2.descr)
  set skip of bar k of (a_menupops[m]) .t.
  else
  define bar k of (a_menupops[m]) prompt temp2.program_id+" "+alltrim(temp2.descr)
  endif
  endif
  on selection bar k of (a_menupops[m]) do onselectdo in mainmenu with prompt() &&& form ¯o1
  k=k+1
  endscan
  endfor
  ACTIVATE MENU (m.cMenuName) NOWAIT

  IF m.cTypeParm2 = "C"
  m.getMenuName = m.cMenuName
  m.oFormRef.Name = m.cSaveFormName
  ENDIF

  if used("temp2") then
  use in temp2
  endif
  if used("temp") then
  use in temp
  endif
  if used("tempp") then
  use in tempp
  endif

  *** 设置打印机 和纸张
  PROCEDURE setupprint
  LOCAL lcOldError
  lcOldError = ON('ERROR')
  ON ERROR *
  =SYS(1037)
  ON ERROR &lcOldError

  PROCEDURE proexit
  if messagebox("确认退出MRPII管理系统?",4+32+256,"系统提示")=6 then
  mainform.release
  endif

  Procedure OnSelectDo
  Parameter Windowname
  Windowname=Left(windowname,At(' ',windowname)-1)
  IF WEXIST(windowname)
  Activate Window &windowname
  _Screen.ActiveForm.WindowState=0
  ELSE
  DO Form &windowname
  ENDIF

  procedure openform
  dimension nheaders(2),nfields(2),ngws(2)
  nlable="程序名:"
  ntable="company_data"
  nheaders[1]="程序名"
  nheaders[2]="程序说明"
  nfields[1]='program_id'
  nfields[2]='program_name'
  ngws[1]=100
  ngws[2]=250
  svalue=''
  nsql="exec get_program_right ?user_no_,2"
  do form search with nsql,nfields[1],nlable,svalue,nheaders,ngws,320,50 to rekey &&
  if empty(rekey)
  return .f.
  else
  rekey=alltrim(rekey)
  IF WEXIST(rekey)
  Activate Window &rekey
  _Screen.ActiveForm.WindowState=0
  ELSE
  DO Form &rekey
  ENDIF
  endif

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。