广告Logo
目录 综合报道 软件世界 硬件周刊 大众网络 OA专刊 游戏广场 评测与市场
当前位置:电脑报电子版 > 1999 年 > 23 期 > 软件世界 > VFP5中实现菜单、表单与工具条的动态连接

《 VFP5中实现菜单、表单与工具条的动态连接 》

  一、 表单与菜单的连接
  用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
(刘露军)
下载本期推荐软件页 首

《电脑报》版权所有,电脑报网站编辑部设计制作发布