送分100分:怎么显示进度提示

送分100分:如何显示进度提示一个用MSCOMM控件接收数据的过程,需要6分钟。当点击的接收数据的按钮后,窗体就

送分100分:如何显示进度提示
一个用MSCOMM控件接收数据的过程,需要6分钟。当点击的接收数据的按钮后,窗体就停止反应6分钟,这样往往会使用户不耐烦,如何在接收的过程中显示一个进度条,提示总共有多少条数据,接收了多少条,进度为百分之一,还需等等多长时间等信息。


[解决办法]
ProgressBar
[解决办法]
ProgressBar的最小值设为0,最大值设为100,记录文件总字节数,实时记录已接收数据的字节数,---下面不需要继续说了吧!
[解决办法]
ProgressBar控件(进度条控件)位于“Microsoft Windows Common Controls 6.0”部件中
【例】ProgressBar控件示例。设计一个进度条,用来指示程序操作的进度。
窗体设计界面由一个标签、两个命令按钮以及一个进度条控件组成。
代码编写如下。
Option Explicit
Private Sub cmdCompute_Click()
'统计
Dim sp As Single '完成一个操作所增加的值
Me.MousePointer = vbHourglass
With prgMain
sp = (.Max - .Min) / 6 : .Visible = True : .Value = .Min
lblTip.Caption = "正在进行生产数据统计..."
Call Delay : .Value = sp
Call Delay : .Value = 2 * sp
Call Delay : .Value = 3 * sp
Call Delay : .Value = 4 * sp
Call Delay : .Value = 5 * sp
Call Delay : .Value = .Max
.Visible = False : lblTip.Caption = ""
MsgBox "统计完成!", vbOKOnly, "提示"
End With
Me.MousePointer = vbDefault
End Sub
Private Sub cmdExit_Click()
'退出
End
End Sub
Private Sub Delay()
'延时
Dim i%, j%
For i = 1 To 10000
For j = 1 To 2000
Next j
Next i%
End Sub
Private Sub Form_Load()
'初始化
With prgMain
.Align = vbAlignBottom : .Visible = False
.Min = 0 : .Max = 200
End With
lblTip.AutoSize = True
End Sub


[解决办法]
strSql = "select a.PRICE as price,a.MODEL,a.WH,a.ITEMNO,b.ihinvn," & _
"c.illine,DECODE(d.ORIAVGCOST,null,'0',d.ORIAVGCOST) AS ORIAVGCOST,DECODE(d.BASEAVGCOST,null,'0',d.BASEAVGCOST) AS BASEAVGCOST ,c.ILRSV3" & Chr(13) & Chr(10) & _
"from tmp_uploadprice a,bilsih b,bilsil c,limcmf_avg d " & Chr(13) & Chr(10) & _
"where .........'"

Set rs2 = DbsBpcs.OpenRecordset(strSql, dbOpenSnapshot)
intI = 0
ProgressBar1.Visible = True
If rs2.RecordCount > 32767 Then '进度条的值最大支持32767
ProgressBar1.Max = 32767
Else
If rs2.RecordCount = 0 Then ‘找不到记录
rs2.Close
MsgBox "Can't find invoice data !"
ProgressBar1.Visible = False
insert_LIMCSTPCM = False
Exit Function
Else
ProgressBar1.Max = rs2.RecordCount '如果数据集的记录数量小于32767,则将度条的上限设为数据集的记录数量
End If
End If
While Not rs2.EOF
intI = intI + 1 ’滚动进度条
ProgressBar1.Value = intI

'GET CUSTNO
strSql = "select distinct ref_cust as CUSTNO from con_inventory " & Chr(13) & Chr(10) & _
"where IW_WH=" & rs2.Fields(2).Value & " and ITEM_NO='" & rs2.Fields(3).Value & "'"
Set rs3 = DbsBpcs.OpenRecordset(strSql, dbOpenSnapshot)
'GET BASEPRICE
dblBASEPRICE = CDbl(rs2.Fields(0).Value) * dblEXGRATE
'Initialize avg_cost
If Len(Trim$(rs2.Fields(6).Value)) = 0 Then
rs2.Fields(6).Value = 0
End If
If Len(Trim$(rs2.Fields(7).Value)) = 0 Then
rs2.Fields(7).Value = 0
End If
'get new cost
' dblnewcost_b = get_newcost(rs2!price.Value * dblEXGRATE, dblsell_rate, dblcost_rate, rs2!BASEAVGCOST.Value)
'


' dblnewcost_o = get_newcost(rs2!price.Value, dblsell_rate, dblcost_rate, rs2!ORIAVGCOST.Value)
If CDbl(rs2!BASEAVGCOST.Value) * CDbl(rs2!ORIAVGCOST.Value) = 0 Then

dblnewcost_b = CDbl(rs2!PRICE.Value) * dblEXGRATE * dblsell_rate * dblcost_rate
dblnewcost_o = CDbl(rs2!PRICE.Value) * dblsell_rate * dblcost_rate
Else
If CDbl(rs2!BASEAVGCOST.Value) <= CDbl(rs2!PRICE.Value) * dblEXGRATE * dblsell_rate Then
dblnewcost_b = CDbl(rs2!BASEAVGCOST.Value)
dblnewcost_o = CDbl(rs2!ORIAVGCOST.Value)
Else
dblnewcost_b = CDbl(rs2!PRICE.Value) * dblEXGRATE * dblsell_rate * dblcost_rate
dblnewcost_o = CDbl(rs2!PRICE.Value) * dblsell_rate * dblcost_rate
End If
End If

'insert into LIMCSTPCM
strSql = "insert into ......"
DbsBpcs.Execute strSql
rs3.Close
rs2.MoveNext
Wend
rs2.Close
ProgressBar1.Value = 0
ProgressBar1.Visible = False
[解决办法]
具体代码考见博客中《用WINSOCK API实现同步非阻塞方式的网络通讯》和《用WINSOCK API实现同步阻塞方式的网络通讯》两篇文章。
[解决办法]
在COM的接收事件中写代码,将已经接收的数据量和总数据量设置到PROCESSBAR的相应属性里就可以了.
[解决办法]
加一个doevents
这样效果好点