ShowTip Command1.hWnd, "這只是彈出的一個訊息"
Option Explicit
Public Declare Sub InitCommonControls Lib "comctl32" ()
Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Public Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Public Const WM_USER = &H400
'TooltipInfo Flags(還有很多,一般只需要這兩個函式就足夠了)
Public Const TTF_CENTERTIP = &H2 '居中
Public Const TTF_SUBCLASS = &H10 '初始
'ToolTip訊息(透過Sendmessage API進行呼叫)
Public Const TTM_ADDTOOLA = (WM_USER + 4) '新增Tooltip
Public Const TTM_SETMAXTIPWIDTH = (WM_USER + 24) '設定最大寬度
Public Const TTM_SETTIPBKCOLOR = (WM_USER + 19) '設定背景顏色
Public Const TTM_SETTIPTEXTCOLOR = (WM_USER + 20) '設定文字顏色
Public Const TTM_SETTITLE = (WM_USER + 32) '設定標題
Public Const TTM_SETDELAYTIME = (WM_USER + 3) '設定Tooltip時間
Public Const TTDT_AUTOPOP = 2
Public Const TTDT_INITIAL = 3
'Tooltip引數
Public Const TTS_ALWAYSTIP = &H1 '永久
Public Const TTS_BALLOON = &H40 '氣球(如果不要則是普通矩形視窗)
'Tooltip圖示樣式
Public Const TTI_NONE = 0 '無圖示
Public Const TTI_INFO = 1 '資訊
Public Const TTI_WARNING = 2 '警告
Public Const TTI_ERROR = 3 '錯誤
'型別
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'Tooltip型別,VB自帶的API瀏覽器沒有,我是從Commctl.h中提取出來的
Public Type TOOLINFO
cbSize As Long
uFlags As Long
hWnd As Long
uid As Long
RECT As RECT
hinst As Long
lpszText As String
lParam As Long
End Type
'以下是主要實現程式碼,本來想封裝在類中,可想到並不是所有人都看得懂,乾脆就放在模組中做成函式,
'這樣好理解點,由於實現各種各樣的ToolTip樣式很多,這裡我只寫出了平時經常用到的方法:
Public TiphWnd As Long 'ToolTip控制程式碼
Public Sub ShowTip(ByVal hWnd As Long, ByVal TipMessage As String)
Dim lpRect As RECT, lpToolInfo As TOOLINFO, TipMsg As String
'在建立tooltips_class32時必須呼叫初始化。(這裡我覺得必須注意,必然加上這個API,開始我沒有新增上時,
'在VBIDE環境中除錯的時候一切正常,可是編譯以後老是出現不了ToolTip,這裡我鬱悶了很久,最後到網上找了關於這方面的資料,
'才知道在建立ToolTip時必須呼叫Comctl32.dll中的InitCommonControl API函式進行初始化。鬱悶,到現在才除錯透過)
InitCommonControls
'返回視窗的控制程式碼並建立ToolTip視窗
TiphWnd = CreateWindowEx(0, "tooltips_class32", vbNullString, TTS_ALWAYSTIP Or TTS_BALLOON, 0, 0, 0, 0, 0, 0, 0, ByVal 0&)
'獲取視窗矩形
GetClientRect hWnd, lpRect
With lpToolInfo
.cbSize = Len(lpToolInfo) '大小
.uFlags = TTF_SUBCLASS 'Tooltip樣式
.hWnd = hWnd '控制程式碼
.hinst = App.hInstance '控制程式碼例項
.lpszText = TipMessage 'ToolTip文字
.uid = 0 'uid為空
.RECT = lpRect '視窗矩形
End With
SendMessage TiphWnd, TTM_ADDTOOLA, 0, lpToolInfo '新增Tooltip
'顏色可以自己設定(我用了vbBlue和vbWhite)
SendMessage TiphWnd, TTM_SETTIPTEXTCOLOR, vbBlue, ByVal 0& '前景(字型)顏色
SendMessage TiphWnd, TTM_SETTIPBKCOLOR, vbWhite, ByVal 0& '背景顏色
SendMessage TiphWnd, TTM_SETTITLE, TTI_WARNING, ByVal "彈出訊息了" '標題
'設定顯示時間
SendMessage TiphWnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, ByVal 5000& '設定ToolTip顯示時間
SendMessage TiphWnd, TTM_SETDELAYTIME, TTDT_INITIAL, ByVal 500& '設定顯示ToolTip時隔時間
End Sub
Public Sub DeWindow() '最後不用的時候別忘了銷燬視窗
DestroyWindow TiphWnd
End Sub
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/778857/viewspace-980393/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jqueryeasyui彈出訊息框(轉載)jQueryUI
- app直播原始碼,收到訊息時出現彈窗APP原始碼
- 訊息佇列批次收發訊息,請避開這 5 個坑!佇列
- 你只是這個程式裡的Bug
- Pusher 結合 Dcat admin 彈出訊息總是多條?
- 訊息提示彈層滾動JQUERRY
- iPhone14:一個好訊息,一個壞訊息!果粉:習慣了“擠牙膏”iPhone
- 網易來聊聊子彈簡訊的訊息漫遊技術
- Jquery實現自定義訊息彈窗jQuery
- 我第一個做好的彈出選單
- 如何設計一個訊息佇列?佇列
- 這有一份網路相關的訊息,請查收
- 用 Go 寫一個簡單訊息佇列(一):定義訊息和基礎工具Go佇列
- 如何設計一個牛逼的訊息佇列?佇列
- 設計一個百萬級的訊息推送系統
- RabbitMQ不講武德,發個訊息也這麼多花招MQ
- 深入淺出Android訊息系統之一Android
- Redis 釋出訂閱模式:原理拆解並實現一個訊息佇列Redis模式佇列
- 封裝一個的toast彈出框(vue專案)封裝ASTVue
- 使用Go語言實現一個超級mini的訊息佇列,我是這樣做的Go佇列
- “系統”只是一個概念、一個想法 - Checkland
- Redis的訊息釋出和訂閱Redis
- 如何設計一個簡單的訊息中介軟體
- 點選按鈕彈出一個居中div
- 彈出一個全屏灰黑色透明遮罩效果遮罩
- MQTT 5.0 訊息釋出流程MQQT
- 好訊息,fish 3.0.0 釋出
- 訊息佇列(一)佇列
- 自己實現一個Electron跨程式訊息元件元件
- Protocol Buffers學習(1):定義一個訊息Protocol
- 訊息佇列系列一:訊息佇列應用佇列
- 如何使用PHP彈出警告訊息框(示例詳解)PHP
- 編寫了一個輔助Flutter彈出Toast的PackageFlutterASTPackage
- 寫了一個簡單好用的彈出層外掛
- 奉獻一個實用的JS動畫彈出層效果JS動畫
- 一個用訊息佇列 的人,不知道為啥用 MQ,這就有點尷尬佇列MQ
- Android 打造編譯時註解解析框架 這只是一個開始Android編譯框架
- 訊息推送一個好功能,90%的開發者都不知道。