VB6 自帶 systray.ocx 做托盤圖標穩定可靠,但缺乏氣泡提示(Balloon Tip)功能。項目已大量引用,不願更換組件,需修改源碼添加該功能。
VB6 安裝目錄 Common\Tools\VB\Unsupprt\Systray\ 或網上搜索「VB6 Systray.ocx source」。
編輯 mSysTray.bas,擴展結構體以包含氣泡提示所需字段(重點:szTip 必須 128 字節,非官方文檔的 64):
Public Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 128 ' 關鍵:必須 128,64 會導致氣泡不顯示
dwState As Long
dwStateMask As Long
szInfo As String * 256 ' 氣泡提示內容
uTimeout As Long ' 顯示時長(ms) 或版本標識
szInfoTitle As String * 64 ' 氣泡標題
dwInfoFlags As Long ' 圖標類型:NIIF_INFO/NIIF_WARNING/NIIF_ERROR
End Type
Public Sub ShowBalloonTip(ByVal Title As String, ByVal Text As String, Optional ByVal IconType As Long = NIIF_INFO)
Dim Tray As NOTIFYICONDATA
If gInTray Then
Tray.cbSize = Len(Tray)
Tray.hWnd = gTrayHwnd
Tray.szInfo = Left$(Text & vbNullChar, 256)
Tray.szInfoTitle = Left$(Title & vbNullChar, 64)
Tray.uFlags = NIF_INFO
Tray.dwInfoFlags = IconType
Tray.uTimeout = 10000 ' 10 秒
Shell_NotifyIcon NIM_MODIFY, Tray
End If
End Sub
Systray1.ShowBalloonTip "標題", "內容", NIIF_INFO。szTip 必須 128 字節,否則 Shell_NotifyIcon 返回成功但氣泡不顯示(VB6 經典坑)。vbNullChar 結尾,防止垃圾字符。uTimeout 在 XP/2000 為顯示毫秒數,Vista+ 為版本標識,建議寫 10000 兼容。regsvr32)。修改底層 OCX 雖費力,但能完美保持項目原有架構不變,是存量項目增強的最佳路徑。