home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / VB_IDE_Ful177675822004.psc / cToolTip.cls < prev    next >
Text File  |  2004-08-02  |  12KB  |  317 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cToolTip"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = False
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. 'Custom Tooltip Class
  17. '''''''''''''''''''''
  18. 'This class was inspired by code by Eidos (found at PSC some time ago) and others.
  19. '
  20. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  21. 'Jun29 2003   UMG
  22. '
  23. 'Added tooltip for hWnd-less controls.
  24. '
  25. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  26. 'Jan02 2003   UMG
  27. '
  28. 'Three new options have been added - display tooltip always / only if parent form is active / never
  29. 'see TTStyle.
  30. '
  31. 'Added missing Style private property variable.
  32. 'Rearranged code a little.
  33. '
  34. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  35.  
  36. Private Declare Sub InitCommonControls Lib "comctl32" ()
  37.  
  38. 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
  39. Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
  40. Private TThWnd                      As Long 'Tooltip window handle
  41. Attribute TThWnd.VB_VarDescription = "Tooltip window handle."
  42. Private Const ToolTipWindowClassName As String = "Tooltips_Class32"
  43. Attribute ToolTipWindowClassName.VB_VarDescription = "Window Style."
  44. Private Const CW_USEDEFAULT         As Long = &H80000000
  45. Attribute CW_USEDEFAULT.VB_VarDescription = "Win API constant."
  46. Private Const TTS_STANDARD          As Long = 0
  47. Attribute TTS_STANDARD.VB_VarDescription = "Win API constant."
  48. Private Const TTS_BALLOON           As Long = &H40
  49. Private Const TTS_ALWAYSTIP         As Long = 1 'display even if parent window is inactive
  50. Attribute TTS_ALWAYSTIP.VB_VarDescription = "Win API constant."
  51. Private Const TTS_NOPREFIX          As Long = 2 'does not remove "&" from text
  52. Attribute TTS_NOPREFIX.VB_VarDescription = "Win API constant."
  53. Private Const TTDT_AUTOPOP          As Long = 2
  54. Private Const TTDT_INITIAL          As Long = 3
  55.  
  56. Public Enum TTStyle
  57.     TTStandardIfActive = TTS_STANDARD                   'suppress if parent form is not active
  58.     TTBalloonIfActive = TTS_BALLOON                     'suppress if parent form is not active
  59.     TTStandardAlways = TTS_STANDARD Or TTS_ALWAYSTIP    'display even if parent form is not active
  60.     TTBalloonAlways = TTS_BALLOON Or TTS_ALWAYSTIP      'display even if parent form is not active
  61.     TTNone = -1                                         'kill tooltip (this is simply treated as illegal)
  62. End Enum
  63. #If False Then
  64. Private TTStandardIfActive, TTBalloonIfActive, TTStandardAlways, TTBalloonAlways, TTNone 'to preserve the case
  65. #End If
  66. Public Enum TTIcon
  67.     TTIconNone = 0
  68.     TTIconInfo = 1         'i in white balloon
  69.     TTIconWarning = 2      '! in yellow triangle
  70.     TTIconError = 3        'x in red circle
  71.     'all have a light gray shadow so be careful when selecting the ToolTip BackColor
  72. End Enum
  73. #If False Then 'preserve capitalization
  74. Private TTIconNone, TTIconInfo, TTIconWarning, TTIconError
  75. #End If
  76.  
  77. 'my properties
  78. Private myStyle                     As TTStyle
  79. Private myIcon                      As TTIcon
  80. Private myForeColor                 As Long
  81. Private myBackColor                 As Long
  82. Private myTitle                     As String 'has the current title
  83. Attribute myTitle.VB_VarDescription = "Private Property Variable."
  84. Private myHoverTime                 As Long 'time im millisecs (-1 = use default)
  85. Private myPopupTime                 As Long 'time im millisecs (-1 = use default)
  86. Private myInitialText               As Variant 'has the initial text
  87. Private myInitialTitle              As Variant 'has the initial title
  88.  
  89. Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
  90.  
  91. 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
  92. Private Const WM_USER               As Long = &H400
  93. Private Const TTM_SETDELAYTIME      As Long = WM_USER + 3
  94. Private Const TTM_ADDTOOL           As Long = WM_USER + 4
  95. Private Const TTM_SETTIPBKCOLOR     As Long = WM_USER + 19
  96. Private Const TTM_SETTIPTEXTCOLOR   As Long = WM_USER + 20
  97. Private Const TTM_SETTITLE          As Long = WM_USER + 32
  98.  
  99. Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECTANGLE) As Long
  100. Private Type RECTANGLE
  101.     Left        As Long
  102.     Top         As Long
  103.     Right       As Long
  104.     Bottom      As Long
  105. End Type
  106.  
  107. Private Type ToolInfo
  108.     ttSize      As Long
  109.     myFlags     As Long
  110.     ttParhWnd   As Long
  111.     ttId        As Long
  112.     ParentRect  As RECTANGLE
  113.     hInstance   As Long
  114.     myText      As String
  115.     lParam      As Long
  116. End Type
  117. Private ToolInfo                    As ToolInfo
  118. Attribute ToolInfo.VB_VarDescription = "Tool information structure."
  119.  
  120. 'tool property flag bits                             meaning
  121. Private Const TTF_CENTERTIP         As Long = 2     'center tool on parent
  122. Attribute TTF_CENTERTIP.VB_VarDescription = "Win API constant."
  123. Private Const TTF_SUBCLASS          As Long = &H10  'use implicit subclassing
  124. Attribute TTF_SUBCLASS.VB_VarDescription = "Win API constant."
  125.  
  126. Public Property Get BackCol() As Long
  127. Attribute BackCol.VB_Description = "Returns the current tooltip backcolor."
  128.  
  129.   'this returns the current tooltip backcolor
  130.  
  131.     BackCol = myBackColor
  132.  
  133. End Property
  134.  
  135. Public Property Get Centered() As Boolean
  136. Attribute Centered.VB_Description = "Returns the current tooltip alignment."
  137.  
  138.   'this returns the current tooltip alignment
  139.  
  140.     Centered = CBool(ToolInfo.myFlags And TTF_CENTERTIP)
  141.  
  142. End Property
  143.  
  144. Private Sub Class_Initialize()
  145.  
  146.     InitCommonControls 'doesn't matter that this is called for every class instance
  147.     myStyle = TTNone
  148.  
  149. End Sub
  150.  
  151. Private Sub Class_Terminate()
  152.  
  153.   'kill tooltip window if one exists
  154.  
  155.     If TThWnd Then
  156.         DestroyWindow TThWnd
  157.         TThWnd = 0
  158.     End If
  159.     myStyle = TTNone
  160.  
  161. End Sub
  162.  
  163. Public Function Create(Parent As Control, _
  164.                        Text As String, _
  165.                        Optional ByVal Style As TTStyle = TTBalloonAlways, _
  166.                        Optional ByVal Centered As Boolean = False, _
  167.                        Optional ByVal Icon As TTIcon = TTIconNone, _
  168.                        Optional Title As String = "", _
  169.                        Optional ByVal ForeColor As Long = vbButtonText, _
  170.                        Optional ByVal BackColor As Long = vbInfoBackground, _
  171.                        Optional ByVal HoverTime As Long = -1, _
  172.                        Optional ByVal PopupTime As Long = -1) As Long
  173.  
  174.   'Create the tooltip window for parent control that has an hWnd
  175.   'This can now also create custom tooltips for hWnd-less controls,
  176.   'just supply a fake hWnd (normally the containing form.hWnd) for windowless controls
  177.  
  178.     Class_Terminate 'kill tooltip window if one exists
  179.     With ToolInfo
  180.         On Error Resume Next
  181.             .ttParhWnd = Parent.hWnd 'the control's hWnd
  182.             If Err Then 'has no hWnd
  183.                 Err.Clear
  184.                 .ttParhWnd = Parent.Parent.hWnd
  185.             End If
  186.             If (Err = 0) And _
  187.                 (Style = TTBalloonAlways Or Style = TTStandardAlways Or Style = TTBalloonIfActive Or Style = TTStandardIfActive) And _
  188.                 (Icon = TTIconError Or Icon = TTIconInfo Or Icon = TTIconNone Or Icon = TTIconWarning) Then
  189.                 'the tooltip parent control has an hWnd and the params are acceptable
  190.                 .ttSize = Len(ToolInfo)
  191.                 .myFlags = TTF_SUBCLASS Or IIf(Centered, TTF_CENTERTIP, 0&)
  192.                 GetClientRect .ttParhWnd, .ParentRect
  193.                 .hInstance = App.hInstance
  194.                 myTitle = Title
  195.                 If myInitialTitle = Empty Then
  196.                     myInitialTitle = myTitle
  197.                 End If
  198.                 .myText = Replace$(Text, "|", vbCrLf) 'the vertical bar is used as line break character
  199.                 If Len(myTitle) = 0 Then
  200.                     .myText = Replace$(.myText, vbCrLf, " ")
  201.                 End If
  202.                 If myInitialText = Empty Then
  203.                     myInitialText = .myText
  204.                 End If
  205.                 If ForeColor < 0 Then
  206.                     ForeColor = GetSysColor(ForeColor And &H7FFFFFFF)
  207.                 End If
  208.                 If BackColor < 0 Then
  209.                     BackColor = GetSysColor(BackColor And &H7FFFFFFF)
  210.                 End If
  211.                 If ForeColor = BackColor Then
  212.                     ForeColor = vbButtonText
  213.                     BackColor = vbInfoBackground
  214.                 End If
  215.                 myForeColor = ForeColor
  216.                 myBackColor = BackColor
  217.                 myStyle = Style
  218.                 myIcon = Icon
  219.                 myHoverTime = HoverTime
  220.                 myPopupTime = PopupTime
  221.                 'create tooltip window and set it's properties
  222.                 TThWnd = CreateWindowEx(0&, ToolTipWindowClassName, vbNullString, TTS_NOPREFIX Or Style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, .ttParhWnd, 0&, .hInstance, 0&)
  223.                 SetWindowPos TThWnd, TOPMOST, 0&, 0&, 0&, 0&, SWP_FLAGS
  224.                 SendMessage TThWnd, TTM_ADDTOOL, 0&, ToolInfo
  225.                 SendMessage TThWnd, TTM_SETTITLE, Icon, ByVal myTitle
  226.                 SendMessage TThWnd, TTM_SETTIPTEXTCOLOR, myForeColor, ByVal 0&
  227.                 SendMessage TThWnd, TTM_SETTIPBKCOLOR, myBackColor, ByVal 0&
  228.                 SendMessage TThWnd, TTM_SETDELAYTIME, TTDT_INITIAL, ByVal myHoverTime
  229.                 SendMessage TThWnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, ByVal myPopupTime
  230.                 Create = TThWnd
  231.             End If
  232.         On Error GoTo 0
  233.     End With 'TOOLINFO
  234.  
  235. End Function
  236.  
  237. Public Property Get ForeCol() As Long
  238. Attribute ForeCol.VB_Description = "Returns the current tooltip forecolor."
  239.  
  240.   'this returns the current tooltip forecolor
  241.  
  242.     ForeCol = myForeColor
  243.  
  244. End Property
  245.  
  246. Public Property Get HoverTime() As Long
  247.  
  248.   'this returns the current mouse hover time time in millicecs (-1 for default)
  249.  
  250.     HoverTime = myHoverTime
  251.  
  252. End Property
  253.  
  254. Public Property Get Icon() As TTIcon
  255. Attribute Icon.VB_Description = "Returns the current tooltip icon."
  256.  
  257.   'this returns the current tooltip icon
  258.  
  259.     Icon = myIcon
  260.  
  261. End Property
  262.  
  263. Public Property Get InitialText() As String
  264. Attribute InitialText.VB_Description = "Returns the inital tooltip text."
  265.  
  266.   'this returns the inital tooltip text, ie the one that was supplied on creation
  267.  
  268.     InitialText = myInitialText
  269.  
  270. End Property
  271.  
  272. Public Property Get InitialTitle() As String
  273. Attribute InitialTitle.VB_Description = "Returns the inital tooltip title."
  274.  
  275.   'this returns the inital tooltip title, ie the one that was supplied on creation
  276.  
  277.     InitialTitle = myInitialTitle
  278.  
  279. End Property
  280.  
  281. Public Property Get PopupTime() As Long
  282.  
  283.   'this returns the current max PopupTime time in millisecs (-1 for default)
  284.  
  285.     PopupTime = myPopupTime
  286.  
  287. End Property
  288.  
  289. Public Property Get Style() As TTStyle
  290. Attribute Style.VB_Description = "Returns the current tooltip style."
  291.  
  292.   'this returns the current tooltip style
  293.  
  294.     Style = myStyle
  295.  
  296. End Property
  297.  
  298. Public Property Get Text() As String
  299. Attribute Text.VB_Description = "Returns the current tooltip text."
  300.  
  301.   'this returns the current tooltip text
  302.  
  303.     Text = ToolInfo.myText
  304.  
  305. End Property
  306.  
  307. Public Property Get Title() As String
  308. Attribute Title.VB_Description = "Returns the current tooltip title."
  309.  
  310.   'this returns the current tooltip Title
  311.  
  312.     Title = myTitle
  313.  
  314. End Property
  315.  
  316. ':) Ulli's VB Code Formatter V2.17.4 (2004-Aug-02 11:20) 101 + 183 = 284 Lines
  317.