Se utilizzate Windows XP, potete facilmente far apparire nelle textbox dei tooltips a forma di fumetto grazie al nuovo messaggio EM_SHOWBALOONTIP supportato dal controllo EDIT (ovvero Textbox). Ecco una classe che wrappa tale messaggio:
Imports System
Imports System.Runtime
Imports System.Runtime.InteropServices
Public Class BallonTip
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As EDITBALLOONTIP) As Integer
Private Const ECM_FIRST = &H1500
Private Const EM_SHOWBALLOONTIP = ECM_FIRST + 3
'//Struttura utilizzata dal messaggio
<StructLayout(LayoutKind.Sequential)> _
Private Structure EDITBALLOONTIP
Dim cbStruct As Integer
<MarshalAs(UnmanagedType.LPWStr)> Dim pszTitle As String
<MarshalAs(UnmanagedType.LPWStr)> Dim pszText As String
Dim ttiIcon As Integer
End Structure
'//Enum per le varie icone
Public Enum BallonTipIcons As Integer
None
Info
Exclamation
Critical
Blank
End Enum
Public Shared Sub ShowEditTip(ByVal targetTextBox As TextBox, ByVal title As String, ByVal text As String, ByVal tipIcon As BallonTipIcons)
'// Il messaggio è supportato solo da Windows XP
If Environment.OSVersion.Version.Major = 5 AndAlso Environment.OSVersion.Version.Minor = 1 Then
'// Creo la struttura e ne inizializzo i membri
Dim stTip As EDITBALLOONTIP
With stTip
.cbStruct = Marshal.SizeOf(GetType(EDITBALLOONTIP))
.pszText = text
.pszTitle = title
.ttiIcon = tipIcon
End With
'// Invio il messaggio
SendMessage(targetTextBox.Handle, EM_SHOWBALLOONTIP, 0, stTip)
End If
End Sub
End Class
Essendo una classe statica (shared in VB.NET) l'utilizzo è immediato:
BallonTip.ShowEditTip(TextBox1, "UGIdotNET", "Questo è il messaggio", BallonTip.BallonTipIcons.Info)
Il risultato è il seguente:
Nota: Per potere utilizzare questo messaggio dovete avere un file manifest che specifica l'utilizzo della ComCtl32.dll v6.0, ovvero nella stessa directory dove è presente l'eseguibile dovete aggiungere un file .manifest contenente queste informazioni:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="BallonTip" processorArchitecture="x86" version="1.0.0.0" type="win32"/>
<description>BaloonTip sample Program</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>