VB.NET-Tipp 0110: FlashWindows
von pks
Beschreibung
Dieser Tipp zeigt wie man den Titel eines Fensters, den zugehörenden Eintrag in der Taskleiste und optional ein Icon im Systeminfobereich (NotifyIcon) blinken lassen kann.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2005 ' Option Strict: An ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' ' ############################################################################## ' ############################# clsFlashWindow.vb ############################## ' ############################################################################## ''' <summary> ''' Title und/oder Task blinken lassen ''' </summary> ''' <remarks></remarks> Public Class FlashWindow Private Declare Auto Function FlashWindowEx Lib "user32" _ (ByRef FWI As FLASHWINFO) As Boolean Public Enum FlashWindowMode FlashTitle = 1 FlashTask = 2 FlashAll = FlashTitle Or FlashTask End Enum Private Structure FLASHWINFO Dim cbSize As Integer Dim hwnd As IntPtr Dim dwFlags As Integer Dim uCount As Integer Dim dwTimeout As Integer End Structure Private mNI As NotifyIcon = Nothing Private NI1 As Icon = Nothing Private NI2 As Icon = Nothing Private mFlash As Boolean = False Private WithEvents T As New Timer Private ShowIt As Boolean = False Public Event FlashStarted() Public Event FlashStopped() ''' <summary> ''' Init FlashWindow ''' </summary> ''' <param name="NI"> ''' Optional kann ein NotifyIcon Control übergeben werden ''' </param> ''' <param name="mFlashNotifyIcon"> ''' Soll bei StartFlash das Icon blinken? ''' </param> ''' <remarks></remarks> Public Sub New(Optional ByVal NI As NotifyIcon = Nothing, _ Optional ByVal mFlashNotifyIcon As Boolean = False) NotifyIcon = NI mFlash = mFlashNotifyIcon End Sub ''' <summary> ''' Ruft ab oder legt das NotifyIcon der Parentform fest ''' </summary> Public Property NotifyIcon() As NotifyIcon Get Return mNI End Get Set(ByVal value As NotifyIcon) mNI = value If mNI Is Nothing Then NI1 = Nothing NI2 = Nothing mFlash = False Else NI1 = mNI.Icon NI2 = Icon.FromHandle(New Bitmap(16, 16).GetHicon) End If End Set End Property ''' <summary> ''' Ruft ab oder legt fest, ob bei StartFlash das Icon blinken soll ''' </summary> Public Property FlashNotifyIcon() As Boolean Get Return mFlash End Get Set(ByVal value As Boolean) mFlash = value End Set End Property ''' <summary> ''' Blinkvorgang starten ''' </summary> ''' <param name="Frm"> ''' Form deren Titelleiste und/oder Task blinken soll ''' </param> ''' <param name="FlashMode">Title, Task oder beide</param> ''' <param name="FlashCount">Anzahl Blinkvorgänge </param> ''' <param name="Intervall">Abstand in ms zwischen Blinkumschaltung</param> Public Sub StartFlash(ByVal Frm As Form, _ ByVal FlashMode As FlashWindowMode, _ Optional ByVal FlashCount As Integer = 100000, _ Optional ByVal Intervall As Integer = 500) Flash(Frm, FlashMode, FlashCount, Intervall) RaiseEvent FlashStarted() If mFlash Then ShowIt = True T.Interval = Intervall T.Start() End If End Sub ''' <summary> ''' Blinkvorgang anhalten ''' </summary> Public Sub StopFlash(ByVal Frm As Form) Flash(Frm, 0, 0, 0) T.Stop() If mNI IsNot Nothing Then mNI.Icon = NI1 End If RaiseEvent FlashStopped() End Sub Private Sub Flash(ByVal Frm As Form, _ ByVal FlashMode As FlashWindowMode, _ Optional ByVal FlashCount As Integer = 100000, _ Optional ByVal Intervall As Integer = 500) Dim FlashInfo As New FLASHWINFO FlashInfo.cbSize = _ System.Runtime.InteropServices.Marshal.SizeOf(FlashInfo) FlashInfo.dwFlags = FlashMode FlashInfo.dwTimeout = Intervall FlashInfo.hwnd = Frm.Handle FlashInfo.uCount = FlashCount FlashWindowEx(FlashInfo) End Sub ''' <summary> ''' Steuerung Blinkvorgang des Icons vom NotifyIcon ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub T_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles T.Tick If ShowIt Then mNI.Icon = NI1 Else mNI.Icon = NI2 End If ShowIt = Not ShowIt End Sub End Class ' ############################################################################## ' ################################# Form1.vb ################################### ' ############################################################################## Public Class Form1 Private WithEvents cFlash As FlashWindow Private MeWindowState As System.Windows.Forms.FormWindowState Private WithEvents Item1 As New ToolStripMenuItem() Private WithEvents Item2 As New ToolStripMenuItem() Private Separ As New ToolStripSeparator() Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Item1.Text = "Form1 aktivieren" Item2.Text = "Job beenden" With ContextMenuStrip1 .Items.Add(Item1) .Items.Add(Separ) .Items.Add(Item2) End With With NotifyIcon1 .Icon = SystemIcons.Asterisk .ContextMenuStrip = ContextMenuStrip1 .BalloonTipText = "Form1 zu FlashWindow" End With NotifyIcon1.Icon = SystemIcons.Asterisk RadioButton1.Text = "Flash Title" RadioButton2.Text = "Flash Task" RadioButton3.Text = "Flash All" CheckBox1.Text = "NotifyIcon zeigen" CheckBox2.Text = "Flash Icon" CheckBox1.Checked = True CheckBox2.Checked = True Button1.Text = "Start Flash" Button2.Text = "Stop Flash" Button3.Text = "Minimize Me" cFlash = New FlashWindow(NotifyIcon1) End Sub Private Sub Form1_Resize(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Resize If Me.WindowState = FormWindowState.Minimized Then If NotifyIcon1.Visible Then Me.Hide() End If Else MeWindowState = Me.WindowState End If End Sub Private Sub Form1_Shown(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Shown RadioButton3.Checked = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim FM As FlashWindow.FlashWindowMode = _ FlashWindow.FlashWindowMode.FlashAll If RadioButton1.Checked Then FM = FlashWindow.FlashWindowMode.FlashTitle ElseIf RadioButton2.Checked Then FM = FlashWindow.FlashWindowMode.FlashTask End If If CheckBox2.Checked Then cFlash.FlashNotifyIcon = True End If cFlash.StartFlash(Me, FM) End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click cFlash.StopFlash(Me) End Sub Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click Me.WindowState = FormWindowState.Minimized End Sub Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged NotifyIcon1.Visible = CheckBox1.Checked If CheckBox1.Checked Then CheckBox2.Enabled = True Else CheckBox2.Checked = False CheckBox2.Enabled = False End If End Sub Private Sub Item1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Item1.Click Me.Show() Me.WindowState = MeWindowState Me.Activate() cFlash.StopFlash(Me) End Sub Private Sub Item2_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Item2.Click Me.Close() End Sub Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick Me.Show() Me.WindowState = MeWindowState Me.Activate() cFlash.StopFlash(Me) End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged cFlash.StopFlash(Me) End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged cFlash.StopFlash(Me) End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged cFlash.StopFlash(Me) End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.