Add Multi-line Bubble Tooltip to ListView Item

zhaozj2021-02-16  51

A class module named: ctooltip, the code is as follows:

Option expedition

Private Declare Sub INITCOMMONCONTROLS LIB "COMCTL32.DLL" ()

'' Windows API FunctionsPrivate 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 LongPrivate Declare Function SendMessage Lib "user32" Alias ​​"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function SendMessageLong Lib "user32" Alias ​​"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Declare Function DestroyWindow Lib " User32 "(Byval Hwnd As Long) As long

'' Windows API constantsprivate const wm_user = & h400Private const cw_usedefault = & h80000000

'' Windows API Typesprivate Type Rect Left As Long Top As Long Right As Long Bottom as Longend Type

'' Tooltip Window ConstantsPrivate Const TTS_NOPREFIX = & H2Private Const TTF_TRANSPARENT = & H100Private Const TTF_CENTERTIP = & H2Private Const TTM_ADDTOOLA = (WM_USER 4) Private Const TTM_ACTIVATE = WM_USER 1Private Const TTM_UPDATETIPTEXTA = (WM_USER 12) Private Const TTM_SETMAXTIPWIDTH = (WM_USER 24) Private const TTM_SETTIPBKCOLOR = (WM_USER 19) Private const TTM_SETTIPTEXTCOLOR = (WM_USER 20) Private const TTM_SETTITLE = (WM_USER 32) Private const TTS_BALLOON = & H40Private const TTS_ALWAYSTIP = & H1Private const TTF_SUBCLASS = & H10Private const TTF_IDISHWND = & H1Private const TTM_SETDELAYTIME = (WM_USER 3 ) Private const ttdt_autopop = 2Private const ttdt_initial = 3Private const tooltips_classa = "Tooltips_Class32"

'' Tooltip Window Typesprivate Type Toolinfo Lsize As Long LFLAGS AS Long Hwnd As Long Lid AS Long LPSTR AS STRING LPARAM AS LONGEND TYPE

Public enum tticondype ttnio = 0 tticonifo = 1 TTICONWARNING = 2 tticonerror = 3END ENUM

Public Enum TTStyleenum Ttstandard TTBalloonend Enum

'Local variable (s) to hold property value (s) Private mvarBackColor As LongPrivate mvarTitle As StringPrivate mvarForeColor As LongPrivate mvarIcon As ttIconTypePrivate mvarCentered As BooleanPrivate mvarStyle As ttStyleEnumPrivate mvarTipText As StringPrivate mvarVisibleTime As LongPrivate mvarDelayTime As Long

'Private dataPrivate m_lTTHwnd As Long' hwnd of the tooltipPrivate m_lParentHwnd As Long 'hwnd of the window the tooltip attached toPrivate ti As TOOLINFOPublic Property Let Style (ByVal vData As ttStyleEnum)' used when assigning a value to the property, on the left side of An assignment. 'syntax: x.style = 5 mvarstyle = vDataEnd Property

Public Property Get Style () AS TTSTYLEENUM 'Used When Retrieving Value of A Property, on the right side of an assocignment.' Syntax: debug.print x.style style = mvarstyleend print

Public property let center (byval vdata as boolean) 'used when assigning a value to the property, on the left side of an associnment.' Syntax: x.cented = 5 mvarcentered = vDataEnd Property

Public property get centered () as boolean 'used When Retrieving value of a property, on the right side of an assocignment.' Syntax: debug.print x.centered centered = mvarCenterEDENDENDFERTY

Public Function Create (ByVal ParentHwnd As Long) As Boolean Dim lWinStyle As Long If m_lTTHwnd <> 0 Then DestroyWindow m_lTTHwnd End If m_lParentHwnd = ParentHwnd lWinStyle = TTS_ALWAYSTIP Or TTS_NOPREFIX '' create baloon style if desired If mvarStyle = TTBalloon Then lWinStyle = lWinStyle Or TTS_BALLOON m_lTTHwnd = CreateWindowEx (0 &, _ TOOLTIPS_CLASSA, _ vbNullString, _ lWinStyle, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ CW_USEDEFAULT, _ 0 &, _ 0 &, _ App.hInstance, _ 0 &) '' now set our tooltip info structure With ti '' if we want it centered, then set that flag If mvarCentered Then .lFlags = TTF_SUBCLASS Or TTF_CENTERTIP Or TTF_IDISHWND Else .lFlags = TTF_SUBCLASS Or TTF_IDISHWND End If '' set the hwnd prop to our parent control's hwnd .hwnd = m_lParentHwnd .lId = m_lparenthwnd '0 .hinstance = app.hinstance '.Lpstr = ALREADY SET' .lpRect = lpRect .lSize = Len (ti) End With '' add the tooltip structure SendMessage m_lTTHwnd, TTM_ADDTOOLA, 0 &, ti''if we want a title or we want an icon If mvarTitle <> VBnullstring or Mvaricon <> TTNOCION THEN SendMessage M_ltthwnd, TTM_SETTITITLE, CLNG (Mvaricon), Byval Mvartitle Endix

