{------------------------------------------- -----------------------------}
{اسم الوحدة: trayicon.pas/t/t/t/t/t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t}
{UNIT Author: SaveTime ([email protected] ، http://savetime.delphhibbs.com)}
{تم إنشاء التاريخ: 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/t/t/t/t/t/t/t}
{تغليف معظم وظائف shell_notifyicon وأضف بعض التطبيقات الشائعة /t /t}
{/t/t/t/t/t/t/t/t/t/t/t/t}
{تعليمات للاستخدام:/t/t/t/t/t/t/t/t}
{إذا تم تعيين حدث OndBlclick ، فإن وقت استجابة OnClick سيزيد من getDoubleClicktime.
{خلاف ذلك ، سيتم تنفيذ OnClick على الفور.
{إذا لم يتم تعيين الأيقونة ، فسيتم استخدام أيقونة التطبيق ./t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t}
{تحديث سجل:/t/t/t/t/t/t/t/t/t}
{عندما تنبثق قائمة النقر الأيمن ، لا يمكن للنقر على موقع آخر إغلاق القائمة.
{إضافة: setForeGroundWindow (fwindow) ؛
{/t/t/t/t/t/t/t/t/t/t/t/t}
{المشاكل الحالية:/t/t/t/t/t/t/t/t/t}
{في الوقت الحالي ، يتم دعم نمط shell win95 فقط ، ويتم إضافة وظيفة الإصدار 5.0 الجديد إلى /t /t لاحقًا}
{يجب تحديث وقت الفاصل الزمني DoubleClick مع تغيير إعدادات النظام.
{عند النقر فوق Trayicon ، يجب عليك تعيين ما إذا كنت تريد إحضار التطبيق إلى Foreground./t/t/t}
{/t/t/t/t/t/t/t/t/t/t/t/t}
{------------------------------------------- -----------------------------}
وحدة trayicon ؛
واجهة
يستخدم sysutils ، الفئات ، الرسومات ، عناصر التحكم ، النوافذ ، الرسائل ، النماذج ، القوائم ،
extctrls ، شلابي ؛
يكتب
// ================================================ =========================================
// فئة ttrayicon
// ================================================ =========================================
ttrayicon = فئة (tcomponent)
خاص
fwindow: hwnd ؛
fhint: سلسلة ؛
فيكون: تيكون ؛
واقعية: منطقية ؛
fonclick: tnotifyevent ؛
FondBlclick: tnotifyevent ؛
fpopupmenu: tpopupmenu ؛
Fclicktimer: Timerer ؛
Ficondata: tnotifyicondata ؛
الإجراء checkclicktimer (المرسل: tobject) ؛
الإجراء sendTrayMessage (msgid: dword ؛ flags: uint) ؛
الإجراءات traywndproc (var message: tmessage) ؛
الإجراءات setactive (const value: boolean) ؛
الإجراء seticon (قيمة const: ticon) ؛
الإجراء sethint (قيمة const: سلسلة) ؛
الإجراء setPopUpMenu (قيمة const: tpopupmenu) ؛
محمية
تم تحميل الإجراء ؛
إشعار الإجراء (Acomponent: tcomponent ؛ العملية: Toperation) ؛
عام
إنشاء مُنشئ (مالك: tcomponent) ؛
المدمرة تدمير.
المنشورة
خاصية نشطة: Boolean قراءة واقعية الكتابة الافتراضية الخاطئة ؛
Property تلميح: سلسلة قراءة fhint اكتب sethint ؛
أيقونة الخاصية: Ticon قراءة FICON كتابة seticon ؛
Property popupmenu: tpopupmenu قراءة fpopupmenu كتابة setPopupMenu ؛
Property onClick: tnotifyevent قراءة fonclick اكتب fonclick ؛
Property ondblclick: tnotifyevent قراءة fondblclick اكتب fondblclick ؛
نهاية؛
سجل الإجراءات ؛
تطبيق
سجل الإجراءات ؛
يبدأ
registerComponents ('' 'Savetime' '، [ttrayicon]) ؛
نهاية؛
{ttrayicon}
كونست
WM_CallbackMessage = WM_USER + 100 ؛
الإجراء ttrayicon.checkclicktimer (المرسل: tobject) ؛
يبدأ
fclicktimer.enbabled: = false ؛
إذا تم تعيين (fonclick) ثم fonclick (الذات) ؛
نهاية؛
مُنشئ ttrayicon.create (aleener: tcomponent) ؛
يبدأ
خلق ورث (مالك) ؛
fwindow: = الفئات.
ficon: = ticon.create ؛
fclicktimer: = timerer.create (self) ؛/t // timer الذي يتولى النقر والنقر المزدوج على الفواصل الزمنية
fclicktimer.enbabled: = false ؛
fclicktimer.interval: = getDoubleClickTime ؛
fclicktimer.ontimer: = checkClickTimer ؛
ficondata.cbsize: = sizeof (ficondata) ؛/t // تهيئة بنية الإخطار
ficondata.wnd: = fwindow ؛
ficondata.uid: = uint (الذات) ؛
ficondata.ucallbackMessage: = wm_callbackMessage ؛
نهاية؛
Destructor ttrayicon.destroy ؛
يبدأ
نشط: = خطأ ؛
fclicktimer.free ؛
ficon.free ؛
classes.deallocatehwnd (fwindow) ؛
ورث
نهاية؛
الإجراء ttrayicon.loaded ؛
يبدأ
ورث
إذا كان واقعية ثم
sendTrayMessage (nim_add ، nif_message أو nif_icon أو nif_tip) ؛
نهاية؛
الإجراء ttrayicon.Notification (Acomponent: tcomponent ؛ العملية: Toperation) ؛
يبدأ
الإخطار الموروث (Acomponent ، التشغيل) ؛
إذا (العملية = opremove) و (Acomponent = popupmenu) ثم
popupmenu: = nil ؛
نهاية؛
الإجراء ttrayicon.SendTrayMessage (msgid: dword ؛ flags: uint) ؛
يبدأ
إذا (الأعلام و NIF_ICON) <> 0 ثم
يبدأ
إذا ficon.handle = 0 ثم/t/t // إذا لم يتم تعيين الرمز ، فاستخدم الرمز الافتراضي
ficondata.hicon: = application.icon.handle
آخر
ficondata.hicon: = ficon.handle ؛
نهاية؛
ficondata.uflags: = أعلام ؛
shell_notifyicon (msgid ، @fficondata) ؛
نهاية؛
الإجراء ttrayicon.setactive (قيمة const: منطقية) ؛
يبدأ
واقعية: = القيمة ؛
إذا (لا (CSDesigning في ComponentState)) و
(لا (csloading في ComponentState)) ثم
يبدأ
إذا كانت القيمة ثم
SendTrayMessage (nim_add ، nif_message أو nif_icon أو nif_tip)
آخر
SendTrayMessage (nim_delete ، 0)
نهاية؛
نهاية؛
الإجراء ttrayicon.sethint (قيمة const: سلسلة) ؛
يبدأ
fhint: = القيمة ؛
strplcopy (ficondata.sztip ، pchar (fhint) ، sizeof (ficondata.sztip)) ؛
إذا (لا (CSDesigning في ComponentState)) و
(لا (csloading في ComponentState)) و
واقعية ثم
يبدأ
sendTrayMessage (nim_modify ، nif_tip) ؛
نهاية؛
نهاية؛
الإجراء ttrayicon.seticon (قيمة const: ticon) ؛
يبدأ
ficon.assign (القيمة) ؛
إذا (واقعية وليس (CSDesigning في ComponentState)) ثم
sendTrayMessage (nim_modify ، nif_icon) ؛
نهاية؛
الإجراء ttrayicon.setpopupmenu (قيمة const: tpopupmenu) ؛
يبدأ
fpopupmenu: = القيمة ؛
إذا كانت القيمة <> nil ثم value.freenotification (self) ؛
نهاية؛
الإجراء ttrayicon.traywndproc (var message: tmessage) ؛
var
حزب العمال: tpoint ؛
يبدأ
مع رسالة تفعل
يبدأ
إذا msg = wm_callbackMessage ثم
يبدأ
حالة lparam من
/twm_lbuttondown:
/tbegin
/t // إذا لم يتم تعيين حدث ondblclick ، فاستدعاء onClick مباشرة
/T إذا لم يتم تعيينه (FondBlclick) ثم
/ر
/t إذا تم تعيينه (fonclick) ثم fonclick (self) ؛
/ينزع
/t else // خلاف ذلك ، استخدم الوقت لتحديد ما إذا كان قد وصل وقت النقر المزدوج
/t fclicktimer.enabled: = true ؛
/ينزع؛
/twm_lbuttondblclk:
/tbegin
/t fclicktimer.enabled: = false ؛
/t إذا تم تعيينه (FondBlclick) ثم FondBlclick (self) ؛
/ينزع؛
/twm_rbuttondown:
/tbegin
/T إذا تم تعيينه (FPOPUPMENU) ثم
/ر
/t setforegroundwindow (fwindow) ؛
/t getCursorpos (pt) ؛
/t fpopupmenu.popup (pt.x ، pt.y) ؛
/ينزع؛
/ينزع؛
نهاية؛
نهاية
آخر // يتم تسليم الرسائل الأخرى إلى Windows للمعالجة
النتيجة: = defwindowproc (fwindow ، msg ، wparam ، lparam) ؛
نهاية؛
نهاية؛
نهاية.