11-3.frm

来自「vb6.0编程实例详解,很详细的介绍,对学习VB有帮助」· FRM 代码 · 共 602 行 · 第 1/2 页

FRM
602
字号
    If mapSess.SessionID = 0 Or mapMess.MsgCount = 0 Then Exit Sub '未连接邮件服务器
    grdMess.Row = grdMess.RowContaining(Y)
    If gbIgnoreEvent Then Exit Sub '数据更新时,禁止事件处理
  
    On Error GoTo RowERR
    mapMess.MsgIndex = grdMess.Columns(0).Value ' 设置 MsgIndex.
    
    Load frmRead ' 加载此窗体。
    ' 对信息及标题并且将它们放在适当的文本框中。
    With frmRead
        .lblFrom = mapMess.MsgOrigDisplayName
        .lblCC = GetList(mapCcList)
        .lblTo = GetList(mapToList)
        .lblSubject = mapMess.MsgSubject
        .txtRead = mapMess.MsgNoteText
    End With
    grdMess.Columns("已读").Text = "   X"
    
    frmRead.Show vbModal
    
    Exit Sub
RowERR:
    Debug.Print Err.Number, Err.Description
    Resume Next
End Sub

Private Sub CheckRS()
    ' 在继续运行前检查标志 gbRSalreadyPopulated
    ' 然后清除记录集。
    If gbRSalreadyPopulated Then
        ClearRS
        PopulateRS
    Else
        PopulateRS
        gbRSalreadyPopulated = True
    End If
End Sub

Private Sub DoGrid()
    ' 在继续运行前检查标志 gbGridConfigured,
    ' 如果已经被配置,则清除它。
    If gbGridConfigured Then
        gbIgnoreEvent = True
        grdMess.HoldFields ' 保持网格设置.
        Set grdMess.DataSource = rsUnread
        gbIgnoreEvent = False
    Else
        ConfigureGrid
    End If

End Sub

Private Sub ComposeMessage()
    On Error GoTo ComposeErr
    Dim strMessage As String
    ' 使用 Compose 方法并激活 Send 方法。
    ' 当 Send 方法的可选参数为 True 时, 显示缺省邮件发送窗体,
    ' 否则不显示缺省窗体。
    mapMess.Compose
    mapMess.Send True
    
    Exit Sub
ComposeErr:
    Debug.Print Err.Number, Err.Description
    Resume Next
End Sub

Private Sub CreateRS()
    ' 创建 ADO 记录集并且添加字段。每个字段在
    ' DataGrid 控件中形成一列。
    
    Set rsUnread = New ADODB.Recordset
    With rsUnread.Fields
        .Append "ID", adSmallInt
        .Append "已读", adBSTR
        .Append "接收时间", adDate
        .Append "发件人", adBSTR
        .Append "主题", adBSTR
    End With
    rsUnread.Open
End Sub


Private Sub FetchUnreadOnly()
    With mapMess
         ' 只取未读信息,然后在状态栏中显示未读信息数。
        .FetchUnreadOnly = True
        .Fetch
        sbrMapi.Panels("MsgCnt").Text = .MsgCount & " 条消息"
    End With
End Sub

Private Sub ClearRS()
    ' 清除所有行的记录集。
    If rsUnread.RecordCount = 0 Then Exit Sub
    Dim i As Integer
    gbIgnoreEvent = True
    rsUnread.MoveFirst '移动到第一记录
    For i = 1 To rsUnread.RecordCount
        rsUnread.Delete adAffectCurrent '删除记录
        DoEvents '执行VB事件
    Next i
    gbIgnoreEvent = False
End Sub
Private Sub PopulateRS()
    gbIgnoreEvent = True ' 防止 RowColChanged 事件发生。
    Dim i As Integer
    For i = 0 To mapMess.MsgCount - 1
        mapMess.MsgIndex = i
        rsUnread.AddNew
        rsUnread!ID = i
        rsUnread!接收时间 = mapMess.MsgDateReceived
        rsUnread!发件人 = mapMess.MsgOrigDisplayName
        rsUnread!主题 = mapMess.MsgSubject
    Next i
    gbIgnoreEvent = False ' 重新设置标志。
    
End Sub
Private Sub ConfigureGrid()
    ' 在设置 DataSource 到记录集前,设置窗格列的宽度。
    
    gbIgnoreEvent = True
    With grdMess
        Set .DataSource = rsUnread ' 激活事件
        .Columns("ID").Width = 0   ' 隐藏 ID 列。
        .Columns("已读").Width = 500
        .Columns("接收时间").Width = 900
        .Columns("发件人").Width = 2000
        .Columns("主题").Width = 5000
    End With
    
    Dim fmtdate As StdDataFormat
    ' 使用 Format 对象来格式化日期列。
    Set fmtdate = New StdDataFormat
    With fmtdate
        .Type = fmtCustom
        .Format = "Short Date"
     End With
    Set grdMess.Columns("接收时间").DataFormat = fmtdate
    
    gbIgnoreEvent = False
    gbGridConfigured = True ' 设置配置好标志。
End Sub


