行者孙,进度下载文件
PUBLIC _form1
_form1=CREATEOBJECT("form1")
_form1.SHOW
RETURN
DEFINE CLASS form1 AS FORM
TOP = 90
LEFT = 294
HEIGHT = 183
WIDTH = 343
DOCREATE = .T.
CAPTION = "行者示例-文件下载"
BACKCOLOR =RGB( 153,153,153)
NAME = "form1"
PROCEDURE DOWN
X=ALLTRIM(STR(PD*102400))
IF X==''
X='0'
ENDI
Y=ALLTRIM(STR((PD+1)*102400-1))
f_Header='Range: bytes='+X+'-'+Y
IF PD>f_cs
f_header='Range: bytes='+X+'-'
THISFORM.inet2.execute(f_url,'get',,f_Header)
ELSE
THISFORM.inet2.execute(f_url,'get',,f_header)
ENDIF
ENDPROC
PROCEDURE INIT
THIS.ADDOBJECT("Dataenvironment","_classname1")
THIS.ADDOBJECT("Inet1","_classname2")
THIS.ADDOBJECT("Command3","_classname3")
THIS.ADDOBJECT("inet2","_classname4")
THIS.ADDOBJECT("Label2","_classname5")
THIS.ADDOBJECT("Shape1","_classname6")
THIS.ADDOBJECT("Shape2","_classname7")
THIS.ADDOBJECT("Shape3","_classname8")
THIS.ADDOBJECT("Label5","_classname9")
THIS.ADDOBJECT("Label6","_classname10")
THIS.ADDOBJECT("Label1","_classname11")
THIS.ADDOBJECT("Label3","_classname12")
THIS.ADDOBJECT("Label4","_classname13")
THIS.ADDOBJECT("Timer1","_classname14")
PUBLIC f_url,f_size,f_cs,f_sy,f_name,PD,h,f_header,X,Y,JS
THISFORM.shape3.WIDTH=0
ENDPROC
ENDDEFINE
DEFINE CLASS _classname1 AS DATAENVIRONMENT
VISIBLE=.T.
TOP = 0
LEFT = 0
WIDTH = 0
HEIGHT = 0
DATASOURCE = .NULL.
NAME = "Dataenvironment"
ENDDEFINE
DEFINE CLASS _classname2 AS OLECONTROL
VISIBLE=.T.
COMMENT = ""
TOP = 15
LEFT = 127
HEIGHT = 24
WIDTH = 38
NAME = "Inet1"
OLECLASS="InetCtls.Inet.1"
PROCEDURE StateChanged
*** ActiveX 控件事件 ***
LPARAMETERS state
DO CASE
CASE state=1
THISFORM.label1.CAPTION='下载状态:正在连接服务器下载地址.....'
CASE state=2
THISFORM.label1.CAPTION='连接服务器成功'
CASE state=3
THISFORM.label1.CAPTION='该控件正在与主机连接。 '
CASE state=4
THISFORM.label1.CAPTION='该控件已与主机连接成功。'
CASE state=5
THISFORM.label1.CAPTION='该控件正在向主机发送请求。'
CASE state=6
THISFORM.label1.CAPTION='该控件发送请求已成功。'
CASE state=7
THISFORM.label1.CAPTION='该控件正在接收主机的响应。 '
CASE state=8
THISFORM.label1.CAPTION='该控件已成功地接收到主机的响应。 '
CASE state=9
THISFORM.label1.CAPTION='该控件正在解除与主机的连接。'
CASE state=10
THISFORM.label1.CAPTION='该控件已成功地与主机解除了连接。 '
CASE state=11
THISFORM.label1.CAPTION='下载状态:与主机通讯时出现了错误!'
CASE state=12
THISFORM.label1.CAPTION='下载状态:正在下载该文件.....'
f_size=VAL(THISFORM.inet1.getheader('Content-Length'))
THISFORM.label2.CAPTION='文件大小:'+ALLTRIM(STR(f_size))+' byte'
f_cs=INT(f_size/102400)
f_sy=MOD(f_size,102400)
h=FCREATE(f_name)
THISFORM.timer1.INTERVAL=1000
PD=0
THISFORM.DOWN()
THISFORM.inet1.OBJECT.CANCEL
ENDC
ENDPROC
ENDDEFINE
DEFINE CLASS _classname3 AS COMMANDBUTTON
VISIBLE=.T.
TOP = 140
LEFT = 150
HEIGHT = 25
WIDTH = 60
CAPTION = "开始下载"
NAME = "Command3"
PROCEDURE CLICK
f_url='http://dl_dir.qq.com/qqfile/tm/TM2009Beta3.4_chs.exe'&&被下载文件地址
f_name='F:\TM2009Beta3.4_chs.exe'&&被存放到本地的文件名
THISFORM.shape3.WIDTH=0
JS=0&&下载秒数计数
THISFORM.inet1.execute(f_url)
ENDPROC
ENDDEFINE
DEFINE CLASS _classname4 AS OLECONTROL
VISIBLE=.T.
COMMENT = ""
TOP = 15
LEFT = 178
HEIGHT = 24
WIDTH = 38
NAME = "inet2"
OLECLASS="InetCtls.Inet.1"
PROCEDURE StateChanged
*** ActiveX 控件事件 ***
LPARAMETERS state
IF state=12
IF PD>=f_cs
st=THISFORM.inet2.GetChunk(f_sy,1)
=FWRITE(h,st)
=FCLOSE(h)
THISFORM.timer1.INTERVAL=0
THISFORM.label6.CAPTION='100%'
THISFORM.CAPTION='文件下载完毕'
THISFORM.label1.CAPTION='下载状态:'
THISFORM.label2.CAPTION='下载状态:'
=MESSAGEBOX('下载完毕')
*!* thisform.inet1.object.Cancel
ELSE
st=THISFORM.inet2.GetChunk(102400,1)
PD=PD+1
=FWRITE(h,st)
THISFORM.shape3.WIDTH=(PD/f_cs)*246
THISFORM.DOWN()
ENDI
ENDI
ENDPROC
ENDDEFINE
DEFINE CLASS _classname5 AS LABEL
VISIBLE=.T.
AUTOSIZE = .T.
FONTSIZE = 11
BACKSTYLE = 0
CAPTION = "文件大小:"
HEIGHT = 19
HELPCONTEXTID = 1
LEFT = 7
TOP = 31
WIDTH = 77
NAME = "Label2"
ENDDEFINE
DEFINE CLASS _classname6 AS SHAPE
VISIBLE=.T.
TOP = 105
LEFT = 76
HEIGHT = 17
WIDTH = 248
BACKSTYLE = 0
CURVATURE = 10
NAME = "Shape1"
ENDDEFINE
DEFINE CLASS _classname7 AS SHAPE
VISIBLE=.T.
TOP = 104
LEFT = 75
HEIGHT = 17
WIDTH = 248
BACKSTYLE = 0
CURVATURE = 10
BORDERCOLOR =RGB( 255,255,255)
NAME = "Shape2"
ENDDEFINE
DEFINE CLASS _classname8 AS SHAPE
VISIBLE=.T.
TOP = 106
LEFT = 77
HEIGHT = 15
WIDTH = 246
BACKSTYLE = 1
BORDERSTYLE = 0
BORDERWIDTH = 0
CURVATURE = 10
BACKCOLOR =RGB( 128,128,128)
NAME = "Shape3"
ENDDEFINE
DEFINE CLASS _classname9 AS LABEL
VISIBLE=.T.
AUTOSIZE = .T.
FONTSIZE = 11
BACKSTYLE = 0
CAPTION = "下载进度:"
HEIGHT = 19
LEFT = 7
TOP = 105
WIDTH = 77
NAME = "Label5"
ENDDEFINE
DEFINE CLASS _classname10 AS LABEL
VISIBLE=.T.
AUTOSIZE = .T.
BACKSTYLE = 0
CAPTION = "%"
HEIGHT = 16
LEFT = 204
TOP = 106
WIDTH = 8
NAME = "Label6"
ENDDEFINE
DEFINE CLASS _classname11 AS LABEL
VISIBLE=.T.
AUTOSIZE = .T.
FONTSIZE = 11
BACKSTYLE = 0
CAPTION = "下载状态:"
HEIGHT = 19
LEFT = 7
TOP = 7
WIDTH = 77
NAME = "Label1"
ENDDEFINE
DEFINE CLASS _classname12 AS LABEL
VISIBLE=.T.
AUTOSIZE = .T.
FONTSIZE = 11
BACKSTYLE = 0
CAPTION = "下载速率:"
HEIGHT = 19
LEFT = 7
TOP = 56
WIDTH = 77
NAME = "Label3"
ENDDEFINE
DEFINE CLASS _classname13 AS LABEL
VISIBLE=.T.
AUTOSIZE = .T.
FONTSIZE = 11
BACKSTYLE = 0
CAPTION = "剩余时间:"
HEIGHT = 19
LEFT = 7
TOP = 80
WIDTH = 77
NAME = "Label4"
ENDDEFINE
DEFINE CLASS _classname14 AS TIMER
VISIBLE=.T.
TOP = 27
LEFT = 231
HEIGHT = 23
WIDTH = 23
INTERVAL = 0
NAME = "Timer1"
PROCEDURE TIMER
JS=JS+1
sl=ALLTRIM(STR(PD*102400/1024/JS,6,2))
THISFORM.label3.CAPTION='下载速率:'+sl+' KB/S'
THISFORM.label4.CAPTION='剩余时间:'+ALLTRIM(STR((f_size-PD*102400)/1024/VAL(sl)))+' 秒'
THISFORM.label6.CAPTION=ALLTRIM(STR((PD*102400/f_size)*100,5,2))+'%'
THISFORM.CAPTION='行者示例-文件下载 '+ALLTRIM(STR((PD*102400/f_size)*100,5,2))+'%'
ENDPROC
ENDDEFINE