Home » Tipps & Tricks » Applikation » Taskleiste/Tray » Taskbareintrag blinken lassen

Taskbareintrag blinken lassen

Um einen Taskbareintrag blinken zu lassen, kann die Funktion FlashWindow verwendet werden. Dazu wird ihr ein Handle übergeben:

procedure TForm1.Button1Click(Sender: TObject);
begin
  FlashWindow(Application.Handle, True);
end;

Um ein Formular blinken zu lassen, wird einfach das Handle des Formulars übergeben:

procedure TForm1.Button1Click(Sender: TObject);
begin
  FlashWindow(self.Handle, True);
end;

Flexibler ist man allerdings mit der erweiterten FlashWindow-Funktion, FlashWindowEx. Sie erwartet als Parameter eine Variable vom Typ FLASHWINFO, der in der Unit Windows deklariert ist:

uses
  Windows;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  Flash: FLASHWINFO;
begin
  FillChar(Flash, SizeOf(Flash), 0);
  Flash.cbSize:=SizeOf(Flash);
  Flash.hwnd:=Application.Handle;
  Flash.uCount:=5;
  Flash.dwTimeOut:=2000;
  Flash.dwFlags:=FLASHW_ALL;
  FlashWindowEx(Flash);
end;

Das Feld „hwnd“ entspricht dem ersten Parameter der FlashWindow-Funktion. Über „uCount“ steuert man, wie oft geblinkt werden soll. Wie lange jeder Intervall dauern soll, wird dem Feld „dwTimeOut“ übergeben (Zeit in Millisekunden). Über „dwFlags“ lassen sich letztendlich noch einige Einstelungen tätigen. Im Beispiel hat die Variable den Wert „FLASHW_ALL“, wodurch der Taskbar-Button und die Titelleiste blinken werden. Es kann zusäzlich die Konstante FLASHW_TIMER übergeben werden, wodurch die Titelleiste und/oder der Taskbutton solange blinkt, bis die Funktion wiederholt mit dem Flag FLASHW_STOP aufgerufen wird:

procedure TForm1.Button1Click(Sender: TObject);
var
  Flash: FLASHWINFO;
begin
  FillChar(Flash, SizeOf(Flash), 0);
  Flash.cbSize:=SizeOf(Flash);
  Flash.hwnd:=Application.Handle;
  Flash.dwFlags:=FLASHW_ALL or FLASHW_TIMER;
  Flash.dwTimeout:=1000;
  FlashWindowEx(Flash);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Flash: FLASHWINFO;
begin
  FillChar(Flash, SizeOf(Flash), 0);
  Flash.cbSize:=SizeOf(Flash);
  Flash.hwnd:=Application.Handle;
  Flash.dwFlags:=FLASHW_STOP;
  FlashWindowEx(Flash);
end;

Stünde das Flag auf FLASHW_TIMERNOFG würden die Elemente blinken, bis das Fenster in den Vordergrund geholt wird.
Weitere Informationen finden sich im PSDK unter den Stichworten „FlashWindow“, „FlashWindowEx“ und „FLASHWINFO“.