Private Function LogOn() As Boolean
    ' 创建名为 rsUnread 的 Recordset 对象
    CreateRS

    ' 如果会话已经启动,退出此函数。
    If mapSess.NewSession Then
        MsgBox "会话已经被建立"
        Exit Function
    End If
    
    On Error GoTo errLogInFail
    With mapSess
        ' 设置 DownLoadMail 为 False 来防止直接下载。
        .DownLoadMail = False
        .LogonUI = True ' 使用下列的电子邮件系统的登录 UI。
        .SignOn ' Signon method.
        ' 如果成功,则返回 True 。
        LogOn = True
        ' 设置 NewSession 为真并且 set0
        ' 变量的标志也为真。Set NewSession to True and set0
        ' variable flag to true
        .NewSession = True
        bNewSession = True
        mapMess.SessionID = .SessionID ' 必须在继续前设置
        sbrMapi.Panels("SessID") = "ID = " & .SessionID ' 显示 SessionID 。
    End With
    ' 使按钮可用或禁用。
    ToggleButtonEnabled
    Exit Function
    
errLogInFail:
    Debug.Print Err.Number, Err.Description
    If Err.Number = 32003 Then
        MsgBox "取消登录"
        LogOn = False
    End If
    Exit Function
End Function

Private Sub LogOff()
    ' 注销 MapSessions 控件。
    With mapSess
        .SignOff ' 关闭会话。
        .NewSession = False ' 为新的会话设置标志。
        bNewSession = False ' 重新设置标志。
    End With
    ' 禁用或可用按钮。
    ToggleButtonEnabled
    
    rsUnread.Close ' 关闭 ADO 记录集并且设置变量为没有。
    Set rsUnread = Nothing
    gbRSalreadyPopulated = False
    Unload frmRead ' 卸载此窗体。
    grdMess.ClearFields ' 清除窗格。
End Sub

Private Sub ToggleButtonEnabled()
    ' 切换各个按钮的 Enabled 属性。
    With tbrMail
        .Buttons("LogOn").Enabled = Abs(.Buttons("LogOn").Enabled) - 1
        .Buttons("logOff").Enabled = Abs(.Buttons("logOff").Enabled) - 1
        .Buttons("fetch").Enabled = Abs(.Buttons("fetch").Enabled) - 1
        .Buttons("compose").Enabled = Abs(.Buttons("compose").Enabled) - 1
        .Buttons("address").Enabled = Abs(.Buttons("address").Enabled) - 1
        .Buttons("address").ButtonMenus(1).Enabled = Abs(.Buttons("address").ButtonMenus(1).Enabled) - 1
        .Buttons("address").ButtonMenus(2).Enabled = Abs(.Buttons("address").ButtonMenus(2).Enabled) - 1
        
    End With
    
    ' 切换菜单的可用属性。
    mnuLogOn.Enabled = Abs(mnuLogOn.Enabled) - 1
    mnuLogOff.Enabled = Abs(mnuLogOff.Enabled) - 1
    mnuTools.Enabled = Abs(mnuTools.Enabled) - 1
    mnuCheck.Enabled = Abs(mnuCheck.Enabled) - 1
    mnuAddress.Enabled = Abs(mnuAddress.Enabled) - 1

End Sub

Private Function GetList(ListType As Integer) As String
    ' 这个函数获得信息的所有接收者
    ' 并且分别对他们进行处理。
    Dim i As Integer
    Dim strList As String
    For i = 0 To mapMess.RecipCount - 1
        mapMess.RecipIndex = i
        If mapMess.RecipType = ListType Then
            strList = strList & mapMess.RecipDisplayName & "; "
        End If
    Next i
    If strList = "" Then
        GetList = ""
        Exit Function
    End If
    ' 从最后接收者的名称中分离出分号。
    GetList = Left(strList, Len(strList) - 2)

End Function


Private Sub mnuAddress_Click()
    ' 显示地址簿。
    On Error GoTo AddressErr
    mapMess.Show True
    Exit Sub
AddressErr:
    Debug.Print Err.Number, Err.Description
    Resume Next
End Sub

Private Sub mnuCheck_Click()
    FetchUnreadOnly ' 取未读信息。
    CheckRS ' 检查记录集并且填充。
    DoGrid ' 设置窗格 DataSource 为记录集。
    
End Sub

Private Sub mnuExit_Click()
    ' 如果没有完成则取消,并且卸载此窗题。
    If mapSess.SessionID <> 0 Then mapSess.SignOff
    Unload Me
End Sub

Private Sub mnuLogOff_Click()
    LogOff
End Sub

Private Sub mnuLogOn_Click()
'申请登录
    If LogOn = True Then
        FetchUnreadOnly
        CheckRS
        DoGrid
    Else
        Exit Sub
    End If
End Sub

Private Sub tbrMail_ButtonMenuClick(ByVal ButtonMenu As MSComCtlLib.ButtonMenu)
'选择工具条下拉菜单按钮
    On Error GoTo btnClickErr
    Select Case ButtonMenu.Key
    Case "global"
        mapMess.Show False
    Case "recepient"
        mapMess.Show True
    End Select
    Exit Sub
btnClickErr:
    If Err.Number = mapUserAbort Then
        Resume Next
    Else
        MsgBox Err.Number & ": " & Err.Description
    End If
    
End Sub

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?