在下面得接收邮件程序里,我写的有关显示接收每封邮件进度的进度条代码写得不好,显示的很不好看,求教高手帮助修改一下,谢谢!!!
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As StringStatic intMessages As Integer '记录信箱的信件数
Static intCurrentMessage As Integer '当前下载的信件
Static strBuffer As String '接收消息的字符串变量
Static strBuffe As String '接收消息的字符串变量
Static strBuff As Long
Dim strMs As String
Dim ProB As Long
Dim fbqd As String
Dim strMs1 As Long
Dim hh As Long
Dim subjectSUBJECT As String '主题
Dim READREAD As String
Dim AROUND As String '来信人
Dim DATEDATE As String '日期
Dim ACCESSORIES As Integer '附件
'Dim DIMENSION As Long '大小
Dim INDEXINDEX As String 'ID号
Dim xjtxx1 As xjtxx
Dim ddxjtxx As Long
Dim deftFileNum As Integer
deftFileNum = FreeFile
'从winsock接收缓冲区中读取数据
Winsock1.GetData strData
If Left$(strData, 1) = "+" Or m_State = POP3_RETR Then
Select Case m_State
Case POP3_Connect
intMessages = 0
m_State = POP3_USER
Winsock1.SendData "USER " & user & vbCrLf
Case POP3_USER
m_State = POP3_PASS
'发送密码
Winsock1.SendData "PASS " & passwork & vbCrLf
Case POP3_PASS
m_State = POP3_STAT
Winsock1.SendData "STAT" & vbCrLf
Case POP3_STAT
intMessages = CInt(Mid$(strData, 5, _
InStr(5, strData, " ") - 5))
Label2.Caption = "共有" & intMessages & "封邮件"
If intMessages > 0 Then
'如果邮件的数量>0,设置当前会话状态为取回信件阶段
m_State = POP3_LIST
'设置变量表明当前取回的是哪个信件
intCurrentMessage = intCurrentMessage + 1
Winsock1.SendData "LIST 1" & vbCrLf
Else
'如果是处于其它状态,设置当前状态为退出会话阶段
m_State = POP3_QUIT
'发送QUIT命令退出会话过程
Winsock1.SendData "QUIT" & vbCrLf
MsgBox "您没有邮件!!!", vbInformation
End If
Case POP3_LIST
strBuff = CLng(Trim(Mid(strData, 7)))
m_State = POP3_UIDL
Winsock1.SendData "UIDL " & CStr(intCurrentMessage) & vbCrLf
Case POP3_UIDL
strBuffe = strData
Set m_oMess = New CMess
m_oMess.CreateFrom YHLJ
m_oMess.CreateFromText strBuffe
strM = m_oMess.Mes1
strMs = m_oMess.Mes
If strMs = "no" Then
If sfblbf = "YES" Then
'fbqd = "no"
m_State = POP3_DELE
Winsock1.SendData "DELE" & Space(1) & intCurrentMessage & vbCrLf
Else
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
'退出POP3会话
Winsock1.SendData "QUIT" & vbCrLf
Else
Label3.Visible = False
intCurrentMessage = intCurrentMessage + 1
m_State = POP3_LIST
'发送RETR命令取回下一封信
Winsock1.SendData "LIST " & CStr(intCurrentMessage) & vbCrLf
End If
End If
End If
If strMs = "yes" Then
If sfblbf = "YES" Then
'fbqd = "yes"
m_State = POP3_DELE
Winsock1.SendData "DELE" & Space(1) & intCurrentMessage & vbCrLf
Else
Label3.Visible = True
m_State = POP3_RETR
'发送RETR及参数取回第一封邮件
ProB1.Visible = True '显示进度条
ProB1.Min = 0 '进度条开始值
Winsock1.SendData "RETR " & CStr(intCurrentMessage) & vbCrLf
End If
End If
Case POP3_RETR
On Error Resume Next
strBuffer = strBuffer & strData
If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
ProB1.Max = Len(strBuffer) / strBuff
strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
Set m_oMessage = New CMessage
m_oMessage.CreateFrom1 YHLJ
m_oMessage.CreateFromText strBuffer
Label1.Caption = Mid(m_oMessage.Mes, 1, 5)
AROUND = m_oMessage.MesMESLAXIREN
subjectSUBJECT = m_oMessage.Mes
DATEDATE = m_oMessage.MesMESDATE
ACCESSORIES = m_oMessage.MesMESFJSFCZ
strBuffer = ""
'判断是否已经取完信件
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
'退出POP3会话
Winsock1.SendData "QUIT" & vbCrLf
Else
m_State = POP3_LIST
'发送RETR命令取回下一封信
Winsock1.SendData "LIST " & CStr(intCurrentMessage) & vbCrLf
End If
Else
ProB1.Value = Len(strBuffer) / strBuff '进度条得值
End If
Case POP3_DELE
If fbqd = "yes" Then
m_State = POP3_RETR
'发送RETR命令取回下一封信
ProB1.Visible = True '显示进度条
ProB1.Min = 0
Winsock1.SendData "RETR " & CStr(intCurrentMessage) & vbCrLf
Else
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
'退出POP3会话
Winsock1.SendData "QUIT" & vbCrLf
Else
Label3.Visible = False
intCurrentMessage = intCurrentMessage + 1
m_State = POP3_LIST
'发送RETR命令取回下一封信
Winsock1.SendData "LIST " & CStr(intCurrentMessage) & vbCrLf
End If
End If
Case POP3_QUIT
Winsock1.Close
Unload Me
intCurrentMessage = 0
End Select
Else
Winsock1.Close
MsgBox "POP3 Error: " & strData, _
vbExclamation, "POP3 Error"
End If
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As StringStatic intMessages As Integer '记录信箱的信件数
Static intCurrentMessage As Integer '当前下载的信件
Static strBuffer As String '接收消息的字符串变量
Static strBuffe As String '接收消息的字符串变量
Static strBuff As Long
Dim strMs As String
Dim ProB As Long
Dim fbqd As String
Dim strMs1 As Long
Dim hh As Long
Dim subjectSUBJECT As String '主题
Dim READREAD As String
Dim AROUND As String '来信人
Dim DATEDATE As String '日期
Dim ACCESSORIES As Integer '附件
'Dim DIMENSION As Long '大小
Dim INDEXINDEX As String 'ID号
Dim xjtxx1 As xjtxx
Dim ddxjtxx As Long
Dim deftFileNum As Integer
deftFileNum = FreeFile
'从winsock接收缓冲区中读取数据
Winsock1.GetData strData
If Left$(strData, 1) = "+" Or m_State = POP3_RETR Then
Select Case m_State
Case POP3_Connect
intMessages = 0
m_State = POP3_USER
Winsock1.SendData "USER " & user & vbCrLf
Case POP3_USER
m_State = POP3_PASS
'发送密码
Winsock1.SendData "PASS " & passwork & vbCrLf
Case POP3_PASS
m_State = POP3_STAT
Winsock1.SendData "STAT" & vbCrLf
Case POP3_STAT
intMessages = CInt(Mid$(strData, 5, _
InStr(5, strData, " ") - 5))
Label2.Caption = "共有" & intMessages & "封邮件"
If intMessages > 0 Then
'如果邮件的数量>0,设置当前会话状态为取回信件阶段
m_State = POP3_LIST
'设置变量表明当前取回的是哪个信件
intCurrentMessage = intCurrentMessage + 1
Winsock1.SendData "LIST 1" & vbCrLf
Else
'如果是处于其它状态,设置当前状态为退出会话阶段
m_State = POP3_QUIT
'发送QUIT命令退出会话过程
Winsock1.SendData "QUIT" & vbCrLf
MsgBox "您没有邮件!!!", vbInformation
End If
Case POP3_LIST
strBuff = CLng(Trim(Mid(strData, 7)))
m_State = POP3_UIDL
Winsock1.SendData "UIDL " & CStr(intCurrentMessage) & vbCrLf
Case POP3_UIDL
strBuffe = strData
Set m_oMess = New CMess
m_oMess.CreateFrom YHLJ
m_oMess.CreateFromText strBuffe
strM = m_oMess.Mes1
strMs = m_oMess.Mes
If strMs = "no" Then
If sfblbf = "YES" Then
'fbqd = "no"
m_State = POP3_DELE
Winsock1.SendData "DELE" & Space(1) & intCurrentMessage & vbCrLf
Else
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
'退出POP3会话
Winsock1.SendData "QUIT" & vbCrLf
Else
Label3.Visible = False
intCurrentMessage = intCurrentMessage + 1
m_State = POP3_LIST
'发送RETR命令取回下一封信
Winsock1.SendData "LIST " & CStr(intCurrentMessage) & vbCrLf
End If
End If
End If
If strMs = "yes" Then
If sfblbf = "YES" Then
'fbqd = "yes"
m_State = POP3_DELE
Winsock1.SendData "DELE" & Space(1) & intCurrentMessage & vbCrLf
Else
Label3.Visible = True
m_State = POP3_RETR
'发送RETR及参数取回第一封邮件
ProB1.Visible = True '显示进度条
ProB1.Min = 0 '进度条开始值
Winsock1.SendData "RETR " & CStr(intCurrentMessage) & vbCrLf
End If
End If
Case POP3_RETR
On Error Resume Next
strBuffer = strBuffer & strData
If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
ProB1.Max = Len(strBuffer) / strBuff
strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
Set m_oMessage = New CMessage
m_oMessage.CreateFrom1 YHLJ
m_oMessage.CreateFromText strBuffer
Label1.Caption = Mid(m_oMessage.Mes, 1, 5)
AROUND = m_oMessage.MesMESLAXIREN
subjectSUBJECT = m_oMessage.Mes
DATEDATE = m_oMessage.MesMESDATE
ACCESSORIES = m_oMessage.MesMESFJSFCZ
strBuffer = ""
'判断是否已经取完信件
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
'退出POP3会话
Winsock1.SendData "QUIT" & vbCrLf
Else
m_State = POP3_LIST
'发送RETR命令取回下一封信
Winsock1.SendData "LIST " & CStr(intCurrentMessage) & vbCrLf
End If
Else
ProB1.Value = Len(strBuffer) / strBuff '进度条得值
End If
Case POP3_DELE
If fbqd = "yes" Then
m_State = POP3_RETR
'发送RETR命令取回下一封信
ProB1.Visible = True '显示进度条
ProB1.Min = 0
Winsock1.SendData "RETR " & CStr(intCurrentMessage) & vbCrLf
Else
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
'退出POP3会话
Winsock1.SendData "QUIT" & vbCrLf
Else
Label3.Visible = False
intCurrentMessage = intCurrentMessage + 1
m_State = POP3_LIST
'发送RETR命令取回下一封信
Winsock1.SendData "LIST " & CStr(intCurrentMessage) & vbCrLf
End If
End If
Case POP3_QUIT
Winsock1.Close
Unload Me
intCurrentMessage = 0
End Select
Else
Winsock1.Close
MsgBox "POP3 Error: " & strData, _
vbExclamation, "POP3 Error"
End If
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货