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; 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 [
http://www.efg2.com/Lab/Library/Kylix/MatthiasThoma/KDESystemTray.html] für die Quellenangabe.
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.