Skip to content

VBMAN.Toast - 通知消息对象

概述

VBMAN.Toast 提供了非阻塞的通知消息显示功能,类似于现代操作系统中的 Toast 通知。支持 9种显示方位4种状态样式2种主题,适用于需要提示用户但不希望打断操作的场景。

核心特性

  • 9种显示方位: 左上、左中、左下、中上、居中、中下、右上、右中、右下
  • 链式调用: 支持流畅的链式 API 设计
  • 自动堆叠: 非居中位置支持自动堆叠显示
  • 状态样式: 信息、成功、警告、错误四种视觉状态
  • 主题切换: 支持亮色/暗色主题
  • 标签管理: 支持通过标签名控制特定 Toast
  • 事件通知: 提供数量变化和全部关闭事件

枚举类型

EnumPos - 显示方位

常量说明
LeftTop10左上角
LeftCenter12左中(居中,不支持堆叠)
LeftBottom14左下角
CenterTop20中上方
Center22正中央(居中,不支持堆叠)
CenterBottom24中下方
RightTop30右上角
RightCenter32右中(居中,不支持堆叠)
RightBottom34右下角

EnumState - 消息状态

常量说明
Info1信息(蓝色)
Success2成功(绿色)
Warning3警告(黄色)
Danger4错误(红色)

EnumTheme - 主题

常量说明
Light1亮色主题
Dark2暗色主题

链式调用方法

Pos

设置显示方位,支持链式调用。

vb
Public Function Pos(p As EnumPos) As cToast

示例:

vb
' 在右上角显示
VBMAN.Toast.Pos(RightTop).Show "操作成功"

' 在左下角显示
VBMAN.Toast.Pos(LeftBottom).Show "下载完成"

State

设置消息状态,影响视觉样式。

vb
Public Function State(s As EnumState) As cToast

示例:

vb
' 成功提示
VBMAN.Toast.State(Success).Show "保存成功"

' 错误提示
VBMAN.Toast.State(Danger).Show "操作失败"

' 警告提示
VBMAN.Toast.State(Warning).Show "请注意检查"

Theme

设置主题。

vb
Public Function Theme(t As EnumTheme) As cToast

示例:

vb
' 暗色主题
VBMAN.Toast.Theme(Dark).Show "夜间模式提示"

' 亮色主题(默认)
VBMAN.Toast.Theme(Light).Show "普通提示"

InstIndex

手动设置堆叠索引(仅支持非居中位置)。

vb
Public Function InstIndex(ByVal i As Long) As cToast

说明:

  • 居中位置(Center、LeftCenter、RightCenter)不支持堆叠
  • 如果不调用此方法,系统会自动管理堆叠顺序

示例:

vb
' 指定堆叠在第2个位置
VBMAN.Toast.Pos(RightTop).InstIndex(1).Show "第一条"
VBMAN.Toast.Pos(RightTop).InstIndex(2).Show "第二条"

Tag

设置 Toast 的标签名,用于后续管理。

vb
Public Function Tag(ByVal Name As String) As cToast

说明:

  • 如果不设置标签,系统会自动生成随机标签
  • 相同标签的 Toast 不会重复创建

示例:

vb
' 设置标签以便后续关闭
VBMAN.Toast.Tag("upload_status").Show "正在上传..."

' 关闭指定标签的 Toast
VBMAN.Toast.CloseMe "upload_status"

Show

显示 Toast 通知,链式调用的终点。

vb
Public Function Show(ByVal Content As String, Optional ByVal Delay As Long = 3000, Optional ByVal Title As String) As cToast

参数:

  • Content - 消息内容
  • Delay - 显示时长(毫秒,默认3000)
  • Title - 消息标题(可选,非居中位置默认显示"提示")

示例:

vb
' 简单消息
VBMAN.Toast.Show "操作成功"

' 带标题和时长
VBMAN.Toast.Show "文件保存完成", 5000, "成功"

' 完整链式调用
VBMAN.Toast _
    .Pos(RightTop) _
    .State(Success) _
    .Theme(Light) _
    .Tag("save_result") _
    .Show "文件保存成功!", 3000, "完成"

管理方法

CloseMe

关闭指定标签的 Toast。

vb
Public Function CloseMe(ByVal Name As String) As Boolean

返回值: 是否成功关闭

示例:

vb
' 关闭指定标签的 Toast
If VBMAN.Toast.CloseMe("upload_status") Then
    Debug.Print "已关闭"
End If

CloseAll

关闭所有 Toast。

vb
Public Function CloseAll() As Boolean

示例:

vb
' 关闭所有 Toast
VBMAN.Toast.CloseAll

' 在窗体卸载时调用
Private Sub Form_Unload(Cancel As Integer)
    VBMAN.Toast.CloseAll
End Sub

Exists

检查指定标签的 Toast 是否存在。

vb
Public Function Exists(ByVal Name As String) As Boolean

示例:

vb
' 检查是否存在
If VBMAN.Toast.Exists("upload_status") Then
    Debug.Print "上传状态提示正在显示"
End If

统计属性

Count

获取当前显示的 Toast 总数。

vb
Public Property Get Count() As Long

示例:

vb
Debug.Print "当前有 " & VBMAN.Toast.Count & " 个 Toast 在显示"

ActiveKeys

获取所有活动 Toast 的标签集合。

vb
Public Property Get ActiveKeys() As Collection

示例:

vb
Dim keys As Collection
Set keys = VBMAN.Toast.ActiveKeys

Dim key As Variant
For Each key In keys
    Debug.Print "活动 Toast: " & key
Next key

事件

OnToastCountChange

Toast 数量变化时触发。

