求教版主,下载邮件进度条的最大值在应该写在何处(或请帮助重新写一下进度条的有关代码代码),谢谢!!!!
ProB1为进度条控件Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As StringStatic intMessages          As Integer '记录信箱的信件数
Static intCurrentMessage    As Integer '当前下载的信件
Static strBuffer            As String  '接收消息的字符串变量
Dim hh As Long
'从winsock接收缓冲区中读取数据
Winsock1.GetData strData
Debug.Print strDataIf Left$(strData, 1) = "+" Or m_State = POP3_RETR Then
'如果接收字符串的第一个字符为“+”表示服务器接收了来自客户端的请求命令
'If the first character of the server's response is "+" then
'如果接到的第一个字符为“-”,则表示服务器认为来自客户端的请求是错误的。
'如果会话状态正处于接收邮件,则不需要判断第一个字符。
    Select Case m_State
        Case POP3_Connect
            '
            '将消息(信件)记数设置为0 Reset the number of messages
            intMessages = 0
             m_State = POP3_STAT
            '
            '发送STAT命令,要求服务器返回邮箱信息
            Winsock1.SendData "STAT" & vbCrLf
            Debug.Print "STAT"
      Case POP3_STAT
            '
            '从接收的从服务器返回的邮箱状态字符串中获得邮件数量
            intMessages = InStr(2, strData, " ")
            If intMessages > 0 Then
                '如果邮件的数量>0,设置当前会话状态为取回信件阶段
                m_State = POP3_RETR
                '设置变量表明当前取回的是哪个信件
                intCurrentMessage = intCurrentMessage + 1
                '发送RETR及参数取回第一封邮件
                Winsock1.SendData "RETR 1" & vbCrLf
                Debug.Print "RETR 1"
            Else
                '如果是处于其它状态,设置当前状态为退出会话阶段
                m_State = POP3_QUIT
                '发送QUIT命令退出会话过程
                Winsock1.SendData "QUIT" & vbCrLf
            End If
        Case POP3_RETR
             hh = 0
            ProB1.Value = hh               '进度条开始值
             ProB1.Visible = True
             ProB1.Min = hh                '进度条最小值
            strBuffer = strBuffer & strData
            '
            If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
                '如果接收到的信件内容的字符串中存在vbLf & "." & vbCrLf表示
                '使用RETR返回的信件数据已经完毕
                '
                '从服务器接收到信件的数据中将响应行去掉
                strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
                '从信件的数据中去掉最后的vbLf & "." & vbCrLf
                strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
                '创建CMessage分析取得的信件数据
                Set m_oMessage = New CMessage
                m_oMessage.CreateFromText strBuffer
              
               
                Set m_oMessage = Nothing
                 '清除接收信件数据的字符串
                strBuffer = ""
                '判断是否已经取完信件
                If intCurrentMessage = intMessages Then
                    m_State = POP3_QUIT
                    '退出POP3会话
                    Winsock1.SendData "QUIT" & vbCrLf
                    Debug.Print "QUIT"
                Else
                    intCurrentMessage = intCurrentMessage + 1
                    m_State = POP3_RETR
                    '发送RETR命令取回下一封信
                    Winsock1.SendData "RETR " & CStr(intCurrentMessage) & vbCrLf
                   
                End If
                else
                ProB1.Value = hh + 1        '进度条 
            End If
        Case POP3_QUIT
            '关闭Winsock连接
            Winsock1.Close
    End Select
Else
    Winsock1.Close
    End If
End Sub

解决方案 »

  1.   

    少写一行代码: strms1=m_oMessage.size '邮件大小
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As StringStatic intMessages          As Integer '记录信箱的信件数
    Static intCurrentMessage    As Integer '当前下载的信件
    Static strBuffer            As String  '接收消息的字符串变量
    dim strms1 as long
    Dim hh As Long
    '从winsock接收缓冲区中读取数据
    Winsock1.GetData strData
    Debug.Print strDataIf Left$(strData, 1) = "+" Or m_State = POP3_RETR Then
    '如果接收字符串的第一个字符为“+”表示服务器接收了来自客户端的请求命令
    'If the first character of the server's response is "+" then
    '如果接到的第一个字符为“-”,则表示服务器认为来自客户端的请求是错误的。
    '如果会话状态正处于接收邮件,则不需要判断第一个字符。
        Select Case m_State
            Case POP3_Connect
                '
                '将消息(信件)记数设置为0 Reset the number of messages
                intMessages = 0
                 m_State = POP3_STAT
                '
                '发送STAT命令,要求服务器返回邮箱信息
                Winsock1.SendData "STAT" & vbCrLf
                Debug.Print "STAT"
          Case POP3_STAT
                '
                '从接收的从服务器返回的邮箱状态字符串中获得邮件数量
                intMessages = InStr(2, strData, " ")
                If intMessages > 0 Then
                    '如果邮件的数量>0,设置当前会话状态为取回信件阶段
                    m_State = POP3_RETR
                    '设置变量表明当前取回的是哪个信件
                    intCurrentMessage = intCurrentMessage + 1
                    '发送RETR及参数取回第一封邮件
                    Winsock1.SendData "RETR 1" & vbCrLf
                    Debug.Print "RETR 1"
                Else
                    '如果是处于其它状态,设置当前状态为退出会话阶段
                    m_State = POP3_QUIT
                    '发送QUIT命令退出会话过程
                    Winsock1.SendData "QUIT" & vbCrLf
                End If
            Case POP3_RETR
                 hh = 0
                ProB1.Value = hh               '进度条开始值
                 ProB1.Visible = True
                 ProB1.Min = hh                '进度条最小值
                strBuffer = strBuffer & strData
                '
                If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
                    '如果接收到的信件内容的字符串中存在vbLf & "." & vbCrLf表示
                    '使用RETR返回的信件数据已经完毕
                    '
                    '从服务器接收到信件的数据中将响应行去掉
                    strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
                    '从信件的数据中去掉最后的vbLf & "." & vbCrLf
                    strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
                    '创建CMessage分析取得的信件数据
                    Set m_oMessage = New CMessage
                    m_oMessage.CreateFromText strBuffer
                   strms1=m_oMessage.size '邮件大小
                    Set m_oMessage = Nothing
                     '清除接收信件数据的字符串
                    strBuffer = ""
                    '判断是否已经取完信件
                    If intCurrentMessage = intMessages Then
                        m_State = POP3_QUIT
                        '退出POP3会话
                        Winsock1.SendData "QUIT" & vbCrLf
                        Debug.Print "QUIT"
                    Else
                        intCurrentMessage = intCurrentMessage + 1
                        m_State = POP3_RETR
                        '发送RETR命令取回下一封信
                        Winsock1.SendData "RETR " & CStr(intCurrentMessage) & vbCrLf
                       
                    End If
                    else
                    ProB1.Value = hh + 1        '进度条 
                End If
            Case POP3_QUIT
                '关闭Winsock连接
                Winsock1.Close
        End Select
    Else
        Winsock1.Close
        End If
    End Sub
      

  2.   

    Case POP3_STAT
                '
                '从接收的从服务器返回的邮箱状态字符串中获得邮件数量
                intMessages = InStr(2, strData, " ")
                If intMessages > 0 Then
                    ProB1.Max=intMessages