{--------------------------------------------- ------------------------------}
{Einheitsname: Trayicon.pas/t/t/t/t/t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t/t}
{Einheit Autor: Savetime ([email protected], http://savetime.delphhibbs.com)}
{Erstelltes Datum: 2004-11-13 12: 20: 54/t/t/t/t/t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t/t}
{Funktion Einführung:/t/t/t/t/t/t/t/t/t/t}
{Einkapseln Sie die meisten Funktionen von Shell_notifyicon ein und fügen Sie einige allgemeine Anwendungen hinzu /t /t}
{/t/t/t/t/t/t/t/t/t/t/t/t/t}
{Anweisungen für die Verwendung:/t/t/t/t/t/t/t/t}
{Wenn das ONDBLCLICK -Ereignis festgelegt ist, erhöht die Reaktionszeit von Onclick GetDouBleClickTime.
{Ansonsten wird Onclick sofort ausgeführt./t/t/t/t/t/t}
{Wenn das Symbol nicht festgelegt ist, wird das Anwendungssymbol verwendet./t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t/t}
{Update History:/t/t/t/t/t/t/t/t/t/t}
{Wenn das Menü mit der rechten Maustaste angezeigt wird, kann das Menü nicht geschlossen werden.
{Add: setforecroundWindow (fwindow);
{/t/t/t/t/t/t/t/t/t/t/t/t/t}
{Bestehende Probleme:/t/t/t/t/t/t/t/t/t/t}
{Vorerst wird nur Win95 -Shell -Stil unterstützt und die neue Version 5.0 wird später zu /T /T hinzugefügt}}
{DoubleClick -Intervallzeit sollte aktualisiert werden, wenn sich die Systemeinstellungen ändern./t/t/t}
{Wenn Sie auf Trayicon klicken, sollten Sie festlegen, ob die Anwendung in den Vordergrund stellt ./t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t/t}
{--------------------------------------------- ------------------------------}
Einheits -Trayicon;
Schnittstelle
Verwendet Systeme, Klassen, Grafiken, Steuerelemente, Fenster, Nachrichten, Formulare, Menüs,
Extctrls, Shellapi;
Typ
// =================================================== ==============================================
// Ttrayicon -Klasse
// =================================================== ==============================================
Ttrayicon = Klasse (tcomponent)
Privat
Fwindow: hwnd;
FHINT: String;
Ficon: Ticon;
Faktiv: Boolean;
Fonclick: tnotifyEvent;
Fondblclick: tnotifyEvent;
FpopupMenu: tpopupMenu;
Fclickimer: ttimer;
Ficondata: tnotifyicondata;
Prozedur -CheckClickTimer (Absender: Tobject);
Prozedur sendTrayMessage (MSGID: DWORD; Flags: Uint);
PROCEDURE TAYWNDPROC (VAR -Nachricht: tmessage);
Prozedur setActive (const value: boolean);
Prozedur Seticon (const -Wert: Ticon);
Prozedur SetHint (const value: String);
Prozedur setpopupMenu (const -Wert: tpopupMenu);
geschützt
Verfahren geladen;
Verfahrensmeldung (Akomponent: TComponent; Operation: Toperation);
öffentlich
Konstruktor create (aowner: tcomponent);
Zerstörer zerstören;
veröffentlicht
Eigenschaft aktiv: boolean read factive write setActive Standard Falsch;
Eigenschafts -Hinweis: String Lesen Sie FHINT Write Sethint;
Eigentumssymbol: Ticon Read Ficon Write Seticon;
Property PopupMenu: tpopupMenu lesen fpopupMenu write setpopupMenu;
Eigenschaft Onclick: TnotifyEvent lesen Fonclick Write Fonclick;
Eigenschaft Ondblclick: TnotifyEvent Read Fondblcick Schreiben Sie FondblClick;
Ende;
Verfahrensregister;
Durchführung
Verfahrensregister;
Beginnen
RegisterComponents ('' Savetime '', [Ttrayicon]);
Ende;
{Ttrayicon}
Const
WM_CALLBACKMESSAGE = WM_USER + 100;
procedure ttrayicon.checkClickTimer (Absender: tobject);
Beginnen
FclickTimer.Enabled: = false;
wenn zugewiesen (fonclick) dann fonclick (self);
Ende;
Konstruktor Ttrayicon.create (Aowner: tcomponent);
Beginnen
ererbte erstellen (aowner);
FWINDOW: = Klassen.
Ficon: = Ticon.Create;
Fclickimer: = ttimer.create (self);/t // Timer, der Klick- und Doppelklick-Intervalle behandelt
FclickTimer.Enabled: = false;
Fclickimer.interval: = getDouBleClickTime;
Fclickimer.ontimer: = checkClickTimer;
Ficondata.cbsize: = sizeof (ficondata);/t // initialisieren Sie die notifyicondata -Struktur
Ficondata.wnd: = fwindow;
Ficondata.uid: = uint (self);
Ficondata.ucallbackMessage: = wm_callbackMessage;
Ende;
Destruktor Ttrayicon.Destroy;
Beginnen
Aktiv: = falsch;
Fclickimer.free;
Ficon.Free;
Classes.dealloccessHwnd (fwindow);
geerbt;
Ende;
Prozedur Ttrayicon.LOAD;
Beginnen
geerbt;
Wenn factive dann
SendTrayMessage (nim_add, nif_message oder nif_icon oder nif_tip);
Ende;
Verfahren Ttrayicon.Notification (Akomponent: tcomponent; Operation: Toperation);
Beginnen
ererbte Benachrichtigung (Akomponent, Operation);
if (operation = opremove) und (acomponent = popupMenu) dann dann
PopupMenu: = nil;
Ende;
procedure ttrayicon.sendtrayMessage (MSGID: DWORD; Flags: uint);
Beginnen
if (Flags und Nif_icon) <> 0 dann
Beginnen
Wenn ficon.handle = 0 dann/t/t // Wenn das Symbol nicht festgelegt ist, verwenden Sie das Standard -Symbol
Ficondata.hicon: = application.icon.handle
anders
Ficondata.hicon: = ficon.handle;
Ende;
Ficondata.ufags: = flags;
Shell_notifyicon (msgid, @ficondata);
Ende;
Prozedur ttrayicon.setActive (const -Wert: boolean);
Beginnen
Faktiv: = Wert;
if (nicht (CSDesigning im Komponentstat)) und
(nicht (CSLOADING IN COMPONENTSTATE)) dann
Beginnen
Wenn Wert dann
SendTrayMessage (nim_add, nif_message oder nif_icon oder nif_tip)
anders
SendTrayMessage (nim_delete, 0)
Ende;
Ende;
Prozedur ttrayicon.setHinT (const value: String);
Beginnen
FHINT: = Wert;
Strplcopy (Ficondata.sztip, pchar (fhint), sizeof (ficondata.sztip));
if (nicht (csDesigning in componentState)) und
(nicht (CSLOADING IN COMPONENTSTATE)) und
Faktiv dann
Beginnen
SendTrayMessage (nim_modify, nif_tip);
Ende;
Ende;
Verfahren ttrayicon.seticon (const value: ticon);
Beginnen
Ficon.assisign (Wert);
if (factiv und nicht (csdesigning in componentState) dann)
SendTrayMessage (nim_modify, nif_icon);
Ende;
Prozedur ttrayicon.setpopupMenu (const -Wert: tpopupMenu);
Beginnen
FpopupMenu: = Wert;
Wenn Wert <> nil, dann value.freenotification (self);
Ende;
procedure ttrayicon.traywndproc (var message: tmessage);
var
Pt: tpoint;
Beginnen
mit Nachricht tun
Beginnen
Wenn msg = wm_callbackMessage dann dann
Beginnen
Fall lparam von
/TWM_LBUTTONDOWN:
/tbegin
/t // Wenn das ONDBLCLICK -Ereignis nicht festgelegt ist, rufen Sie direkt anclick an
/t Wenn nicht zugewiesen (fondblclick) dann
/t beginnen
/t if zugewiesen (fonclick) dann fonclick (self);
/t Ende
/t sonst // ansonsten verwenden Sie die Zeit, um festzustellen, ob die Doppelklickzeit erreicht ist
/t fclickimer.enabled: = true;
/neigen;
/TWM_LBUTTONDBLCLK:
/tbegin
/t fclickimer.enabled: = false;
/t if zugewiesen (fondblclick) dann fondblclick (self);
/neigen;
/TWM_RBUTTONDOWN:
/tbegin
/t Wenn zugewiesen (fpopupMenu) dann
/t beginnen
/TEILSECOREWINDOW (FWINDOW);
/t GetCursorpos (PT);
/t fpopupMenu.popup (pt.x, pt.y);
/t Ende;
/neigen;
Ende;
Ende
sonst // andere Nachrichten werden zur Verarbeitung an Windows übergeben
Ergebnis: = defwindowproc (fwindow, msg, wparam, lparam);
Ende;
Ende;
Ende.