VBMAN.Toast - 通知消息对象
概述
VBMAN.Toast 提供了非阻塞的通知消息显示功能,类似于现代操作系统中的 Toast 通知。支持 9种显示方位、4种状态样式、2种主题,适用于需要提示用户但不希望打断操作的场景。
核心特性
- 9种显示方位: 左上、左中、左下、中上、居中、中下、右上、右中、右下
- 链式调用: 支持流畅的链式 API 设计
- 自动堆叠: 非居中位置支持自动堆叠显示
- 状态样式: 信息、成功、警告、错误四种视觉状态
- 主题切换: 支持亮色/暗色主题
- 标签管理: 支持通过标签名控制特定 Toast
- 事件通知: 提供数量变化和全部关闭事件
枚举类型
EnumPos - 显示方位
| 常量 | 值 | 说明 |
|---|---|---|
LeftTop | 10 | 左上角 |
LeftCenter | 12 | 左中(居中,不支持堆叠) |
LeftBottom | 14 | 左下角 |
CenterTop | 20 | 中上方 |
Center | 22 | 正中央(居中,不支持堆叠) |
CenterBottom | 24 | 中下方 |
RightTop | 30 | 右上角 |
RightCenter | 32 | 右中(居中,不支持堆叠) |
RightBottom | 34 | 右下角 |
EnumState - 消息状态
| 常量 | 值 | 说明 |
|---|---|---|
Info | 1 | 信息(蓝色) |
Success | 2 | 成功(绿色) |
Warning | 3 | 警告(黄色) |
Danger | 4 | 错误(红色) |
EnumTheme - 主题
| 常量 | 值 | 说明 |
|---|---|---|
Light | 1 | 亮色主题 |
Dark | 2 | 暗色主题 |
链式调用方法
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 IfCloseAll
关闭所有 Toast。
vb
Public Function CloseAll() As Boolean示例:
vb
' 关闭所有 Toast
VBMAN.Toast.CloseAll
' 在窗体卸载时调用
Private Sub Form_Unload(Cancel As Integer)
VBMAN.Toast.CloseAll
End SubExists
检查指定标签的 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使用建议
位置选择:
- 普通通知:右上角(RightTop)
- 重要消息:中央(Center)
- 辅助信息:中下方(CenterBottom)
居中位置限制:
- Center、LeftCenter、RightCenter 不支持堆叠
- 同一时间只能显示一个居中 Toast
标签管理:
- 需要后续关闭的 Toast 务必设置标签
- 相同标签的 Toast 不会重复创建
时长设置:
- 普通提示:2000-3000ms
- 重要消息:5000ms 或更长
- 需要手动关闭:设置为 0
资源清理:
- 窗体卸载时调用
CloseAll - 避免 Toast 残留导致内存泄漏
- 窗体卸载时调用
注意事项
- Toast 是非模态的,不会阻塞用户操作
- 显示时长单位为毫秒(1秒 = 1000毫秒)
- 支持使用
vbCrLf换行显示多行内容 - 居中位置的 Toast 会覆盖显示,不堆叠
- 在 Windows 服务端可能无法正常显示 UI,建议配合日志使用