一个FOXPRO for DOS下的程序执行进度指示器
DO working WITH 总次数,当前次数,提示1,提示2
#3 参数说明:
总次数 数值型
当前次数 数值型
值0 指示器初始化
值-1 清除指示器
指示1、指示2 字符串,串长度不大于60
#3 运行环境:
FOXPRO 2.5B for DOS
PROC working
PARA m.zong,m.xian,m.tish1,m.tish2
PRIV m.bfb,m.bfb-ch,m.lie
#3 *格式化提示字符串*
m.tish1=ALLT(m.tish1)
m.tish1=IIF(LEN(m.tish1);>60,LEFT(m.tish1,58)+'…';m.tish1+SPAC(60-LEN;(m.tish1)))
m.tish2=ALLT(m.tish2)
m.tish2=IIF(LEN(m.tish2);>60,LEFT(m.tish2,58)+'…';m.tish2+SPAC(60-LEN(m.tish2)))
#3 *计算执行程度百分比(m.bfb)*
#3 *百分数(m.bfb-ch)的显示位置(m.lie)*
m.bfb=m.xian/m.zong*100+0.2 &&0.2是百分数舍入系数
m.bfb-ch=LTRI(STR(m.bfb,3))
m.lie=IIF(m.bfb*0.6/2<1,1,INT(m.bfb*0.6/2))
&&显示在动态条的中间
#3 *指示器初始化*
IF m.xian=0 OR !WVIS('JDW')
DEFI WIND jdw AT 10,8 SIZE 3,62 COLO SCHE 10;
TITL 执行进度指示器
NOFL NOGR NOZO
ACTI WIND jdw
@2,1 SAY SPACE(60) COLO B/W
&&白色条
ENDI
#3 *指示器的清除及运行*
IF m.zong<m.xian OR m.xian<0
??CHR(7)
=INKEY(2)
RELE WIND jdw
ELSE
ACTI WIND jdw
@0,1 SAY m.tish1
@1,1 SAY m.tish2
IF m.bfb*0.6<2
IF INT(m.bfb*0.6)=0
@2,1 SAY m.bfb-ch+%' COLO B/W
@2,61 SAY ' ' &&定位光标
ELSE
@2,1 SAY m.bfb-ch COLO W/B
@2,2 SAY '%' COLO B/W &&反象显示字符
@2,61 SAY ' '
ENDI
ELSE
@2,1 SAY SPACE(INT(m.bfb*0.6)) COLO
W/B
@2,m.lie SAY m.bfb-ch+'%' COLO W/B
@2,61 SAY ' '
ENDI
ENDI
RETU
#3 *调用举例*
SET TALK OFF
m.ss=0
m.ee=120
FOR m.i=m.ss TO m.ee+1
=INKEY(1)
DO working WITH m.ee,m.i;'指示器运行举例…',STR(m.ee,4)+STR(m.i,4)
ENDF
SET TALK ON
屏幕上显示一个有三行空间的窗口,第一和第二行为提示,第三行为长60个字符的指示条。每一秒改变一次显示,每两秒蓝色指示条进一格,百分数随之改变。最后响铃提示,窗口清除。