{--------------------------------------------- -------------------------}
{ชื่อหน่วย: trayicon.pas/t/t/t/t/t/t/t}
{/T/T/T/T/T/T/T/T/T/T/T/T/T}
{หน่วยผู้เขียน: Savetime ([email protected], http://savetime.delphibbs.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/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/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}
{อัปเดตประวัติ:/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/T/T}
{ในขณะนี้รองรับเฉพาะ Win95 Shell Style และฟังก์ชั่นเวอร์ชัน 5.0 ใหม่จะถูกเพิ่มลงใน /t /t ในภายหลัง}
{เวลาช่วงเวลา doubleclick ควรได้รับการอัปเดตเมื่อการตั้งค่าระบบเปลี่ยนไป/t/t/t}
{เมื่อคลิก trayicon คุณควรตั้งค่าว่าจะนำแอปพลิเคชันไปที่เบื้องหน้า/t/t/t}
{/T/T/T/T/T/T/T/T/T/T/T/T/T}
{--------------------------------------------- -------------------------}
หน่วย Trayicon;
ส่วนต่อประสาน
ใช้ sysutils, คลาส, กราฟิก, การควบคุม, windows, ข้อความ, รูปแบบ, เมนู,
extctrls, Shellapi;
พิมพ์
// ==================================================== =============================================
// ttrayicon class
// ==================================================== =============================================
ttrayicon = คลาส (tComponent)
ส่วนตัว
FWINDOW: HWND;
Fhint: String;
Ficon: Ticon;
Factive: บูลีน;
fonclick: tnotifyevent;
fondblclick: tnotifyevent;
FPOPUPMENU: TPOPUPMENU;
fclicktimer: ttimer;
ficondata: tnotifyicondata;
CheckClickTimer ขั้นตอน (ผู้ส่ง: TOBJECT);
ขั้นตอน sendtrayMessage (msgid: dword; ธง: uint);
ขั้นตอน traywndproc (ข้อความ var: tmessage);
ขั้นตอน setActive (ค่า const: บูลีน);
ขั้นตอน seticon (ค่า const: ticon);
ขั้นตอน sethint (ค่า const: สตริง);
ขั้นตอน setPopUpMenu (ค่า const: tpopupMenu);
ได้รับการคุ้มครอง
โหลดขั้นตอน;
การแจ้งเตือนขั้นตอน (ACOMPONENT: TCOMPONENT; การดำเนินการ: TOPERATION);
สาธารณะ
ตัวสร้างสร้าง (AOWNER: TCOMPONENT);
Destructor ทำลาย;
ที่ตีพิมพ์
คุณสมบัติที่ใช้งานอยู่: บูลีนอ่านข้อเท็จจริงการเขียนค่าเริ่มต้นที่ผิดพลาด
คำแนะนำคุณสมบัติ: สตริงอ่าน fhint เขียน sethint;
ไอคอนคุณสมบัติ: Ticon อ่าน ficon เขียน seticon;
Property PopupMenu: tpopupMenu อ่าน fpopupmenu เขียน setPopUpMenu;
คุณสมบัติ onclick: tnotifyevent อ่าน fonclick เขียน fonclick;
คุณสมบัติ ondblclick: tnotifyevent อ่าน fondblclick เขียน fondblclick;
จบ;
ขั้นตอนการลงทะเบียน;
การดำเนินการ
ขั้นตอนการลงทะเบียน;
เริ่ม
registercomponents ('' savetime '', [ttrayicon]);
จบ;
{ttrayicon}
const
WM_CALLBACKMESSAGE = WM_USER + 100;
ขั้นตอน ttrayicon.checkclicktimer (ผู้ส่ง: tobject);
เริ่ม
fclicktimer.enabled: = false;
ถ้าได้รับมอบหมาย (fonclick) จากนั้น fonclick (ตัวเอง);
จบ;
constructor ttrayicon.create (aowner: tComponent);
เริ่ม
สืบทอดมาสร้าง (aowner);
fwindow: = classes.allocatehwnd (traywndproc);
ficon: = ticon.create;
fclicktimer: = ttimer.create (self);/t // ตัวจับเวลาที่จัดการกับการคลิกและคลิกสองครั้ง
fclicktimer.enabled: = false;
fclicktimer.interval: = getDoubleClicktime;
fclicktimer.ontimer: = checkclicktimer;
ficondata.cbsize: = sizeof (ficondata);/t // เริ่มต้นโครงสร้าง notifyicondata
ficondata.wnd: = fwindow;
ficondata.uid: = uint (ตัวเอง);
ficondata.ucallbackMessage: = wm_callbackMessage;
จบ;
destructor ttrayicon.destroy;
เริ่ม
ใช้งาน: = false;
fclicktimer.free;
ficon.free;
classes.deallocatehwnd (fwindow);
สืบทอด;
จบ;
ขั้นตอน ttrayicon.loaded;
เริ่ม
สืบทอด;
ถ้ามีข้อเท็จจริงแล้ว
SendTrayMessage (NIM_ADD, NIF_MESSAGE หรือ NIF_ICON หรือ NIF_TIP);
จบ;
ขั้นตอน ttrayicon.notification (Acomponent: TComponent; การดำเนินการ: toperation);
เริ่ม
การแจ้งเตือนที่สืบทอดมา (Acomponent, การดำเนินการ);
if (Operation = opremove) และ (acomponent = popupmenu) แล้ว
popupmenu: = nil;
จบ;
ขั้นตอน ttrayicon.sendtrayMessage (MSGID: DWORD; FLAGS: UINT);
เริ่ม
if (flags และ nif_icon) <> 0 แล้ว
เริ่ม
หาก ficon.handle = 0 แล้ว/t/t // หากไม่ได้ตั้งค่าไอคอนให้ใช้ไอคอนเริ่มต้น
ficondata.hicon: = application.icon.handle
อื่น
ficondata.hicon: = ficon.handle;
จบ;
ficondata.uflags: = ธง;
shell_notifyicon (msgid, @ficondata);
จบ;
ขั้นตอน ttrayicon.setactive (ค่า const: บูลีน);
เริ่ม
ข้อเท็จจริง: = ค่า;
ถ้า (ไม่ใช่ (csdesigning ในส่วนประกอบ)) และ
(ไม่ใช่ (csloading ในส่วนประกอบ)) แล้ว
เริ่ม
ถ้าค่าแล้ว
SendTrayMessage (NIM_ADD, NIF_MESSAGE หรือ NIF_ICON หรือ NIF_TIP)
อื่น
SendTrayMessage (NIM_DELETE, 0)
จบ;
จบ;
ขั้นตอน ttrayicon.Sethint (ค่า const: String);
เริ่ม
fhint: = ค่า;
strplcopy (ficondata.sztip, pchar (fhint), sizeof (ficondata.sztip));
ถ้า (ไม่ใช่ (csdesigning ในส่วนประกอบ)) และ
(ไม่ใช่ (csloading ในส่วนประกอบ)) และ
ข้อเท็จจริงแล้ว
เริ่ม
sendtrayMessage (nim_modify, nif_tip);
จบ;
จบ;
ขั้นตอน ttrayicon.seticon (ค่า const: ticon);
เริ่ม
ficon.assign (ค่า);
ถ้า (ข้อเท็จจริงและไม่ (csdesigning ในส่วนประกอบ)) แล้ว
sendtrayMessage (nim_modify, nif_icon);
จบ;
ขั้นตอน TTRAYICON.SETPOPUPMENU (ค่า const: TPOPUPMENU);
เริ่ม
FPOPUPMENU: = ค่า;
ถ้าค่า <> ไม่มีค่าการกำหนดค่าการกำหนดค่า (ตนเอง);
จบ;
ขั้นตอน ttrayicon.traywndproc (ข้อความ var: tmessage);
วาจา
pt: tpoint;
เริ่ม
ด้วยข้อความทำ
เริ่ม
ถ้า msg = wm_callbackMessage แล้ว
เริ่ม
กรณี lparam ของ
/TWM_LBUTTONDOWN:
/tbegin
/t // หากไม่ได้ตั้งค่าเหตุการณ์ ondblclick ให้โทรหา onclick โดยตรง
/t ถ้าไม่ได้รับมอบหมาย (fondblclick) แล้ว
/t เริ่มต้น
/t ถ้าได้รับมอบหมาย (fonclick) จากนั้น fonclick (ตัวเอง);
/มีแนวโน้ม
/T อื่น // มิฉะนั้นใช้เวลาในการพิจารณาว่าเวลาดับเบิลคลิกที่ถึงแล้ว
/t fclicktimer.enabled: = true;
/มีแนวโน้ม;
/TWM_LBUTTONDBLCLK:
/tbegin
/t fclicktimer.enabled: = false;
/t ถ้าได้รับมอบหมาย (fondblclick) จากนั้น fondblclick (ตัวเอง);
/มีแนวโน้ม;
/TWM_RBUTTONDOWN:
/tbegin
/t ถ้าได้รับมอบหมาย (fpopupmenu) จากนั้น
/t เริ่มต้น
/t setforegroundwindow (fwindow);
/t getCursorpos (PT);
/t fpopupMenu.popup (pt.x, pt.y);
/มีแนวโน้ม;
/มีแนวโน้ม;
จบ;
จบ
อื่น // ข้อความอื่น ๆ ถูกส่งไปยัง Windows สำหรับการประมวลผล
ผลลัพธ์: = defwindowProc (fwindow, msg, wparam, lparam);
จบ;
จบ;
จบ.