VFP5中实现菜单、表单与工具条的动态连接
用VFP构建应用程序时,往往通过主菜单调用表单完成相应功能模块,其实我们可以像WORD打开文档一样将每一个打开的表单显示在Window菜单上,以便于切换。具体步骤如下:
1. 创建一表单类MyForm,新建向菜单项Window追加、删除表单名的方法:AddFormNameToMenu、RemoveFormNamefromMenu,同时修改init、activate、destroy方法。
2. 设置表单类MyForm为新建表单的模板类即可。
#1 二、表单与工具条的连接。
在应用系统中对表单的操作往往有很多相同之处,所以我们可以针对多个表单使用一个工具条,以节省表单空间。具体步骤如下:
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方法。
#1 三、源代码
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