• Welcome to Valhalla Legends Archive.
 

Multiline ToolTipText

Started by Inner, May 22, 2004, 08:24 PM

Previous topic - Next topic

Inner

Ok, the multiline and everything works until i scroll down. It just likes goes backwards or someting, would anyone know the problem?

Lobo

Double posting will not get you any faster help. Show some code.
Look it's a signature.

Inner

#2
I didn't mean to, i didn't know it was moved. =/

Private Sub MakeToolTip(Item As Integer)
   If Item > users.ListItems.Count Or Item = 0 Then Exit Sub
   Set ToolTip = New clsToolTip
   With ToolTip
       
       'Set the handle of the listview
       .HwndParentControl = users.hWnd
       
       'Set the tooltip text, which is stored in the tag of the listview
       .Text = users.ListItems.Item(Item).Tag
       
       'Set the title of the tooltip, leave blank if you don't want it
       .Title = users.ListItems.Item(Item).Text
       
       'Sets the style of the tooltip, Balloon is another option (TTSBalloon)
       .Style = TTSBalloon
       
       'Sets the background color of the tooltip
       .BackColor = &H80000018
       
       'Sets the forecolor of the tooltip
       .ForeColor = vbBlack
       
       'Makes the tooltip with the desired Settings
       Call .Create
   End With
End Sub

Private Sub users_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   Call MakeToolTip(CInt(y / 220))
End Sub

Public Function Create() As Boolean
   
   On Error GoTo CreateError
   
   Dim lpRect As RECT
   Dim lWinStyle As Long
   
   If lngHwnd <> 0 Then DestroyWindow lngHwnd
   
   lWinStyle = TTS_ALWAYSTIP Or TTS_NOPREFIX
   
   'create baloon style if desired
   If Me.Style = TTBalloon Then lWinStyle = lWinStyle Or TTS_BALLOON
   
   'the parent control has to have been set first
   If Me.HwndParentControl <> 0 Then
       lngHwnd = CreateWindowEx(0&, TOOLTIPS_CLASSA, vbNullString, lWinStyle, _
       CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, _
       Me.HwndParentControl, 0&, App.hInstance, 0&)
       
       'make our tooltip window a "topmost" window
       SetWindowPos lngHwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
       
       'get the rect of the parent control
       GetClientRect Me.HwndParentControl, lpRect
       
       'now set our tooltip info structure
       With mtypToolInfo
           'if we want it centered, then set that flag
           If Me.Centered = True Then
               .lFlags = TTF_SUBCLASS Or TTF_CENTERTIP
           Else
               .lFlags = TTF_SUBCLASS
           End If
           
           'set the hwnd prop to our parent control's hwnd
           .lHwnd = Me.HwndParentControl
           .lId = 0
           .hInstance = App.hInstance
           .lpStr = Me.Text
           .lpRect = lpRect
       End With
       
       'add the tooltip structure
       SendMessage lngHwnd, TTM_ADDTOOLA, 0&, mtypToolInfo
       
       'if we want a title or we want an icon
       If Title <> vbNullString Then
           SendMessage lngHwnd, TTM_SETTITLE, 0, ByVal Title
       End If
       
       'Goes all black if you set it to the standard colours
       If ForeColor <> FORE_COLOUR Then
           SendMessage lngHwnd, TTM_SETTIPTEXTCOLOR, ForeColor, 0&     'Set the ForeColor
       End If
       If BackColor <> BACK_COLOUR Then
           SendMessage lngHwnd, TTM_SETTIPBKCOLOR, BackColor, 0&       'Set the BackColor
       End If
       If MultiLine = True Then
           SendMessage lngHwnd, TTM_SETMAXTIPWIDTH, 0&, 0              'Set to multiline
       End If
   End If
   
   Create = True  'All went well!
CreateExit:
   On Error Resume Next
   Exit Function
CreateError:
   Create = False 'Failed!
   Resume CreateExit
End Function


Edit (Grok): added code tags.

hismajesty


UserLoser.

Should do something like...:

Dim lvwHitTestInfo As LVHITTESTINFO
Dim dwItemIndex As Long
   If (lvwUsers.ListItems.Count = 0) Then Exit Sub
   With lvwHitTestInfo
       .pt.X = (X / Screen.TwipsPerPixelX)
       .pt.Y = (Y / Screen.TwipsPerPixelY)
   End With
   dwItemIndex = SendMessage(lvwUsers.hWnd, LVM_HITTEST, 0&, lvwHitTestInfo) + 1

Under your MouseMove

Then...:

Call MakeToolTip(dwItemIndex)


But make sure to destroy the old window (if it exists) before creating a new one

Inner

Thankyou UserLoser, i got it working fully, and thanks to everyone else for the support.

Grok

Quote from: Inner on May 23, 2004, 04:28 PM
Thankyou UserLoser, i got it working fully, and thanks to everyone else for the support.

EXPLAIN!  How did yo uget it working fully?  Maybe someone can learn from what you did!

Help make this forum better by posting the answer if someone else didn't post it already.

BaDDBLooD

yes.. i need to know how to do this ;[
There are only two kinds of people who are really fascinating: people who know absolutely everything, and people who know absolutely nothing.

UserLoser.

Quote from: BaDDBLooD on May 26, 2004, 05:11 PM
yes.. i need to know how to do this ;[

Looks like all the code posted above will allow you to do this

Flame

#9
There's a few tutorials on PSCode which show how to actually make the tooltip which are helpful.  As far as applying the tooltip to a listview, the code UserLoser posted shows exactly how it is done, except for the LVHITTESTINFO, which can be found in This document which I found off of CodeGuru not long ago.  The article basically shows every step to making these tooltips.

Grok

#10
My point was that after posting a problem and eventually arriving at the solution, that solution should be obviously posted, as in:

QuoteThankyou UserLoser, i got it working fully, and thanks to everyone else for the support.  WHAT WORKED WAS .... blah blah blah

This affords everyone who searches the forums in the future, looking to solve the same problem, they will find the answer clearly pointed out to them.