微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题VFP5中实现菜单、表单与工具条的动态连接
栏目软件世界
作者刘露军
发布1999年第23期13版
  一、表单与菜单的连接
  用VFP构建应用程序时,往往通过主菜单调用表单完成相应功能模块,其实我们可以像WORD打开文档一样将每一个打开的表单显示在Window菜单上,以便于切换。具体步骤如下:
  1. 创建一表单类MyForm,新建向菜单项Window追加、删除表单名的方法:AddFormNameToMenu、RemoveFormNamefromMenu,同时修改init、activate、destroy方法。
  2. 设置表单类MyForm为新建表单的模板类即可。
  二、表单与工具条的连接。
  在应用系统中对表单的操作往往有很多相同之处,所以我们可以针对多个表单使用一个工具条,以节省表单空间。具体步骤如下:
  1. 利用工具条基类ToolBar创建一工具条类MyTBR,然后向工具条中添加命令按钮,在每个按钮的click事件中调用激活表单中的相应方法,例如:_screen.activateform.first()。由于每个表单的方法可写入不同的代码,从而实现用一个工具条控制不同的表单及操作。
  2. 创建应用程序类MyAPP,添加属性nFormInstanceCount、oToolBar,其初始值分别为0、NULL。新建显示、隐藏工具条的方法:ShowAppToolBar、RemoveAppToolBar。在主程序中建立MyAPP实例:oAPP=createobject('MyAPP')
  3. 修改表单类MyForm,添加属性cToolbar,其初始值为MyTBR;添加相应方法(例如first)。同时修改init、destroy方法。
  三、源代码
  AddFormNameToMenu()
  if cntbar('window')=0 or getbar('window',cntbar('window'))<0
  nNoMenu=cntbar('window')+1
  else
  nNoMenu=getbar('window',cntbar('window'))+1
  endif
  define bar nNoMenu of window prompt thisform.caption;
  after _mlast
  cNameform=thisform.name
  on selection bar nNoMenu of window activate window &cNameform
  RemoveFormNamefromMenu()
  local nBar,cCaption
  for nBar=cntbar('window') to 1 step -1
  if prmbar('window',getbar('window',nBar))=this.caption
  release bar getbar('window',nBar) of window
  exit
  endif
  endfor
  Init()
  local nNomenu,cNameform
  if !empty(thisform.cToolbar)
  thisform.Addformnametomenu()
  oAPP.showapptoolbar(thisform.cToolbar)
  endif
  Activate()
  activate menu _msysmenu nowait
  Destroy()
  if !empty(thisform.cToolbar)
  thisform.removeformnamefrommenu()
  oAPP.removeapptoolbar()
  endif
  ShowAppToolBar()
  lpara tcToolBar
  if this.nforminstancecount=0 or isnull(oAPP.oToolbar)
  set sysmenu on
  set classlib to basetbr
  this.oToolbar=createobject('MyTBR')
  this.oToolbar.show()
  activate menu _msysmenu nowait
  set sysmenu automatic
  endif
  this.nforminstancecount=this.nforminstancecount+1
  RemoveAppToolBar()
  this.nforminstancecount=this.nforminstancecount-1
  if this.nforminstancecount=0
  this.otoolbar=.NULL.
  endif