Logo UGIdotNET

Windows XP BaloonTips

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>

Autore: Corrado Cavalli
Data: 12 febbraio 2003
Ultimo aggiornamento: 23 luglio 2004
Categorie: 

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185