IF MvarForeColor <> EMPTY THEN SENDMESSAGE M_LTTHWND, TTM_SETTIPTEXTCOLOR, MVARFORECOLOR, 0 & END IF

If mvarBackColor <> Empty Then SendMessage m_lTTHwnd, TTM_SETTIPBKCOLOR, mvarBackColor, 0 & End If SendMessageLong m_lTTHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, mvarVisibleTime SendMessageLong m_lTTHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, mvarDelayTimeEnd FunctionPublic Property Let Icon (ByVal vData As ttIconType) mvarIcon = vData If m_lTTHwnd <> 0 And mvartitle <> EMPTY AND MVARICON <> TTNOICON TEN DENDMESSAGE M_LTTHWND, TTM_SETTILE, CLNG (Mvaricon), BYVAL MVARTILE End IFEND Property

Public property get icon () as tticondype icon = mvariconend property

Public Property Let Forecolor (Byval VData As Long) MvarForeColor = VDATA IF M_LTTHWND <> 0 Then SendMessage M_ltthwnd, TTM_SETTIPTEXTCOLOR, MVARFORECOLOR, 0 & End IFEnd Property

Public property Get Forecolor () as long forecolor = mvarforeColorend Property

Public Property Let Title (ByVal vData As String) mvarTitle = vData If m_lTTHwnd <> 0 And mvarTitle <> Empty And mvarIcon <> TTNoIcon Then SendMessage m_lTTHwnd, TTM_SETTITLE, CLng (mvarIcon), ByVal mvarTitle End IfEnd Property

Public property get title () as string title = ti.lpstrend property

Public Property Let BackColor (Byval Vdata As Long) MVARBACKCOLOR = VDATA IF M_LTTHWND <> 0 Then SendMessage M_ltthwnd, TTM_SettipBkcolor, MvarbackColor, 0 & End IFEND Property

Public property get backcolor () as long backcolor = mvarbackColorend Property

Public Property Let Tiptext (Byval VData As String) Mvartiptext = VDATA TI.LPSTR = VDATA IF M_LTTHWND <> 0 THEN SENDMESSAGE M_LTTHWND, TTM_UPDATETEXTA, 0 &, TI End IFEND Property

Public property get tiptext () AS string tiptext = mvartiptextend print = mvartiptextendeprivate sub coplass_initialize () initcommontrols mvardelaytime = 500 mvarvisibletime = 5000END SUB

Private sub coplass_terminate () DestroyEnd Sub

Public Sub Destroy () if m_ltthwnd <> 0 Then DestroyWindow M_ltthWnd End Ifend Sub

Public property get visibletime () as long visibletime = mvarvisibletimend property

Public property Let Visibletime (Byval LData As Long) MVARVisibleTime = LDATAEND Property

Public property get delaytime () as long delaytime = mvardlaytimeend property

Public Property Let DelayTime (Byval Ldata As Long) MvardLaytime = LDataEnd Property

A form, a list of a listView control, the code is as follows:

Option expedition

Private Declare Function SendMessage Lib "User32" Alias ​​"SendMessagea" _ (Byval Hwnd As Long, Byval WMSG As Long, Byval WParam As Long, LParam As An) AS LONG

Const LVM_First = & H1000 & const LVM_HITTEST = LVM_FIRST 18

Private Type Pointapi X As Long Y As Longend Type

Private type lvhitteinfo PT As Pointapi Flags As Long IIIM As Long Isubitem as LONGEND TYPE

DIM TT AS CTooltipdim M_LcuriteMindex As Long

Private Sub Form_Load () with listview1.listitems .add text: = "TEST ITEM # 1" .add text: = "Test item # 2" .add text: = "long long test item # 3" end with

Set tt = new ctooltip tt.style = ttballoon tt.icon = TTICIONFOEND SUB

转载请注明原文地址:https://www.9cbs.com/read-23164.html

New Post(0)