首先,需要创建一个窗体(例如frm_progress1.vcx),并在其中添加一个进度条控件(例如progressbar1),以及一个按钮(例如btnCancel)用于中止操作。在窗体的代码中添加以下内容:
声明变量 PRIVATE lnMin, lnMax, lnPos PRIVATE lcCaption, lcMessage PRIVATE llCancelFlag
初始化方法 PROCEDURE Inits LPARAMETERS tnMin, tnMax, tcCaption, tcMessage lnMin = tnMin lnMax = tnMax lcCaption = tcCaption lcMessage = tcMessage lnPos = 0 llCancelFlag = .F. THISFORM.CAPTION = lcCaption THISFORM.progressbar1.MIN = lnMin THISFORM.progressbar1.MAX = lnMax THISFORM.progressbar1.VALUE = lnPos THISFORM.SHOW() DOEVENTS ENDPROC
刷新进度方法 FUNCTION Step LPARAMETERS tnStep lnPos = lnPos + tnStep IF lnPos > lnMax THEN RETURN .F. THISFORM.progressbar1.VALUE = lnPos THISFORM.SAVEDISPLAY() DOEVENTS RETURN .T. ENDFUNC
中止方法 FUNCTION IsCancel RETURN llCancelFlag ENDFUNC
中止按钮点击事件 PROCEDURE btnCancel.Click llCancelFlag = .T. THISFORM.HIDE() ENDPROC
然后在主程序中可以这样使用进度条类:
创建一个单进度对象 loProgress = NEWOBJECT("frm_progress1")
设置进度条 Titile, Min, Max loProgress.Inits(1, RecordCount("mytable"), "正在进行操作", "请稍候...")
循环操作 SELECT mytable SCAN
在此刷新进度条进度 IF !loProgress.Step(1) EXIT ENDIF
具体操作代码 ... ENDSCAN
关闭进度条 loProgress.Hide()
最后,需要在进度条的“中止按钮点击事件”(btnCancel.Click)中添加中止操作的代码,例如:
关闭进度条 THISFORM.Hide()
中止具体操作代码 ...