Entwickler-Ecke

Linux API - ...ein TrayIcon in der KDE erstellen?


Burgpflanze - So 18.05.03 12:00
Titel: ...ein TrayIcon in der KDE erstellen?
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// Icons im KDE-SystemTray sollten 24x24 Pixel groß sein,
  Height := 24// größere werden beschnitten, kann auch im ObjectInspector gesetzt werden
  
  // Die zwei folgenden Zeilen müssen hier stehen,
  // es nützt nichts, wenn sie im ObjectInspector gesetzt werden
  BorderStyle := fbsNone;
  BorderIcons := [];

  // Mit den nachfolgenden Zeilen wird unser Fenster in den SystemTray eingefügt
  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 [http://www.efg2.com/Lab/Library/Kylix/MatthiasThoma/KDESystemTray.html] für die Quellenangabe.


AndyB - So 18.05.03 14:12

Kleine Ergänzung [http://www.efg2.com/Lab/Library/Kylix/MatthiasThoma/KDESystemTray.html] für die Quellenangabe.


FriFra - Mi 04.06.03 12:37

Also bei mir schwebt das Fenster irgendwo (defaultposition), aber nicht im "Tray"...


mth - Di 10.06.03 23:14

FriFra hat folgendes geschrieben:
Also bei mir schwebt das Fenster irgendwo (defaultposition), aber nicht im "Tray"...


Ersetzte bitte mal fbsNone mit fbsSingle. Falls Das nicht funktionieren sollte, könntest Du mir bitte die genaue Version deines Window Manager (KDE!) sagen und evtl. die des XWindow Systems... am besten per PM.