TrayIcon/de

From Free Pascal wiki
Jump to navigationJump to search

About

TrayIcon ist eine crossplattformtaugliche Systemtray-Komponente, welche momentan unter folgenden Widgetsets funktioniert: win32, Gtk1, Gnome, Gtk2. Für die Zukunft ist außerdem Carbon ( Mac OS X ) und Qt 4 vorgesehen.

Zwei Schnittstellen werden momentan angeboten: eine visuelle Koponente und ein non-visuelles Objekt. Zweiteres heißt SystrayIcon und ist delphikompatibel. Die visuelle Komponente ist das TTrayIcon, welches nur mit Lazarus funktioniert.

Als Schnelleinstieg siehe: das Demonstrationsprogram.

Dokumentation

Nachfolgend eine Liste mit allen Methoden, Properties und Events, welche 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.

Methoden

Show

procedure Show;

Zeigt das Icon im Systemtray


Hide

procedure Hide;

Entfernt das Icon aus dem Systemtray


GetPosition

function GetPosition: TPoint;

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.

Properties

Hint

property Hint: string;


ShowHint

property ShowHint: Boolean;


PopUpMenu

property PopUpMenu: TPopUpMenu;

Gibt ein Popupmenu an, welches bei Rechtsklick auf das Icon erscheint.

Events

OnPaint

property OnPaint: TNotifyEvent;

Erlaubt eine eigene Zeichenroutine für das Canvas des Icons.

Bemerkung: Arbeitet nicht unter Win32!


OnClick

property OnClick: TNotifyEvent;


OnDblClick

property OnDblClick: TNotifyEvent;


OnMouseDown

property OnMouseDown: TMouseEvent;


OnMouseUp

property OnMouseUp: TMouseEvent;


OnMouseMove

property OnMouseMove: TMouseMoveEvent;

Autoren

Felipe Monteiro de Carvalho

Andrew Haines

Lizenz

Modifizierte LGPL

Download

Status: Stable

Ist bei jeder aktuellen Lazarusinstallation im Ordner lazarus/components/trayicon zu finden.

Installation

Demonstrationsprogram

Dieses Programm läd ein Icon aus einer internen Ressource (unter Windows) bzw. aus einer externen datei (unter anderen Plattformen als Windows).

Um die Ressource mit dem Icon unter Windows zu erstellen und einzubinden ist folgendes nötig:

1. Erstellen sie ein Ressourcenskript traytest.rc wie dieses:

101               ICON                    "icon1.ico"

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

Nu 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:

{$ifdef win32}
  {$R traytest.res}
{$endif}

Als nächste benötigen sie noch einen Button. Schreiben sie folgendes in das OnClick-Event des Buttons:

procedure MyForm.Button1Click(Sender: TObject);
const
  IDI_ICON1         = 101;
begin
{$ifdef win32}
  SystrayIcon.Icon.Handle := LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
  //7. März 2006 - Das laden einer .ico-Datei unter Windows funktioniert nicht
{$else}
  SystrayIcon.Icon.LoadFromFile('/path_to_icon/icon.ico');
  //7. März 2006 - Es kann zu Problemen mit der Darstellung von .ico-Dateien kommen.
  //Ist dies der Fall, probieren sie xpm (dies löst das Problem unter FedoraCore 4 / Gnome)
{$endif}

  SystrayIcon.ShowHint := True;
  SystrayIcon.Hint := 'Mein Tooltip';

  SystrayIcon.PopUpMenu := MyPopUpMenu;

  SystrayIcon.Show;
end;

Subversion

Zu finden unter components/trayicon/ im aktuellen Subversion-Verzeichnis

Hilfe, Bugreports und Funktionswünsche

Bitte stellen sie Bugreports und Funktionswünsche im Lazarus Bugtracker.

Hilfsanfragen können in der Lazarus-Maillinglist oder im Forum gestellt werden.

Change Log

  1. 17/01/2006 - Als Vorschau in der Lazarus-Subversion verfügbar
  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.
  3. 17/02/2006 - gtk2-Unterstützung in Subversion eingefügt

Technische Details

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, welcher unter allen Plattformen vorhanden ist. Nachflgend dazu eine Liste der unter den jeweiligen Plattformen implementierten Funktionen:

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, welchem das Icon zugeordnet ist, gesendet. Es werden keine Paint-Events an das Fenster gesendet.

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.

Linux (WindowMaker, Openbox, etc) - Unterstützt von Haus aus keine Systemtrayicons. Allerdings gibt es zwei Anwendungen, welche dafür Unterstützung anbieten: Docker und WMSystray

Mac OS X - Dieses System besitzt keine herkömlichen Systemtrayicons, wie sie Windows und Linux haben. Die Komponete nutzt Tray-ähnliche Funktionen von MacOS X 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.

Hier ist ein Eindruck über das Aussehen zu finden: http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGMenus/chapter_16_section_6.html

Mit diesen gedanken wurde eine Komponete erstelle, welche alle Platformen unterstützt:

  • Es ist nur ein Systrayicon pro Anwednung möglich und alle Anwednungen, welche ein Systrayicon benutzen, initialisieren dies beim Start. Dazu muss das SystrayIcon-Objekt und nicht seine Klasse verwendet werden. (nötig für MacOS X)
  • Zeichnen wird über das TIcon-Objekt ausgeführt. (nötig für Windows)

Die folgenden Funktionen sind außerdem verfügbar, funktionieren jedoch nicht auf allen Plattformen:

  • Mehrere Systemtrayicons (Funktioniert nicht mit MacOS X)
  • OnPaint-Event und Canvas-Property um das Icon frei zu zeichnen. Funktioniert nicht unter Windows)

Externe Links