談?wù)勗诨贔oxpro的MIS中實現(xiàn)提示、幫助與詢問

字號:

對一個MIS系統(tǒng)來說,經(jīng)常需要向用戶提供有關(guān)系統(tǒng)狀況、操作指導、聯(lián)機幫助等信息,有時也需用戶確認某些操作。這些提示、幫助、詢問提供了用戶與系統(tǒng)之間的接口,使系統(tǒng)方便實用、提供良好的人機交互性。
    下面以Foxpro2.5 for Windows為例,討論一下其實現(xiàn)途徑。
    一、用wait window命令或者msgbox()函數(shù)
    ⑴用wait wind:例如①提示(不需用戶干預):wait wind "過程被中斷!" nowait②提示(需用戶按鍵繼續(xù)):wait wind "打印完畢!按任意鍵繼續(xù)..." ③詢問:wait wind "是否繼續(xù)(Y/N)?..." to if_conti 。
    此命令用起來雖方便,但提示行限制在一行內(nèi)。
    ⑵用msgbox():調(diào)用此函數(shù)之前必須先用set library to 〈.fll〉命令裝入程序庫,語法為set library to foxtools.fll additive,程序結(jié)束時再以set library to 將該程序釋放。
    調(diào)用語法:msgbox(〈expC1〉,〈expC2〉,〈expN〉)
    〈expC1〉:對話框中的提示信息
    〈expC2〉:對話框中的標題字串
    〈expN〉:對話框中的形式代碼,共有:
    ①信息對話框:0~5;②警告對話框:16~21,32~37,48~53,64~69
    返回值(對應(yīng)于對話框中各種按鈕):〈確定〉1〈取消〉2〈結(jié)束[A]〉3〈重試[R]〉4〈忽略[r]〉5〈是[Y]〉6〈否[N]〉7
    例如:m_sure=msgbox("是否確定刪除?","刪除記錄",4)。
    ⑴⑵兩種方式調(diào)用方便,適于實現(xiàn)提示、詢問功能。也可用來實現(xiàn)幫助功能,例如,on key label f1 wait wind "CTRL+A增加;CTRL+D刪除;CTRL+M修改;CTRL+S篩選;CTRL+P打印";on key label f1 do =msgbox("XX","YY",0)。
    但是,當系統(tǒng)較大時,若仍用這種方式做幫助,則顯得凌亂,且不易修改維護。我們可將幫助信息存入數(shù)據(jù)庫以解決這個問題(如下)。
    二、借鑒Foxpro for windows的DBF形式幫助(DBF_style Help)(Foxpro for windows另有一套Windows_style Help)。
    ⑴首先拷貝數(shù)據(jù)庫結(jié)構(gòu)(假設(shè)系統(tǒng)幫助數(shù)據(jù)庫為syshelp.dbf):
    set help to
    use foxhelp.dbf alia "foxhelp"
    copy stru to syshelp
    ⑵用modi memo命令加入并顯示幫助。(見文末所附程序)
    三、利用hc31.exe(Foxpro25 for windows,Borland C++均提供此文件)和WORD制作windows幫助文件*.hlp,再用set help to 〈*.hlp〉命令設(shè)置系統(tǒng)幫助文件。這種方式界面精美,但制作較麻煩。
    附:幫助例程
    調(diào)用方式:若希望由自己控制調(diào)用,則在各子程序開始時鍵入on key label F1 do help_proc with 〈子程序名〉,〈ExpC〉;若希望由系統(tǒng)自動控制調(diào)用,則在系統(tǒng)主程序中鍵入on key label F1 do help_proc with allt(sys(16)),〈ExpC〉。其中,〈ExpC〉表示幫助內(nèi)容是否可編輯,若可則為“edit”,不可則為“noedit”。這樣做的好處是可在系統(tǒng)運行時,一邊對照運行情況,一邊在任何需要幫助的某個界面上按F1加入或修改幫助(〈ExpC〉設(shè)為“edit”)。當幫助做好了,在系統(tǒng)提交用戶使用之前,再將〈ExpC〉設(shè)為“noedit”。
    #DEFINE c_dlgface "Times New Roman"
    #DEFINE c_dlgsize 11.000
    #DEFINE c_dlgstyle "T"
    proc help_proc
    para helptopic,if_edit
    if allt(uppe(if_edit))<>"NOEDIT"
    if_edit=" "
    endif
    push key clear
    on key label ctrl+w
    on key label escape keyb "{CTRL+W}" &&按ESCAPE鍵退出幫助窗口,并保存修改
    cur_dbf=sele()
    if used("SYSHELP")
    sele syshelp
    else
    sele 0
    use syshelp
    endif
    loca for allt(uppe(IC))=allt(uppe(helptopic))
    if not found()
    appe blank
    repl topic with allt(helptopic)
    endif
    defi wind helpwin ;
    at int((srow() - ((15 *
    fontmetric(1, c_dlgface, c_dlgsize, c_dlgstyle )) / ;
    fontmetric(1, wfont(1,""), wfont(2,""), wfont(3,"")))) / 2), ;
    int((scol() - (( 64* ;
    fontmetric(6, c_dlgface, c_dlgsize, c_dlgstyle )) / ;
    fontmetric(6, wfont(1,""), wfont(2,""), wfont(3,"")))) / 2) ;
    size 15,64 ;
    font c_dlgface, c_dlgsize ;
    style c_dlgstyle ;
    close grow float;
    title "聯(lián)機幫助";
    system ;
    color rgb(0, 0, 0, 255, 255, 255)
    move window helpwin center
    modi memo details window helpwin &if_edit
    sele (cur_dbf)
    pop key