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

Author: 刘露军 Date: 1999年 第23期 13版

#1    一、表单与菜单的连接
    用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