|
|
|
Using api you can create ballon style tooltip. You can also set various parameters for tooltip i.e. Delay, Visible Time, Style, Title, Description , Font, TextColor, BackColor etc...
Note: If tooltip is OnDemand ToolTip then VisibleTime and Delay Properties have no effect. To set VisibleTime and Delay properties you must set PopupOnDemand=False (default value is false)
In this demo Password tooltip is OnDemand tooltip which you can show any time using "Show" method and TextBox tooltip is mouse over tooltip which will be visible only when you take mouse over the textbox control. Another good thing about OnDemand tooltip is you can specify X and Y coordinates of tooltip which is not possible for mouseover tooltip.
I have implemented a class for Balloon style tooltip.
To run this demo perform the following steps
- Create a Windows Application Project - Add a class module rename class1 to CBalloonToolTip - Add 2 textbox and one command button on form1 - Place the Following code in form1
Form1.vb |
Click here to copy the following block | Dim TT1 As New CBalloonToolTip Dim TT2 As New CBalloonToolTip
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Integer) As Short
Public Function CapsLockOn() As Boolean Dim iKeyState As Short iKeyState = GetKeyState(System.Windows.Forms.Keys.Capital) CapsLockOn = (iKeyState = 1 Or iKeyState = -127) End Function
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click If Text1.Text <> "mypassword" Then TT1.Style = CBalloonToolTip.ttStyleEnum.TTBalloon TT1.Icon = CBalloonToolTip.ttIconType.TTIconError TT1.Title = IIf(Text1.Text = "", "Blank Password", "Invalid Password") TT1.TipText = "Please Enter Correct Password..." TT1.PopupOnDemand = True TT1.CreateToolTip(Text1.Handle.ToInt32) TT1.Show(0, Text1.Height - 1, Text1.Handle.ToInt32) End If End Sub
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load TT2.Style = CBalloonToolTip.ttStyleEnum.TTBalloon TT2.Icon = CBalloonToolTip.ttIconType.TTIconInfo TT2.Title = "Information" TT2.TipText = "A little cute tooltip for Textbox2" TT2.PopupOnDemand = False TT2.ForeColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White) TT2.BackColor = &HCE7110 TT2.VisibleTime = 6000
Dim myFont As New Font("Tahoma", 10, FontStyle.Italic Or FontStyle.Underline) TT2.TipFont = myFont
TT2.CreateToolTip(Text2.Handle.ToInt32) End Sub
Private Sub Form1_MouseDown(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown Dim Button As Short = eventArgs.Button \ &H100000 Dim Shift As Short = System.Windows.Forms.Control.ModifierKeys \ &H10000 TT1.Destroy() End Sub
Private Sub Form1_Paint(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint TT1.Destroy() End Sub
Private Sub Form1_Resize(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Resize TT1.Destroy() End Sub
Private Sub Form1_Closed(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Closed TT1.Destroy() TT2.Destroy() End Sub
Private Sub Text1_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyEventArgs) Handles Text1.KeyDown Dim KeyCode As Short = eventArgs.KeyCode Dim Shift As Short = eventArgs.KeyData \ &H10000 If CapsLockOn Then TT1.Style = CBalloonToolTip.ttStyleEnum.TTBalloon TT1.Icon = CBalloonToolTip.ttIconType.TTIconWarning TT1.Title = "Caps Lock is on" TT1.TipText = "Check your caps lock key..." TT1.CreateToolTip(Text1.Handle.ToInt32) TT1.Show(0, Text1.Height - 1, Text1.Handle.ToInt32) Else TT1.Destroy() End If End Sub
Private Sub Text1_MouseDown(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.MouseEventArgs) Handles Text1.MouseDown Dim Button As Short = eventArgs.Button \ &H100000 Dim Shift As Short = System.Windows.Forms.Control.ModifierKeys \ &H10000 TT1.Destroy() End Sub |
Click here to copy the following block | Option Strict Off Option Explicit On Public Class CBalloonToolTip
Private Declare Sub InitCommonControls Lib "comctl32.dll" () Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" ( _ ByVal dwExStyle As Integer, _ ByVal lpClassName As String, _ ByVal lpWindowName As String, _ ByVal dwStyle As Integer, _ ByVal X As Integer, _ ByVal Y As Integer, _ ByVal nWidth As Integer, _ ByVal nHeight As Integer, _ ByVal hWndParent As Integer, _ ByVal hMenu As Integer, _ ByVal hInstance As Integer, _ ByRef lpParam As Integer) As Integer
Private Declare Function SendMessageBT Lib "user32.dll" Alias "SendMessageA" ( _ ByVal hwnd As Integer, _ ByVal wMsg As Integer, _ ByVal wParam As Integer, _ ByRef lParam As TOOLINFO) As Integer
Private Declare Function SendMessageStr Lib "user32.dll" Alias "SendMessageA" ( _ ByVal hwnd As Integer, _ ByVal wMsg As Integer, _ ByVal wParam As Integer, _ ByVal lParam As String) As Integer
Private Declare Function SendMessageLong Lib "user32.dll" Alias "SendMessageA" ( _ ByVal hwnd As Integer, _ ByVal wMsg As Integer, _ ByVal wParam As Integer, _ ByVal lParam As Integer) As Integer
Private Declare Function DestroyWindow Lib "user32.dll" ( _ ByVal hwnd As Integer) As Integer
Private Declare Function ClientToScreen Lib "user32.dll" ( _ ByVal hwnd As Integer, _ ByRef lpPoint As POINTAPI) As Integer
Private Const WM_USER As Short = &H400S Private Const WM_SETFONT = &H30 Private Const CW_USEDEFAULT As Integer = &H80000000
Private Structure RECT Dim left_Renamed As Integer Dim top As Integer Dim right_Renamed As Integer Dim bottom As Integer End Structure
Private Structure POINTAPI Dim X As Integer Dim Y As Integer End Structure
Private Const TTS_NOPREFIX As Short = &H2S Private Const TTF_TRANSPARENT As Short = &H100S Private Const TTF_CENTERTIP As Short = &H2S Private Const TTM_ADDTOOLA As Integer = (WM_USER + 4) Private Const TTM_ACTIVATE As Integer = WM_USER + 1 Private Const TTM_UPDATETIPTEXTA As Integer = (WM_USER + 12) Private Const TTM_SETMAXTIPWIDTH As Integer = (WM_USER + 24) Private Const TTM_SETTIPBKCOLOR As Integer = (WM_USER + 19) Private Const TTM_SETTIPTEXTCOLOR As Integer = (WM_USER + 20) Private Const TTM_SETTITLE As Integer = (WM_USER + 32) Private Const TTS_BALLOON As Short = &H40S Private Const TTS_ALWAYSTIP As Short = &H1S Private Const TTF_SUBCLASS As Short = &H10S Private Const TTF_TRACK As Short = &H20S Private Const TTF_IDISHWND As Short = &H1S Private Const TTM_SETDELAYTIME As Integer = (WM_USER + 3) Private Const TTDT_AUTOPOP As Short = 2 Private Const TTDT_INITIAL As Short = 3 Private Const TTM_TRACKACTIVATE As Integer = WM_USER + 17 Private Const TTM_TRACKPOSITION As Integer = WM_USER + 18 Private Const WS_POPUP As Integer = &H80000000
Private Const TOOLTIPS_CLASSA As String = "tooltips_class32"
Private Structure TOOLINFO Dim lSize As Integer Dim lFlags As Integer Dim hwnd As Integer Dim lId As Integer Dim lpRect As RECT Dim hInstance As Integer Dim lpStr As String Dim lParam As Integer End Structure
Public Enum ttIconType TTNoIcon = 0 TTIconInfo = 1 TTIconWarning = 2 TTIconError = 3 End Enum
Public Enum ttStyleEnum TTStandard TTBalloon End Enum
Private m_BackColor As Integer Private m_Title As String Private m_ForeColor As Integer Private m_Icon As ttIconType Private m_Centered As Boolean Private m_Style As ttStyleEnum Private m_TipText As String Private m_VisibleTime As Integer Private m_DelayTime As Integer Private m_PopupOnDemand As Boolean
Private m_lTTHwnd As Integer Private m_TipFont As Font Private m_lParentHwnd As Integer Private ti As TOOLINFO
Public Sub New() MyBase.New() InitCommonControls() m_DelayTime = 500 m_VisibleTime = 5000 m_PopupOnDemand = False End Sub Protected Overrides Sub Finalize() Destroy() MyBase.Finalize() End Sub Public Property VisibleTime() As Integer Get Return m_VisibleTime End Get Set(ByVal Value As Integer) m_VisibleTime = Value If m_lTTHwnd <> 0 Then SendMessageLong(m_lTTHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, m_VisibleTime) End If End Set End Property Public Property DelayTime() As Integer Get Return m_DelayTime End Get Set(ByVal Value As Integer) m_DelayTime = Value If m_lTTHwnd <> 0 Then SendMessageLong(m_lTTHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, m_DelayTime) End If End Set End Property Public Property TipFont() As Font Get Return m_TipFont End Get Set(ByVal Value As Font) m_TipFont = Value If m_lTTHwnd <> 0 Then SendMessageLong(m_lTTHwnd, WM_SETFONT, m_TipFont.ToHfont.ToInt32, 1) End If End Set End Property Public Property Icon() As ttIconType Get Return m_Icon End Get Set(ByVal Value As ttIconType) Dim sysNull As System.DBNull m_Icon = Value If m_lTTHwnd <> 0 And Not (m_Title Is sysNull) And m_Icon <> ttIconType.TTNoIcon Then SendMessageStr(m_lTTHwnd, TTM_SETTITLE, CInt(m_Icon), m_Title) End If End Set End Property Public Property ForeColor() As Integer Get Return m_ForeColor End Get Set(ByVal Value As Integer) m_ForeColor = Value If m_lTTHwnd <> 0 Then SendMessageLong(m_lTTHwnd, TTM_SETTIPTEXTCOLOR, m_ForeColor, 0) End If End Set End Property Public Property Title() As String Get Return ti.lpStr End Get Set(ByVal Value As String) m_Title = Value
If m_lTTHwnd <> 0 And m_Title <> "" And m_Icon <> ttIconType.TTNoIcon Then SendMessageStr(m_lTTHwnd, TTM_SETTITLE, CInt(m_Icon), m_Title) End If End Set End Property Public Property TipText() As String Get Return m_TipText End Get Set(ByVal Value As String) m_TipText = Value ti.lpStr = Value If m_lTTHwnd <> 0 Then SendMessageBT(m_lTTHwnd, TTM_UPDATETIPTEXTA, 0, ti) End If End Set End Property
Public Property PopupOnDemand() As Boolean Get Return m_PopupOnDemand End Get Set(ByVal Value As Boolean) m_PopupOnDemand = Value End Set End Property Public Property BackColor() As Integer Get Return m_BackColor End Get Set(ByVal Value As Integer) m_BackColor = Value If m_lTTHwnd <> 0 Then SendMessageLong(m_lTTHwnd, TTM_SETTIPBKCOLOR, m_BackColor, 0) End If End Set End Property Public Property Style() As ttStyleEnum Get Style = m_Style End Get Set(ByVal Value As ttStyleEnum) m_Style = Value End Set End Property Public Property Centered() As Boolean Get Centered = m_Centered End Get Set(ByVal Value As Boolean) m_Centered = Value End Set End Property
Public Sub Show(Optional ByRef X As Integer = 0, Optional ByRef Y As Integer = 0, Optional ByRef hWndClient As Integer = 0)
Dim pt As POINTAPI Dim ptTip As Integer Dim ret As Integer
With pt .X = X .Y = Y End With
ret = ClientToScreen(hWndClient, pt)
ptTip = pt.Y * &H10000 ptTip = ptTip + pt.X
ret = SendMessageLong(m_lTTHwnd, TTM_TRACKPOSITION, 0, ptTip) ret = SendMessageBT(m_lTTHwnd, TTM_TRACKACTIVATE, True, ti) End Sub
Public Function CreateToolTip(ByVal ParentHwnd As Integer) As Boolean Dim lWinStyle As Integer If m_lTTHwnd <> 0 Then DestroyWindow(m_lTTHwnd) End If m_lParentHwnd = ParentHwnd
If m_Style = ttStyleEnum.TTBalloon Then lWinStyle = lWinStyle Or TTS_BALLOON
m_lTTHwnd = CreateWindowEx(0, TOOLTIPS_CLASSA, 0, lWinStyle, 0, 0, 0, 0, m_lParentHwnd, 0, 0, 0)
With ti If m_Centered Then If m_PopupOnDemand = False Then .lFlags = TTF_SUBCLASS Or TTF_CENTERTIP Or TTF_IDISHWND Else .lFlags = TTF_IDISHWND Or TTF_TRACK Or TTF_CENTERTIP End If Else If m_PopupOnDemand = False Then .lFlags = TTF_SUBCLASS Or TTF_IDISHWND Else .lFlags = TTF_IDISHWND Or TTF_TRACK Or TTF_TRANSPARENT End If End If
.hwnd = m_lParentHwnd .lId = m_lParentHwnd .hInstance = 0 .lpStr = m_TipText .lSize = Len(ti) End With
SendMessageBT(m_lTTHwnd, TTM_ADDTOOLA, 0, ti)
Title = m_Title
If m_BackColor <> 0 Then BackColor = m_BackColor If m_ForeColor <> 0 Then ForeColor = m_ForeColor If m_VisibleTime <> 0 Then VisibleTime = m_VisibleTime If m_DelayTime <> 0 Then DelayTime = m_DelayTime If Not (m_TipFont Is Nothing) Then TipFont = m_TipFont End Function
Public Sub Destroy() If m_lTTHwnd <> 0 Then DestroyWindow(m_lTTHwnd) End If End Sub End Class |
|
|
|
Submitted By :
Nayan Patel
(Member Since : 5/26/2004 12:23:06 PM)
|
|
|
Job Description :
He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting. |
View all (893) submissions by this author
(Birth Date : 7/14/1981 ) |
|
|