Mit nachfolgendem Extra-Tipp zeigen wir, wie einfach sich unter VB.NET 2005 ein animiertes TrayIcon im SysTray der Windows-Taskbar erstellen lässt. Weiterhin erfahren Sie, wie man moderne Ballon Tool-Tipps über dem Icon anzeigen und bei Rechtsklick ein anwendungsspezifisches Kontextmenü einblenden kann. Für das Anzeigen eines TrayIcons benötigen wir ein NotifyIcon-Objekt, für den Animationseffekt die gewünschten Icons, sowie ein Timer-Objekt. Das Kontextmenü wird mithilfe eines ContextMenuStrip-Objekts erstellt und angezeigt. Public Class Form1 ' TrayIcon-Objekt Dim WithEvents oTrayIcon As NotifyIcon ' Timer-Objekt Dim WithEvents oTimer As Timer ' animierte IconListe Dim oIcons(0 To 2) As Icon ' aktuelles Icons Dim IconCurrent As Integer ' Kontextmenü-Objekt Dim WithEvents oPopUpMenu As ContextMenuStrip Wie Sie bereits jetzt schon merken, erstellen wir die einzelnen Objekte allesamt zur Laufzeit! Im Form_Load Ereignis werden zunächst die Icons für den Animationseffekt geladen und anschließend das Kontextmenü generiert, das erscheinen soll, wenn der Anwender mit der rechten Maustaste auf das TrayIcon klickt. Das NotifyIcon-Objekt wird ebenfalls bereits im Form_Load Ereignis erstellt, jedoch bleibt das TrayIcon noch unsichtbar in der Taskbar. Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Icons laden oIcons(0) = New Icon(Application.StartupPath & "\icon1.ico") oIcons(1) = New Icon(Application.StartupPath & "\icon1.ico") oIcons(2) = New Icon(Application.StartupPath & "\icon1.ico") ' Kontextmenü erstellen oPopUpMenu = New ContextMenuStrip With oPopUpMenu.Items .Add("Anwendung anzeigen").Tag = "Show" .Add("Info...").Tag = "Info" .Add("-") .Add("Beenden").Tag = "Exit" End With ' TrayIcon-Objekt erstellen, jedoch noch nicht anzeigen oTrayIcon = New NotifyIcon With oTrayIcon ' 1. Icon zuweisen .Icon = oIcons(0) ' Info-ToolTip .BalloonTipIcon = ToolTipIcon.Info .BalloonTipTitle = "Hinweis" .BalloonTipText = "Klicken Sie mit der rechten Maustaste auf das Icon, " & _ "um das Kontextmenü anzuzeigen." End With ' Timer-Objekt erstellen und Zeit einstellen oTimer = New Timer oTimer.Interval = 500 End Sub Das TrayIcon soll autom. erscheinen, wenn die Form minimiert wird. Gleichzeitig soll die Form aus der Taskbar ausgblendet werden: Private Sub Form1_Resize(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Resize ' TrayIcon anzeigen, wenn Form minimiert wurde If Me.WindowState = FormWindowState.Minimized Then If oTrayIcon Is Nothing Then ShowTrayIcon Me.Hide() End If End If End Sub Private Sub ShowTrayIcon() ' TrayIcon-Symbol anzeigen .Visible = True ' Timer starten oTimer.Start() End Sub Die Animation wird über das Timer-Objekt gesteuert, indem abwechselnd die einzelnen Icon-Symbole nacheinander dem TrayIcon-Objekt zugewiesen werden: Private Sub oTimer_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles oTimer.Tick ' Iconsymol wechseln IconCurrent = IconCurrent + 1 If IconCurrent > 2 Then IconCurrent = 0 oTrayIcon.Icon = oIcons(IconCurrent) End Sub Klickt der Anwender mit der rechten Maustaste auf das TrayIcon-Symbol soll ein das Kontextmenü eingeblendet werden: Private Sub oTrayIcon_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles oTrayIcon.MouseDown ' Bei Rechtsklick auf das TrayIcon, PopUp-Menü öffnen und anzeigen If e.Button = Windows.Forms.MouseButtons.Right Then oPopUpMenu.Show(Cursor.Position) End If End Sub Die Auswahl des Menü-Eintrags erfolgt über das ItemClicked-Ereignis des ContextMenuStrip-Objekts: Private Sub oPopUpMenu_ItemClicked(ByVal sender As Object, _ ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) _ Handles oPopUpMenu.ItemClicked ' Menü ausblenden ... oPopUpMenu.Hide() ' ... und Auswahl auswerten Select Case e.ClickedItem.Tag Case "Show" ' Anwendung wieder anzeigen Me.Show() Me.WindowState = FormWindowState.Normal Case "Info" ' Info-Box MsgBox("Beispielprojekt, wie man ein animiertes TrayIcon mit " & _ "BalloonTip und Kontextmenü erstellt.", _ MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, _ "Animiertes TrayIcon (VB.NET)") Case "Exit" ' Anwendung beenden Me.Close() End Select End Sub Beim Beenden der Anwendung muss das TrayIcon aus dem SysTray-Bereich der Windows-Taskbar wieder entfernt werden: Private Sub Form1_FormClosing(ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Timer deaktivieren und zerstören If Not oTimer Is Nothing Then oTimer.Stop() oTimer = Nothing End If ' TrayIcon ausblenden und Objekt zerstören If Not oTrayIcon Is Nothing Then oTrayIcon.Visible = False oTrayIcon = Nothing End If End Sub End Class |