⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clstooltip.cls

📁 读取SQL数据库后
💻 CLS
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsToolTip"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False

' Create by Vincent Lavoie
' 2005
' You can you this code freely where you want for what you want
'
' This code set a balloon tool tip on every type of control with or without window handle
' (I cannot garanty that it will work with all the existing control, but it works with
' all I tested)
'
' Please vote if you like it
' Adapt the this code for your needs

Option Explicit


Private 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
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (ByRef iccInit As ICCEX) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long


Private Type PointAPI
   X As Long
   Y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type


Private Type TOOLINFO
    cbSize As Long
    dwFlags As Long
    hWnd As Long
    dwID As Long
    rtRect As RECT
    hInst As Long
    lpszText As Long
    lParam  As Long
End Type

Private Type ICCEX
    dwSize As Long
    dwICC As Long
End Type

Public Enum EditTipIcon
    etiNone = 0
    etiInfo = 1
    etiWarning = 2
    etiError = 3
End Enum

Private Type EDITBALLOONTIP
    cbStruct As Long
    pszTitle As Long
    pszText As Long
    ttiIcon As Long
End Type

Public Enum TOOLSTYLE
    szClassic = 1
    szBalloon = 64
End Enum


' Set Window Pos Flags
Private Const HWND_TOPMOST As Long = -1
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE As Long = &H1
Private Const HS_DIAGCROSS = 5

' Init Common Controls
Private Const ICC_WIN95_CLASSES As Long = &HFF

' Misc
Private Const CCM_FIRST As Long = &H2000
Private Const CCM_SETWINDOWTHEME As Long = (CCM_FIRST + &HB)
Private Const WM_USER As Long = &H400
Private Const CW_USEDEFAULT As Long = &H80000000
Private Const ECM_FIRST As Long = &H1500

' Edit Box Tip
Private Const EM_SHOWBALLOONTIP = ECM_FIRST + 3

' Window Styles
Private Const WS_POPUP As Long = &H80000000
Private Const WS_EX_TOPMOST As Long = &H8&


' ToolTips Class
Private Const TOOLTIPS_CLASSA As String = "tooltips_class32"

' ToolTips Flags
Private Const TTF_ABSOLUTE As Long = &H80
Private Const TTF_CENTERTIP As Long = &H2
Private Const TTF_DI_SETITEM As Long = &H8000
Private Const TTF_IDISHWND As Long = &H1
Private Const TTF_RTLREADING As Long = &H4
Private Const TTF_SUBCLASS As Long = &H10
Private Const TTF_TRACK As Long = &H20
Private Const TTF_TRANSPARENT As Long = &H100

' ToolTips Icon
Private Const TTI_ERROR As Long = 3
Private Const TTI_INFO As Long = 1
Private Const TTI_NONE As Long = 0
Private Const TTI_WARNING As Long = 2

' ToolTips Message
Private Const TTM_ACTIVATE As Long = (WM_USER + 1)
Private Const TTM_ADDTOOL As Long = (WM_USER + 4)
Private Const TTM_ADJUSTRECT As Long = (WM_USER + 31)
Private Const TTM_DELTOOL As Long = (WM_USER + 5)
Private Const TTM_ENUMTOOLS As Long = (WM_USER + 14)
Private Const TTM_GETBUBBLESIZE As Long = (WM_USER + 30)
Private Const TTM_GETCURRENTTOOL As Long = (WM_USER + 15)
Private Const TTM_GETDELAYTIME As Long = (WM_USER + 21)
Private Const TTM_GETMARGIN As Long = (WM_USER + 27)
Private Const TTM_GETMAXTIPWIDTH As Long = (WM_USER + 25)
Private Const TTM_GETTEXT As Long = (WM_USER + 11)
Private Const TTM_GETTIPBKCOLOR As Long = (WM_USER + 22)
Private Const TTM_GETTIPTEXTCOLOR As Long = (WM_USER + 23)
Private Const TTM_GETTOOLCOUNT As Long = (WM_USER + 13)
Private Const TTM_GETTOOLINFO As Long = (WM_USER + 8)
Private Const TTM_HITTEST As Long = (WM_USER + 10)
Private Const TTM_NEWTOOLRECT As Long = (WM_USER + 6)
Private Const TTM_POP As Long = (WM_USER + 28)
Private Const TTM_POPUP As Long = (WM_USER + 34)
Private Const TTM_RELAYEVENT As Long = (WM_USER + 7)
Private Const TTM_SETDELAYTIME As Long = (WM_USER + 3)
Private Const TTM_SETMARGIN As Long = (WM_USER + 26)
Private Const TTM_SETMAXTIPWIDTH As Long = (WM_USER + 24)
Private Const TTM_SETTIPBKCOLOR As Long = (WM_USER + 19)
Private Const TTM_SETTIPTEXTCOLOR As Long = (WM_USER + 20)
Private Const TTM_SETTITLE As Long = (WM_USER + 32)
Private Const TTM_SETTOOLINFO As Long = (WM_USER + 9)
Private Const TTM_SETWINDOWTHEME As Long = CCM_SETWINDOWTHEME
Private Const TTM_TRACKACTIVATE As Long = (WM_USER + 17)
Private Const TTM_TRACKPOSITION As Long = (WM_USER + 18)
Private Const TTM_UPDATE As Long = (WM_USER + 29)
Private Const TTM_UPDATETIPTEXT As Long = (WM_USER + 12)
Private Const TTM_WINDOWFROMPOINT As Long = (WM_USER + 16)

' ToolTips Notification
Private Const TTN_FIRST As Long = (-520)
Private Const TTN_GETDISPINFO As Long = (TTN_FIRST - 0)
Private Const TTN_LAST As Long = (-549)
Private Const TTN_LINKCLICK As Long = (TTN_FIRST - 3)
Private Const TTN_NEEDTEXT As Long = TTN_GETDISPINFO
Private Const TTN_POP As Long = (TTN_FIRST - 2)
Private Const TTN_SHOW As Long = (TTN_FIRST - 1)

