Unter Linux muss zunächst erst einmal der jeweilige Desktop-Manager diese Möglichkeit bieten - und das ist meines Wissens zur Zeit nur KDE. Lösung: Zunächst muß erst einmal gesagt werden, das TrayIcons unter KDE nicht vergleichbar sind mit denen unter Windows. Unter KDE sind sogenannte TrayIcons komplett eigenständige Fenster!
Wie nun aber bekommen wir es hin?
Nach meinen bisherigen Erfahrungen sollte man dazu immer die MainForm der jeweiligen Application benutzen, da es ansonsten zu Problemen kommt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| uses XLib, Qt;
procedure TForm1.FormCreate(Sender: TObject); var prop: TAtom; data: TAtom; begin
Width := 24; Height := 24; BorderStyle := fbsNone; BorderIcons := [];
prop := XInternAtom(Application.Display, '_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR', 1); XChangeProperty(Application.Display, QWidget_winId(self.Handle), prop, XA_WINDOW, 32, PropModeReplace, PByte(@data), 1); end; |
Das Icon selbst kann entweder in der Eigenschaft Bitmap der MainForm setzen, oder man legt ein TImage auf die MainForm und setzt
Delphi-Quelltext
1: 2: 3: 4:
| Left := 0; Top := 0; Width := 24; Height := 24; |
und die Picture-Eigenschaft auf ein Icon.
Jenachdem welchen Weg man gewählt hat, kann man entweder die Maus-Nachrichten der MainForm oder die des TImage abfangen, um z. B. ein PopupMenu anzuzeigen.
Ich hoffe, das ich es einigermaßen verständlich schreiben konnte.
Kleine
Ergänzung für die Quellenangabe.