FOXBASE+菜单设计技巧一例

Author: 湖 南 孟 爱 平 Date: 1993-04-09

        程序第30行和47行建立了一个s1内存变量,用于存放屏幕移动字幕的内容;第50行至58行为一循环;第45行建立i内存变量,作为实现INKEY()函数循环条件。运行时,当不按任何键时,INKEY()函数不断返回ASCII码0值,使循环条件成立,从而保证循环内字幕移动和时钟显示得以实现;51至56行用于保证移动字幕和时钟每秒变换一次。当程序运行时,首先在屏幕上显示一个固定的菜单,这与我们通常设计的菜单无多大区别,菜单显示完毕,程序进入50至58行组成的循环,在未接受到任何键盘输入时,循环条件成立,并不断对系统时钟以秒为单位进行检测,目的是防止字幕移动过快,每当经过一个整秒段,利用SUBSTR()函数将变量S1的前两个字符移到该变量末尾(因一个汉字占两个ASCII码字符位置,如为西文则只需移动一个字符),并将字幕和时钟送到指定位置显示,使字幕和时钟每秒变换一次,从而实现菜单的动感。一旦按下任一键,循环条件不成立而退出循环,进入菜单选择。程序第61、62行为按回车键时用按“0”键来处理,用以退出程序。其余部分与常规程序设计类似。
        附:源程序清单。(湖南  孟爱平)
        7:set  talk  off
        8:close  data
        9:CLEAR
        10:set  devi  to  scre
        11:set  scor  off
        12:set  stat  off
        13:set  cata  off
        14:bb1=chr(1)+chr(2)+chr(3)+chr(5)+chr(8)+chr(7)+chr(6)+chr(4)
        15:DO  WHILE.t.
        16:SET  COLOR  TO G/,R/,N
        17:clear
        18:?"今天日期:"+str(year(date())-1900,2)+[年]+str(mont(date()),2)+[月]+str(day(date()),2)+[日]
        19:?[]+cdow(date())
        20:?"湖南省石化厅"
        21:SET  COLOR  TO  R/,R/
        22:@4,11,6,64  BOX"&BB1."
        23:SET  COLOR  TO+6/5
        24:@5,13say[湖南省石油化工贸易公司工资管理系统]
        25:SET  COLOR  TO  G/,R/
        26:?""
        27:?""
        28:?
        29:?"化工厅人教处微机室"
        30:sl=[省石油化工贸易公司]
        31:?"1990.4"
        32:?""
        33:?""+TIME()
        34:SET  COLOR  TO  W/B
        35:@row()+1,20  SAY"本系统为您提供如下服务"
        36:SET  COLOR  TO+1
        37:@row()+1,20  SAY  REPL(CHR(2),36)
        38:SET  COLOR  TO  2
        39:@row()+2,8  SAY  "1___人员变动2___工资调整3___工资输入4___工资计算"
        40:@row()+2,8  SAY  "5___打印6___查询7___文件管理0___退出系统"
        41:al=[0]
        42:@row()+2,10  say"请输入相应编号:"
        43:set  color  to  br*/
        44:@20,30  say[0]
        45:i=0
        46:ti=time()
        47:sl=sl+sl+sl+sl
        48:set  color  to  gr+/G
        49:@24,0  say  s1
        50:do  while  i=0
        51:if  time()<>ti
        52:ti=time()
        53:sl=subs(s1,3,78)+subs(s1,1,2)
        54:@12,34  say  time()
        55:@24,0  say  s1
        56:endif
        57:i=inkey()
        58:enddo
        59:set  color  to  BR*/
        60:@20,30  say  chr(i)
        61:if  i=13
        62:A1=[0]
        63:else
        64:al=chr(i)
        65:endif
        66:set  color  to  G/
        67:DO  CASE
        68:CASE  A1="1"
        69:DO  RYBD
        70:CASE  A1="2"
        71:DO  GZDZ
        72:CASE  A1="3"
        73:DO  GZSR
        74:CASE  A1="4"
        75:DO  GZJS
        76:CASE  A1="5"
        77:DO  GZDY
        78:CASE  A1="6"
        79:DO  GZJX
        80:CASE  A1="7"
        81:DO  wjgl
        82:CASE  A1="0"
        83:set  scor  on
        84:set  func7  to  [doGZ;]
        85:CLEAR
        86:@3,18  SAY"湖南省石油化学工业厅工资管理应用软件运行结束"
        87:SET  COLOR  TO  BG/,R/,n
        88:@6,35  SAY"再见!"
        89:set  color  to  g/n,w/b
        90:CLOSE  DATA
        91:set  cata  TO  GZ
        92:set  stat  on
        93:set  talk  on
        94:RETURN
        95:END  CASE
        96:@10,0  CLEAR
        97:END  DO