' ToolTips Creation Flags
Private Const TTS_ALWAYSTIP As Long = &H1
Private Const TTS_BALLOON As Long = &H40
Private Const TTS_NOANIMATE As Long = &H10
Private Const TTS_NOFADE As Long = &H20
Private Const TTS_NOPREFIX As Long = &H2

Private Const TTDT_AUTOPOP = 2
Private Const TTDT_INITIAL = 3

Private m_hwndTip As Long
Private m_hwndObject As Long
Private m_blnCentered As Boolean
Private m_strText As String
Private m_strTitle As String
Private m_strForeColor As String
Private m_strBackColor As String
Private m_varEditTipIcon As EditTipIcon
Private m_intDelay As Integer
Private m_intKillAfter As Integer


Public Sub CreateBalloon(Object As Object, hwndObject As Long, szText As String, _
    Style As TOOLSTYLE, szCentered As Boolean, Optional szTitle As String, _
    Optional mvarIcon As EditTipIcon, Optional BackColor As String, _
    Optional ForeColor As String)
    
    m_blnCentered = szCentered
    m_strText = szText
    m_strTitle = szTitle
    m_strBackColor = BackColor
    m_strForeColor = ForeColor
    m_varEditTipIcon = mvarIcon
    m_hwndObject = hwndObject
    

    
    CreateWndTips Object.Parent.hWnd, Style
    
    Dim tiInfo As TOOLINFO
    
    If hwndObject <> 0 Then
        SetToolTip tiInfo, Object
    End If
    
End Sub

Public Sub SetHandle(Object As Object)
    If m_hwndObject <> 0 Then Exit Sub
    Debug.Print "SetHandle Handle:" & m_hwndTip

    
    Dim myCurrCurPos As PointAPI
    GetCursorPos myCurrCurPos
    m_hwndObject = WindowFromPoint(myCurrCurPos.X, myCurrCurPos.Y)
    
    Dim tiInfo As TOOLINFO
    
    SetToolTip tiInfo, Object

End Sub

Private Sub CreateWndTips(hWndParent As Long, Style As Long)
    
    Dim dwFlags As Long
    Dim ICEx As ICCEX
    
    dwFlags = TTS_NOPREFIX Or TTS_ALWAYSTIP Or Style
    
    With ICEx
        .dwSize = Len(ICEx)
        .dwICC = ICC_WIN95_CLASSES
    End With
    
    InitCommonControlsEx ICEx
    
    m_hwndTip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASSA, "", WS_POPUP Or dwFlags, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWndParent, 0, App.hInstance, ByVal 0&)
    
    If m_hwndTip = 0 Then Exit Sub
    
    SetWindowPos m_hwndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    
End Sub



Private Sub SetToolTip(ByRef tiInfo As TOOLINFO, Object As Object)
   
    With tiInfo
        If m_blnCentered = True Then
            .dwFlags = TTF_SUBCLASS Or TTF_CENTERTIP Or TTF_TRANSPARENT
        Else
            .dwFlags = TTF_SUBCLASS Or TTF_TRANSPARENT
        End If
        
        .hWnd = m_hwndObject
        .lpszText = StrPtr(StrConv(m_strText, vbFromUnicode))
        .hInst = App.hInstance
        
        If m_hwndObject = Object.Parent.hWnd Then
            .rtRect.Left = Object.Left / Screen.TwipsPerPixelY
            .rtRect.Top = Object.Top / Screen.TwipsPerPixelX
            .rtRect.Bottom = .rtRect.Top + (Object.Height / Screen.TwipsPerPixelY)
            .rtRect.Right = .rtRect.Left + (Object.Width / Screen.TwipsPerPixelX)
        Else
            GetClientRect m_hwndObject, .rtRect
        End If
        
        .cbSize = Len(tiInfo)
    End With
    SendMessage m_hwndTip, TTM_ADDTOOL, 0&, tiInfo

    If m_strTitle <> "" Then
        SendMessage m_hwndTip, TTM_SETTITLE, CLng(m_varEditTipIcon), ByVal m_strTitle
    End If
    
    If m_strBackColor <> "" Then
        SendMessage m_hwndTip, TTM_SETTIPBKCOLOR, m_strBackColor, 0&
    End If
    
    If m_strForeColor <> "" Then
        SendMessage m_hwndTip, TTM_SETTIPTEXTCOLOR, m_strForeColor, 0&
    End If
    
    If m_intKillAfter <> -1 Then
        SendMessageLong m_hwndTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, m_intKillAfter
    End If
    If m_intDelay <> -1 Then
       SendMessageLong m_hwndTip, TTM_SETDELAYTIME, TTDT_INITIAL, m_intDelay
    End If

End Sub

Private Sub Class_Initialize()
    m_intDelay = -1
    m_intKillAfter = -1
End Sub

Private Sub Class_Terminate()
' if you remove this comments, you will have to declare all you class globally
' anyway, windows attach the tooltip window to the control, when the control is deleted,
' the tooltip window is deleted too
'    If m_hwndTip <> 0 Then
'        DestroyWindow m_hwndTip
'    End If
End Sub

Public Property Get VisibleTime() As Integer
   VisibleTime = m_intKillAfter
End Property

Public Property Let VisibleTime(ByVal lData As Integer)
   m_intKillAfter = lData
End Property

Public Property Get DelayTime() As Integer
   DelayTime = m_intDelay
End Property

Public Property Let DelayTime(ByVal lData As Integer)
   m_intDelay = lData
End Property

⌨️ 快捷键说明

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