Sign in Join
Wiki copytemporary

TrayIcon/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TrayIcon/de

OldNewLine
1+### Über
2+
3+**TrayIcon** ist eine crossplattformtaugliche Systemtray-Komponente, die momentan unter folgenden Widgetsets funktioniert: win32, Gtk1, Gnome, Gtk2. Für die Zukunft ist außerdem Carbon ( Mac OS X ) und Qt 4 vorgesehen.
4+
5+Zwei Schnittstellen werden momentan angeboten: eine visuelle Komponente und ein non-visuelles Objekt. Zweiteres heißt SystrayIcon und ist delphikompatibel. Die visuelle Komponente ist das TTrayIcon, das nur mit Lazarus funktioniert.
6+
7+Als Schnelleinstieg siehe: [[TrayIcon/de|das Demonstrationsprogramm]].
8+
9+### Dokumentation
10+
11+Nachfolgend eine Liste mit allen Methoden, Eigenschaften und Ereignissen, die die Komponente zur Verfügung stellt. Namen und Funktion sind für die visuelle und die nicht-visuelle Version identisch. Außerdem arbeiten die Funktionen, außer wenn anders angegeben unter allen Plattformen.
12+
13+#### Methoden
14+
15+**Show**
16+
17+**procedure** Show;
18+
19+Zeigt das Icon im Systemtray
20+
21+**Hide**
22+
23+**procedure** Hide;
24+
25+Entfernt das Icon aus dem Systemtray
26+
27+**GetPosition**
28+
29+**function** GetPosition: TPoint;
30+
31+Gibt die Position des Trayicons auf dem Bildschirm aus. Diese Funktion dient dazu, Nachrichten nahe des Icons anzuzeigen. Dies ist allerdings momentan nur ein Platzhalter und nicht implementiert. Stattdessen wird immer der Punkt (0, 0) zurückgegeben.
32+
33+#### Eigenschaften
34+
35+**Hint**
36+
37+**property** Hint: string;
38+
39+**ShowHint**
40+
41+**property** ShowHint: Boolean;
42+
43+**PopUpMenu**
44+
45+**property** PopUpMenu: TPopUpMenu;
46+
47+Gibt ein Popupmenu an, das beim Rechtsklick auf das Icon erscheint.
48+
49+#### Ereignisse
50+
51+**OnPaint**
52+
53+**property** OnPaint: TNotifyEvent;
54+
55+Erlaubt eine eigene Zeichenroutine für das Canvas des Icons.
56+
57+Bemerkung: Arbeitet nicht unter Win32!
58+
59+**OnClick**
60+
61+**property** OnClick: TNotifyEvent;
62+
63+**OnDblClick**
64+
65+**property** OnDblClick: TNotifyEvent;
66+
67+**OnMouseDown**
68+
69+**property** OnMouseDown: TMouseEvent;
70+
71+**OnMouseUp**
72+
73+**property** OnMouseUp: TMouseEvent;
74+
75+**OnMouseMove**
76+
77+**property** OnMouseMove: TMouseMoveEvent;
78+
79+### Autoren
80+
81+Felipe Monteiro de Carvalho
82+
83+Andrew Haines
84+
85+### Lizenz
86+
87+Modifizierte LGPL
88+
89+### Download
90+
91+Status: Stabil
92+
93+Ist bei jeder aktuellen Lazarusinstallation im Ordner lazarus/components/trayicon zu finden.
94+
95+### Installation
96+
97+**GTK2 WORKAROUND** Es gibt ein Problem mit Trayicon unter Linux mit GTK2 und FPC 2.1.x oder neuer. Das Problem ist, dass TrayIcon die Unit gdk2x.pp enthält (actually the unit is located inside the opengl component but TrayIcon compiles it into itself). This unit has been added to FPC as of version 2.1.x but it still in the lazarus sources as well, because it doesn't exist on the latest stable FPC (2.0.4). This means that when you install TrayIcon Lazarus will refuse to build the GTK2 LCL complaining that it cannot find unit GTKint. If you look at the messages however you will see the true error: the checksum for gdk2x has changed (this is the result of the duplication). To overcome this, you need to remove either the gdk2x.pp file from the lazarus tree, or the gdk2x.o and gdk2x.ppu file from your FPC units directory. This will be fixed once fpc 2.2.0 is released, at which time gdk2x.pp will be removed from lazarus, so consider this a temporary work-around.
98+
99+### Demonstrationsprogramm
100+
101+Es gibt 2 Arten ein Trayicon zu erstellen. Ich empfehle die erste leichtere Methode, lasse aber die alte Methode drinne.. Quelle(Diese Seite Englische version).
102+
103+#### Die Leichte Variante:
104+
105+Seit Lazarus 0.9.26 wurde TIcon vollständig implementiert, und es ist nicht länger notwendig das Bild aus einer Ressource zu laden. Das icon kann in der IDE geladen werden, oder auch mit "usual code".
106+
107+Fügen sie ein TTrayIcon aus Additional in ihrer Form ein.
108+
109+Füge ein TButton zu deiner Form. Und gebe in sein OnClickEvent folgendes ein.
110+
111+ procedure MyForm.Button1Click(Sender: TObject);
112+ begin
113+ TrayIcon1.Icon.LoadFromFile('/phad_zum_icon/icon.ico');
114+ TrayIcon1.ShowHint := True;
115+ TrayIcon1.Hint := 'Mein tooltip';
116+
117+ TrayIcon1.PopUpMenu := MyPopUpMenu;
118+
119+ TrayIcon1.Show;
120+ end;
121+
122+#### Die Alte Variante:
123+
124+Dieses Programm läd ein Icon aus einer internen Ressource (unter Windows) bzw. aus einer externen Datei (unter anderen Plattformen als Windows).
125+
126+Um die Ressource mit dem Icon unter Windows zu erstellen und einzubinden ist folgendes nötig:
127+
128+1\. Erstellen sie ein Ressourcenskript traytest.rc wie dieses:
129+
130+ 101 ICON "icon1.ico"
131+
132+2\. Compilieren sie das Ressourcenskript mittels windres.exe in eine *.res Datei. (Windres ist im Lazarusverzeichnis zu finden) Der Befehl lautet: windres -i traytest.rc -o traytest.res
133+
134+Nun können sie ihr Testprogramm schreiben. Erstellen sie eine neue Anwendung mit einem Formular und fügen sie in die entsprechende Unit folgendes in den Interface-Abschnitt ein:
135+
136+ {$ifdef win32}
137+ {$R traytest.res}
138+ {$endif}
139+
140+Als nächstes benötigen sie noch einen Button. Schreiben sie folgendes in das OnClick-Ereignis des Buttons:
141+
142+``` pascal
143+procedure MyForm.Button1Click(Sender: TObject);
144+const
145+ IDI_ICON1 = 101;
146+begin
147+{$ifdef win32}
148+ SystrayIcon.Icon.Handle := LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
149+ //7. März 2006 - Das laden einer .ico-Datei unter Windows funktioniert nicht
150+{$else}
151+ SystrayIcon.Icon.LoadFromFile('/path_to_icon/icon.ico');
152+ //7. März 2006 - Es kann zu Problemen mit der Darstellung von .ico-Dateien kommen.
153+ //Ist dies der Fall, probieren sie xpm (dies löst das Problem unter FedoraCore 4 / Gnome)
154+{$endif}
155+
156+ SystrayIcon.ShowHint := True;
157+ SystrayIcon.Hint := 'Mein Tooltip';
158+
159+ SystrayIcon.PopUpMenu := MyPopUpMenu;
160+
161+ SystrayIcon.Show;
162+end;
163+```
164+
165+### Subversion
166+
167+Zu finden unter components/trayicon/ im aktuellen Subversion-Verzeichnis
168+
169+### Hilfe, Bugreports und Funktionswünsche
170+
171+Bitte stellen sie Bugreports und Funktionswünsche im [Lazarus Bugtracker](http://bugs.freepascal.org/main_page.php).
172+
173+Hilfsanfragen können in der Lazarus-Maillinglist oder im [Forum](http://www.lazarus.freepascal.org/modules.php?op=modload&name=PNphpBB2&file=index) gestellt werden.
174+
175+### Change Log
176+
177+1. 17/01/2006 - Als Vorschau in der Lazarus-Subversion verfügbar
178+2. 24/01/2006 - stable unter win32, Gnome and Gtk1, aber noch ohne Gtk2-Unterstützung. Lazarus 0.9.12 wurde mit dieser Version veröffentlicht.
179+3. 17/02/2006 - gtk2-Unterstützung in Subversion eingefügt
180+
181+### Technische Details
182+
183+Eine Schwierigkeit in der Entwicklung waren die vielen Unterschiede in der Umsetzung der Implementierungen für den Systemtray unter den unterschiedlichen Betriebssystemen und Windowmanagern unter Linux. Um dies zu lösen, implementiert die Komponente den Satz an minimalen Funktionen, der unter allen Plattformen vorhanden ist. Nachflgend dazu eine Liste der unter den jeweiligen Plattformen implementierten Funktionen:
184+
185+**Windows** - Mehrere Systemtrayicons pro Anwendung werden unterstützt. Außerdem ist es möglich, das Icon mittels des HICON-Handle zu modifizieren. Events des Icons werden über eine spezielle Message im für den Nutzer reservierten Messageraum (\>= WM_USER) zum Fenster, dem das Icon zugeordnet ist, gesendet. Es werden keine Paint-Events an das Fenster gesendet.
186+
187+**Linux (Gnome, KDE, IceWM, etc)** - Mehrere Systemtrayicons pro Anwendung werden unterstützt. Das Bild es Icons ist momentan ein sehr kleines Fenster, und kann gezeichnet werden und Nachrichten empfangen, wie jedes andere Formular.
188+
189+**Linux (WindowMaker, Openbox, etc)** - Unterstützt von Haus aus keine Systemtrayicons. Allerdings gibt es zwei Anwendungen, die dafür Unterstützung anbieten: [Docker](http://icculus.org/openbox/2/docker/) und [WMSystray](http://freshmeat.net/projects/wmsystray/)
190+
191+**Mac OS X** - Dieses System besitzt keine herkömlichen Systemtrayicons, wie sie Windows und Linux haben. Die Komponete nutzt Tray-ähnliche Funktionen von macOS um ein Trayicon bereitzustellen. Jede Anwendung in MacOS besitzt ein Dockicon und die Software kann diesem Dock ein Kontextmenü zuordnen. Dies ist der Weg, wie TrayIcon in der Zukunft arbeiten wird. Ein Kompatibilitätsproblem ist allerdings die Tatsache, das nur ein Dockicon pro Anwendung möglich ist.
192+
193+Hier ist ein Eindruck über das Aussehen zu finden: <http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGMenus/chapter_16_section_6.html>
194+
195+Mit diesen Gedanken wurde eine Komponete erstellt, die alle Platformen unterstützt:
196+
197+- Es ist nur ein Systrayicon pro Anwednung möglich und alle Anwednungen, die ein Systrayicon benutzen, initialisieren dies beim Start. Dazu muss das SystrayIcon-Objekt und nicht seine Klasse verwendet werden. (nötig für macOS)
198+
199+- Zeichnen wird über das TIcon-Objekt ausgeführt. (nötig für Windows)
200+
201+Die folgenden Funktionen sind außerdem verfügbar, funktionieren jedoch nicht auf allen Plattformen:
202+
203+- Mehrere Systemtrayicons (Funktioniert nicht mit macOS)
204+
205+- OnPaint-Event und Canvas-Property um das Icon frei zu zeichnen. Funktioniert nicht unter Windows)
206+
207+### Externe Links
208+
209+- <http://www.codeproject.com/shell/ctrayiconposition.asp> - Code und Theorie um die Position des Trayicons unter Windows zu ermitteln.
210+
211+- <http://cvs.gnome.org/viewcvs/gtk%2B/gtk/gtkstatusicon.c?rev=1.23&view=markup> - Gtk2-Code, der ein gtkstatusicon implementiert
212+
213+---
214+*From the Free Pascal wiki, page "TrayIcon/de", as it stood on 2019-12-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history