一个FOXPRO for DOS下的程序执行进度指示器 孙文硕 1997-01-01 #3  调用方式:   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个字符的指示条。每一秒改变一次显示,每两秒蓝色指示条进一格,百分数随之改变。最后响铃提示,窗口清除。