Feedback

C# - Fenster Flashing

Veröffentlicht von am 12/14/2007
(1 Bewertungen)
Mithilfe dieser Klasse, können Sie Ihr eigenes Fenster + den Button in der Taskleiste, in einem Periodischen Zeitinterval, aufblinken lassen.
Zusätzlich können Sie sich auch noch, an ein Event dranhängen und noch etwas eigenes dazu zu Programmieren

Beispiels weise bei einer längeren Aktion in der der User sogar das Fenster minimieren könnte.

Dieses blinken in der Taskleite könnte die Aufmerksamkeit des User wieder auf das Programm lenken.

#region Using
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices; 
#endregion

namespace Toolset {
    #region Beschreibung
    /// <summary>
    /// Mithilfe dieser Klasse, können Sie Ihr eigenes Fenster + den Button in der Taskleiste, in einem Periodischen 
    /// Zeitinterval, aufblinken lassen.
    /// Zusätzlich können Sie sich auch noch, an ein Event dranhängen und noch etwas eigenes dazu zu Programmieren
    /// </summary>
    /// <example>
    /// <code lang="C#">
    /// private Toolset.WindowFlasher flasher
    /// //Innerhalb einer Form Klassem zb weil eine längere Arbeitsphase abgeschlossen ist und das Fenster 
    /// //in der Zwischenzeit minimiert wurde
    /// private void StartWindowFlasher(){
    ///     flasher = new Toolset.WindowFlasher(this, 1000);
    ///     flasher.StartFlashing();
    ///     this.Activated += new System.EventHandler(this.Form1_Activated);
    /// }
    /// private void Form1_Activated(object sender, EventArgs e) {
    ///     if (flasher != null && flasher.IsActive) {
    ///         flasher.StopFlashing();
    ///         this.Activated -= this.Form1_Activated;
    ///     }
    /// }
    /// </code>
    /// </example> 
    #endregion
    public class WindowFlasher {
        #region Event
        /// <summary>
        /// Stellt den Typ der Methode dar, die das Ereigniss behandelt.
        /// </summary>
        public delegate void WindowFlashHandler(Object sender, EventArgs ea);
        /// <summary>
        /// Tritt bei jedem Tick auf.
        /// </summary>
        public event WindowFlashHandler WindowFlashed; 
        #endregion

        #region Private Felder
        private Timer timer;
        private Boolean isActive; 
        #endregion

        #region Property
        /// <summary>
        /// Gibt an ob der Timer läuft oder ob er bereits gestoppt wurde.
        /// </summary>
        public Boolean IsActive {
            get {
                return isActive;
            }
        } 
        #endregion

        #region DllImport
        [DllImport("user32.dll")]
        static extern long FlashWindow(IntPtr hwnd, long invert); 
        #endregion

        #region konstruktor
        /// <summary>
        /// Initialisiert eine neue Instanz der MultiClipboard Klasse.
        /// </summary>
        /// <param name="window">die jeweilige Form die Blicken soll</param>
        /// <param name="intervalInMs">ein Interval in ms, in welchen abstand die Form Blincken soll</param>
        public WindowFlasher(Form window, int intervalInMs) {
            IntPtr windowHwnd = window.Handle;
            timer = new Timer();
            timer.Interval = intervalInMs;
            timer.Tick += new EventHandler(delegate(Object sender, EventArgs e) { long l = FlashWindow(windowHwnd, 1); if (WindowFlashed != null) WindowFlashed(window, new EventArgs()); });
        } 
        #endregion

        #region Destruktor
        /// <summary>
        /// aufräumen
        /// </summary>
        ~WindowFlasher() {
            WindowFlashed = null;
            this.StopFlashing();
            timer = null;
        }
        #endregion

        #region Methoden
        /// <summary>
        /// Startet den Flasher Vorgang
        /// </summary>
        public void StartFlashing() {
            if (!isActive) {
                timer.Start();
                isActive = true;
            }
        }

        /// <summary>
        /// Stoppt den Flasher vorgang
        /// </summary>
        public void StopFlashing() {
            if (isActive) {
                isActive = false;
                timer.Stop();
            }
        } 
        #endregion
    }
}

1 Kommentare zum Snippet

Silerra schrieb am 9/6/2010:
Cooles Code und für meinem Bereich irgendwie wichtig. Jedoch kommt eine Meldung PInokeStackImbalance wenn ich das Code zum Einsatz bringe.
 

Logge dich ein, um hier zu kommentieren!