发信人: myinter(流星) 
整理人: hunter__fox(2002-03-16 22:47:22), 站内信件
 | 
 
 
 
 作者:江永忠
 
   在应用程序中使用一个进度条可以直观形象地显示当前处理完成的百分率,此功能的传统实现方法
 是在程序源代码中直接处理,这显然是一项繁重而缺乏灵活性的工作。为此,笔者在目前较为流行的VFP3.0
 下编写了一个具有数字和图形双重显示功能的进度条类,对应用程序而言,其调用与标准控件完全一致,并
 且全面支持可视化编程。
   1.建立类
   进度条类应该包含两个对象:一个显示处理过程的图形和一个显示处理完成百分率值的标签。首先,
    建立一个基于包容器类的自定义类,命名为ProgressBar,并在其内部建立一个图形BarShape,高度
    和ProgressBar相同,宽度预置为0,为便于百分率正文的显示,将图形设置为浅色(如浅蓝色)。
    加入标签对象TxtLabel,位置居中,宽度足够容下最大正文“100%”,颜色为深色。
   鉴于在实际应用中要求本控件的尺寸是交互可变的,因此,对ProgressBar控件的Init事件的编码为:
   THIS.BarShape.Height = THIS.Height
   THIS.BarShape.Width = 0
   THIS.TxtLabel.Alignment = 2
   THIS.TxtLabel.Left = (THIS.Width-THIS.TxtLabel.Width)/2
   THIS.TxtLabel.Top = (THIS.Height-THIS.TxtLabel.Height)/2
   THIS.TxtLabel.Caption = "0%"
   THIS.Percent=0
   自定义属性Percent用于跟踪记录当前百分率的变化;自定义的方法Show用于同时以图形和文本的方式
    来显示这种变化。
   方法Show的代码:
   PARAMETERS lpPercent
   *--合法性检验
 
 
 
   IF lpPercent          < 0
 
      lpPercent          = 0
 
   ENDIF
 
   IF lpPercent          > 100
      lpPercent          = 100    ENDIF
 
   *-刷新显示
   THIS.Percent = lpPercent
   THIS.BarShape.Width = THIS.Width*(lpPercent/100)
   THIS.TxtLabel.Caption = ALLT(STR(lpPercent))+"%"
   THIS.Refresh
   此时,进度条类设计完毕,将其存入自定义的类库中,假设类库名为:MyLib.VCX。
   2.应用示例
   一旦在VFP中注册了自定义类库MyLib.VCX,那么就能够象对待标准控制一样将其放入应用程序窗体中,
    通常可以由定时器或循环来激活该控制。
   例1:由定时器控制进度时的主要代码:
    ... ...
    THISFORM.Timer1.Interval = 1
    THISFORM.Timer1.Enabled = .T.
    THISFORM.Timer1.Reset
    THISFORM.ProgressBar1.Show(0)
    IF THISFORM.ProgressBar1.Percent
    THISFORM.ProgressBar1.Show(THISFORM.ProgressBar1.Percent+1)
 
 
    ELSE
    THISFORM.Timer1.InterVal = 0
    THISFORM.Timer1.Enabled = .F.
    ... ...
    ENDIF
    ... ...
  例2:由循环语句控制进度时的主要代码 
    ... ...
    THISFORM.ProgressBar1.Show(0)
    FOR m.i=1 TO n 
    THISFORM.ProgressBar1.Show(m.i/n*100)
    ... ... 
    处理循环体
    ... ...
    ENDFOR
 
 
  ---- 流星 发
  | 
 
 
 |