* Author : Eric Gomez
* Public code from foxpro forums.
Clear
Clear All
* set path to 'C:\My Documents\Attachments\PBar'
*!* Set Classlib To PTimer
Local lnRecCnt
Use KullanilacaginTable In 0 Again
Select KullanilacaginTable
lnRecCnt = Reccount()
oX = Createobject('ProgressTimer')
oX.Show
oX.nReportInterval = 1 && sets the number of interval the PTimer Class is refreshed
oX.Reset(lnRecCnt) && sets the maximum number of record to process
Select ISLEMANA
Scan
oX.TimeProgress(Recno())
Endscan
oX.Release
DEFINE CLASS progresstimer AS form
Height = 133
Width = 405
ShowWindow = 0
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 3
Caption = "Progress Timer"
ControlBox = .F.
Closable = .F.
MaxButton = .F.
MinButton = .F.
Name = "progresstimer"
ntoprocess = .F.
nstart = .F.
ctimeremaining = .F.
ccompletiontime = .F.
nreportinterval = .F.
nmercwidth = .F.
ADD OBJECT lbltimerem AS label WITH ;
AutoSize = .T., ;
FontBold = .T., ;
Caption = "Time Remaining", ;
Enabled = .F., ;
Height = 17, ;
Left = 5, ;
Top = 93, ;
Width = 93, ;
DisabledForeColor = RGB(0,0,128), ;
Name = "lblTimeRem"
ADD OBJECT lbltimecomp AS label WITH ;
AutoSize = .T., ;
FontBold = .T., ;
Caption = "Completion Time", ;
Enabled = .F., ;
Height = 17, ;
Left = 5, ;
Top = 3, ;
Width = 97, ;
DisabledForeColor = RGB(0,0,128), ;
Name = "lblTimeComp"
ADD OBJECT container1 AS container WITH ;
Top = 61, ;
Left = 4, ;
Width = 397, ;
Height = 29, ;
SpecialEffect = 1, ;
BackColor = RGB(0,0,255), ;
Name = "Container1"
ADD OBJECT shpmercury AS shape WITH ;
Top = 64, ;
Left = 7, ;
Height = 24, ;
Width = 391, ;
BorderStyle = 0, ;
BackColor = RGB(255,255,0), ;
Name = "shpMercury"
ADD OBJECT lblrecords AS label WITH ;
AutoSize = .T., ;
FontBold = .T., ;
Caption = "Records Processed", ;
Enabled = .F., ;
Height = 17, ;
Left = 5, ;
Top = 42, ;
Width = 115, ;
DisabledForeColor = RGB(0,0,128), ;
Name = "lblRecords"
ADD OBJECT lblaverage AS label WITH ;
AutoSize = .T., ;
FontBold = .T., ;
Caption = "Average", ;
Enabled = .F., ;
Height = 17, ;
Left = 5, ;
Top = 113, ;
Width = 49, ;
DisabledForeColor = RGB(0,0,128), ;
Name = "lblAverage"
ADD OBJECT lblelapsed AS label WITH ;
AutoSize = .T., ;
FontBold = .T., ;
Caption = "Elapsed Time", ;
Enabled = .F., ;
Height = 17, ;
Left = 5, ;
Top = 23, ;
Width = 78, ;
DisabledForeColor = RGB(0,0,128), ;
Name = "lblElapsed"
ADD OBJECT lblprogrammer AS label WITH ;
FontSize = 6, ;
BackStyle = 0, ;
Caption = "This segment was developed by EGomez.", ;
Enabled = .F., ;
Height = 11, ;
Left = 261, ;
Top = 124, ;
Width = 149, ;
TabIndex = 11, ;
ForeColor = RGB(255,255,0), ;
DisabledForeColor = RGB(0,0,255), ;
Name = "lblProgrammer"
*-- Resets the Timer control so that it starts counting from 0.
PROCEDURE reset
lParameters tnToProcess
this.nToProcess = tnToProcess
this.nStart = seconds()
this.shpMercury.width = 0
ENDPROC
PROCEDURE timeprogress
lParameters tnProcessed
local lnUnitsRemaining,lnTimePerUnit,;
lnSecondsRemaining,lnFractHours,;
lnHrs,lnMin,lnSec
lnElapsed = seconds() - this.nStart
if mod(tnProcessed,this.nReportInterval) = 0
lnUnitsRemaining = this.nToProcess - tnProcessed
lnTimePerUnit = lnElapsed/tnProcessed
lnSecondsRemaining = lnTimePerUnit * lnUnitsRemaining
lnHrs = int(lnSecondsRemaining/3600)
lnFractHours = mod(lnSecondsRemaining,3600)
lnMin = int(lnFractHours/60)
lnSec = mod(lnFractHours,60)
lnHrs1 = int(lnElapsed/3600)
lnFractHours1 = mod(lnElapsed,3600)
lnMin1 = int(lnFractHours1/60)
lnSec1 = mod(lnFractHours1,60)
this.lblElapsed.Caption = ' Elapsed Time : ' ;
+ iif(lnHrs1 > 0,padl(alltrim(str(lnHrs1)),3);
+ iif(lnHrs1 > 1,' Hours ',' Hour '),'');
+ iif(lnMin1 > 0,padl(alltrim(str(lnMin1)),2);
+ iif(lnMin1 > 1,' Minutes ',' Minute '),'');
+ iif(lnSec1 > 0,padl(alltrim(str(lnSec1)),2);
+ iif(lnSec1 > 1,' Seconds ',' Second '),'')
this.cTimeRemaining = iif(lnHrs>0,padl(alltrim(str(lnHrs)),3);
+ iif(lnHrs>1,' Hours ',' Hour '),'');
+ iif(lnMin>0,padl(alltrim(str(lnMin)),2);
+ iif(lnMin>1,' Minutes ',' Minute '),'');
+ iif(lnSec>0,padl(alltrim(str(lnSec)),2);
+ iif(lnSec>1,' Seconds ',' Second '),'')
lnAverage = tnProcessed/lnElapsed
do case
case lnAverage > 1000
lnAverage = lnAverage / 1000
lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 K / Second'))
case lnAverage > 1
lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 / Second'))
case (lnAverage * 60) > 1
lnAverage = lnAverage * 60
lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 / Minute'))
case (lnAverage * 3600) > 1
lnAverage = lnAverage * 3600
lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 / Hour'))
otherwise
lcAverage = alltrim(transform(lnAverage,'9,999,999,999.99 K / Second'))
endcase
lcPercentage = alltrim(transform((tnProcessed/this.nToProcess)*100,'999.99 %'))
lcPercCaption = alltrim(transform((tnProcessed/this.nToProcess)*100,'999.9 %'))
lcRecords = alltrim(transform(tnProcessed,'9,999,999,999')) + ' of ' +;
alltrim(transform(this.nToProcess,'9,999,999,999 Records'))
this.cCompletionTime = ttoc(datetime() + lnSecondsRemaining)
this.lblRecords.Caption = ' ' + lcRecords + ' (' + lcPercentage + ')'
this.lblTimeRem.Caption = ' ' + alltrim(this.cTimeRemaining) + ' remaining.'
this.lblAverage.Caption = ' Average : ' + lcAverage
this.lblTimeComp.Caption = ' Will finish at : ' + this.cCompletionTime
thisform.Caption = 'Progress Timer ' + lcPercCaption + ' Complete'
endif
this.shpMercury.width = int((tnProcessed/this.nToProcess)*this.nMercWidth)
if this.shpMercury.width < 1
this.shpMercury.visible= .f.
else
this.shpMercury.visible= .t.
endif
this.refresh
return .t.
ENDPROC
PROCEDURE Init
this.nToProcess = 0
this.nStart = 0
this.cTimeRemaining = ''
this.cCompletionTime = ''
this.nReportInterval = 50
this.lblTimeComp.enabled = .f.
this.lblTimeRem.enabled = .f.
this.lblRecords.enabled = .f.
this.lblAverage.enabled = .f.
this.lblElapsed.enabled = .f.
this.lblProgrammer.enabled = .f.
this.lblElapsed.caption = ''
this.lblAverage.caption = ''
this.lblTimeComp.caption = ''
this.lblTimeRem.caption = ''
this.lblRecords.caption = ''
this.nMercWidth = this.shpMercury.width
this.shpMercury.width = 1
this.shpMercury.visible = .f.
ENDPROC
ENDDEFINE
*
*-- EndDefine: progresstimer
**************************************************