11 Stimme

Delphi/Lazarus: Programm mit Icon im System Tray anzeigen

Frage von Gast | 21.03.2015 um 12:10

In Windows gibt es unten rechts ja den Infobereich oder das Benachrichtigungsfeld (in Englisch Taskbar Notification Area, TNA, System Tray, Systray oder Tray), wo man das Icon mancher Programme finden kann.

Wie kann ich dies in Delphi oder Lazarus implementieren? Gerne würde ich das Hauptfenster von meinem Programm zeigen, wenn man auf das Icon im SysTray klickt und auch eine Möglichkeit haben, um das Programm wieder dorthin verschwinden zu lassen (zum Beispiel beim minimieren des Fensters oder mit einem Button).

Hat jemand einen Tipp für mich, wie man das umsetzen kann?

AntwortenPositivNegativ
Avatar
3Beste Antwort3 Stimmen

Im Bereich "Additional" findest du die Komponente TTrayIcon. Wenn du die auf dein Programm ziehst, hast du schon alles, was du brauchst.

In den Eigenschaften von TrayIcon kannst du genau festlegen, wie sich die Komponente zu verhalten hat.

  • Die Eigenschaft "Visible" legt fest, ob dein TrayIcon sichtbar ist. Du kannst die Sichtbarkeit direkt auf "true" stellen, dann ist das Icon sofort sichtbar, oder du stellst die Sichtbarkeit erst auf "false" und änderst sie später während der Laufzeit des Programms.
  • Unter "Icon" kannst du ein Bild einstellen, welches als Icon in der Taskbar verwendet wird.
  • Auch interessant ist das "PopUpMenu", mit dem du ein PopUp-Menü für die Task-Leiste definieren kann, das dann angezeigt wird, wenn der Anwender mit der rechten Maustaste auf das Icon klickt.

Angenommen, du hast einen Button auf deiner Form, könntest du zum Beispiel folgendes realisieren:

procedure TForm1.Button1Click(Sender: TObject);
begin
   Form1.Hide;
   TrayIcon1.Visible:=true;
end;

Damit wird dein Fenster versteckt und gleichzeitig das TrayIcon angezeigt.

Natürlich kannst du dasselbe auch dann machen, wenn der Anwender das Fenster minimiert:

procedure TForm1.FormWindowStateChange(Sender: TObject);
begin
  if Form1.WindowState = wsminimized then begin
     Form1.Hide;
     TrayIcon1.Visible:=true;   
  end;
end;      

So wird das Fenster direkt in den Tray minimiert.

Um das Fenster wieder zu bekommen, kannst du im Event OnDblClick des TrayIcons folgendes schreiben:

procedure TForm1.TrayIcon1DblClick(Sender: TObject);
begin
  Form1.WindowState:=wsNormal; 
  Form1.Show;    
  Form1.SetFocus;   
  TrayIcon1.Visible:=false;
end;

Wenn man also doppelt auf das TrayIcon klickt, wird das Fenster wieder angezeigt, bekommt den Focus und das TraycIcon wird unsichtbar gestellt.

Ich denke damit hast du erst einmal alles was du brauchst und kannst die entsprechenden Funktionen noch nach Belieben anpassen.
21.03.2015 um 17:00

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.