vb
Public Event OnToastCountChange(ByVal TagName As String, ByVal IsDelete As Boolean, ByVal CurrentCount As Long)

参数:

  • TagName - 变化的 Toast 标签
  • IsDelete - True=删除, False=新增
  • CurrentCount - 当前总数

OnCloseAll

所有 Toast 被关闭时触发。

vb
Public Event OnCloseAll(ByVal closedCount As Long)

参数:

  • closedCount - 被关闭的 Toast 数量

综合示例

示例1: 不同位置的提示

vb
Private Sub ShowMultiPos()
    ' 右上角 - 成功提示
    VBMAN.Toast.Pos(RightTop).State(Success).Show "保存成功", 2000
    
    ' 左上角 - 信息提示
    VBMAN.Toast.Pos(LeftTop).State(Info).Show "新消息", 3000
    
    ' 右下角 - 警告提示
    VBMAN.Toast.Pos(RightBottom).State(Warning).Show "磁盘空间不足", 5000
    
    ' 中央 - 错误提示(居中显示,不堆叠)
    VBMAN.Toast.Pos(Center).State(Danger).Show "操作失败!", 0, "错误"
End Sub

示例2: 上传进度提示

vb
Private Sub UploadFile()
    Dim filePath As String
    filePath = "C:\data.zip"
    
    ' 显示开始上传提示
    VBMAN.Toast _
        .Pos(RightTop) _
        .State(Info) _
        .Tag("upload") _
        .Show "正在上传: " & filePath, 0, "上传中"
    
    ' 模拟上传过程
    Dim i As Integer
    For i = 0 To 100 Step 10
        ' 更新进度...
        DoEvents
        Sleep 200
    Next i
    
    ' 关闭上传提示,显示完成
    VBMAN.Toast.CloseMe "upload"
    VBMAN.Toast _
        .Pos(RightTop) _
        .State(Success) _
        .Show "上传完成!", 3000, "完成"
End Sub

示例3: 批量操作提示

vb
Private Sub BatchProcess()
    Dim i As Integer
    Dim successCount As Integer
    Dim failCount As Integer
    
    ' 显示开始提示
    VBMAN.Toast _
        .Pos(CenterBottom) _
        .State(Info) _
        .Tag("batch") _
        .Show "开始批量处理...", 0
    
    For i = 1 To 100
        If ProcessItem(i) Then
            successCount = successCount + 1
        Else
            failCount = failCount + 1
        End If
        
        ' 每处理25个更新一次提示
        If i Mod 25 = 0 Then
            VBMAN.Toast.CloseMe "batch"
            VBMAN.Toast _
                .Pos(CenterBottom) _
                .State(Info) _
                .Tag("batch") _
                .Show "已处理: " & i & "/100", 0
            DoEvents
        End If
    Next i
    
    ' 关闭进度提示
    VBMAN.Toast.CloseMe "batch"
    
    ' 显示结果
    If failCount = 0 Then
        VBMAN.Toast _
            .Pos(RightTop) _
            .State(Success) _
            .Show "全部处理成功!", 3000
    Else
        VBMAN.Toast _
            .Pos(RightTop) _
            .State(Warning) _
            .Show "成功: " & successCount & ", 失败: " & failCount, 5000
    End If
End Sub

示例4: 自动堆叠效果

vb
Private Sub AutoStackDemo()
    Dim i As Integer
    
    ' 在右上角自动堆叠显示多个消息
    For i = 1 To 5
        VBMAN.Toast _
            .Pos(RightTop) _
            .State(Info) _
            .Show "消息 " & i, 3000 + i * 1000
        
        Sleep 500
    Next i
End Sub

示例5: 服务端使用(避免 MsgBox 阻塞)

vb
Public Sub HandleServerMessage(Data As cJson)
    If Common.IsServer = True Then
        ' 服务端避免使用 MsgBox 阻塞,改用 Toast
        VBMAN.Toast _
            .Pos(RightTop) _
            .State(Info) _
            .Show Data("Content"), 60000, Data("Title")
        Exit Sub
    End If
End Sub

示例6: 暗色主题提示

vb
Private Sub DarkModeToast()
    ' 暗色主题的成功提示
    VBMAN.Toast _
        .Pos(RightBottom) _
        .State(Success) _
        .Theme(Dark) _
        .Show "夜间模式已开启", 2000
    
    ' 暗色主题的警告提示
    VBMAN.Toast _
        .Pos(LeftBottom) _
        .State(Warning) _
        .Theme(Dark) _
        .Show "电池电量低", 5000, "系统"
End Sub

使用建议

  1. 位置选择:

    • 普通通知:右上角(RightTop)
    • 重要消息:中央(Center)
    • 辅助信息:中下方(CenterBottom)
  2. 居中位置限制:

    • Center、LeftCenter、RightCenter 不支持堆叠
    • 同一时间只能显示一个居中 Toast
  3. 标签管理:

    • 需要后续关闭的 Toast 务必设置标签
    • 相同标签的 Toast 不会重复创建
  4. 时长设置:

    • 普通提示:2000-3000ms
    • 重要消息:5000ms 或更长
    • 需要手动关闭:设置为 0
  5. 资源清理:

    • 窗体卸载时调用 CloseAll
    • 避免 Toast 残留导致内存泄漏

注意事项

  • Toast 是非模态的,不会阻塞用户操作
  • 显示时长单位为毫秒(1秒 = 1000毫秒)
  • 支持使用 vbCrLf 换行显示多行内容
  • 居中位置的 Toast 会覆盖显示,不堆叠
  • 在 Windows 服务端可能无法正常显示 UI,建议配合日志使用

VB6及其LOGO版权为微软公司所有