หลายๆ คนคิดว่า Delphi เป็นเครื่องมือของ RAD รวมถึงตัวฉันเองที่มีอคติต่อ Delphi ตอนที่ฉันอยู่ในโรงเรียน ตอนนี้ฉันได้ก้าวออกจาก "หอคอยงาช้าง" แล้ว มันได้ครอบคลุมพื้นที่ที่กว้างขึ้นและประสบปัญหามากขึ้น และ ฉันค่อยๆได้รับประสบการณ์ของตัวเอง ในความเป็นจริง Delphi เป็นเครื่องมือในการพัฒนาที่ใช้ภาษา Object Pascal ซึ่งหมายความว่า Delphi เป็นเครื่องมือทางภาษาโดยพื้นฐานและเป็นเชิงวัตถุอย่างแท้จริง ตัวอย่างที่ฉันให้ด้านล่างคือแอปเพล็ตถาดที่ใช้ใน Delphi โปรแกรมนี้สั้นและกระชับพร้อมบริบทที่ชัดเจน ฉันจะอธิบายส่วนสำคัญโดยละเอียด เช่นเดียวกับที่คุณ Hou Junjie ลอก MFC ทีละชั้น วันนี้ฉันต้อง "ปรุงวัว" ด้วย
ใน Delphi เมื่อพูดถึงการเขียนโปรแกรมระบบ จะต้องเรียกใช้ฟังก์ชัน API โดยไม่มีข้อยกเว้น มีต้นแบบของฟังก์ชัน API ที่จะใช้ในหน่วย ShellAPI.pas
แบบฝึกหัดภาคปฏิบัติ:
หนึ่ง. สร้างแอปพลิเคชันใหม่: ไฟล์ -> แอปพลิเคชันใหม่ กำหนดค่าคงที่ของข้อความในส่วนอินเทอร์เฟซ: const WM_NID=WM_USER+1000;
สอง. กำหนดตัวแปรส่วนกลาง: NotifyIcon:TNotifyIconData เป็นตัวแปรที่สำคัญมาก TNotifyIconData เป็นประเภทบันทึก กดปุ่ม Ctrl ค้างไว้แล้วดับเบิลคลิก TNotifyIconData เพื่อเข้าสู่หน่วย ShellAPI.pas (หมายเหตุ: ใน Delphi นี่เป็นวิธีวิเคราะห์ซอร์สโค้ดที่ดีมาก ซอร์สโค้ดพูดเพื่อตัวเอง หากคุณต้องการทราบเรื่องราวเบื้องหลังโปรแกรมวิธีที่ดีที่สุดคือวิเคราะห์ซอร์สโค้ด!) ในตอนนี้ เวลา ต่อไปนี้จะปรากฏขึ้นคำสั่งการมอบหมาย:
TNotifyIconData = TNotifyIconDataA ความหมายนี้ชัดเจนมาก กล่าวคือ TNotifyIconData และ TNotifyIconDataA เป็นประเภทข้อมูลเดียวกัน จากนั้นมองลงไป:
TNotifyIconDataA = _NOTIFYICONDATAA ความหมายเหมือนเดิม มองลงไป:
พิมพ์
_NOTIFYICONDATAA = บันทึก
cbSize: DWord;
Wnd: HWND;
UID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hไอคอน: HICON;
szTip: อาร์เรย์ [0..63] ของ AnsiChar;
จบ;
นี่มันจริงๆ “ออกมาแล้วหลังจากถูกเรียกมานานแต่ยังจับปี่ปาครึ่งหน้าซ่อนอยู่” ตอนนี้ทุกคนชัดเจนมาก ตัวแปรส่วนกลาง NotifyIcon ที่เราเพิ่งกำหนดไว้นั้นเป็นตัวแปรประเภทบันทึกที่มีส่วนประกอบ 7 รายการซึ่งเทียบเท่ากับตัวแปรโครงสร้างใน C/C++ (โปรแกรมเมอร์ C/C++ น่าจะคุ้นเคยเป็นอย่างดี) เรามาอธิบายการทำงานของแต่ละส่วนของประเภทเรคคอร์ดทั้งเจ็ดส่วนทีละรายการ
1> cbSize คือขนาดของตัวแปร NotifyIcon ที่คุณกำหนด ซึ่งสามารถรับได้โดยใช้ SizeOf(TNotifyIconData) หากคุณเป็นโปรแกรมเมอร์ C/C++ ที่เชี่ยวชาญ คุณควรจะคุ้นเคยกับมัน ใน C/C++ เมื่อใดก็ตามที่คุณต้องการจัดสรรหน่วยความจำสำหรับตัวแปรโครงสร้าง คุณต้องใช้ SizeOf(Struct type) เพื่อทราบจำนวนหน่วยความจำที่จำเป็นในการจัดเก็บตัวแปรโครงสร้างดังกล่าว
2> Wnd เป็นตัวจัดการ รูปแบบใดที่คุณต้องการให้ข้อความที่สร้างโดยโปรแกรมถาดจัดการ เพียงแค่ให้ Wnd ชี้ไปที่แบบฟอร์มนั้น
ตัวอย่างเช่น เมื่อคุณต้องการคลิกไอคอนถาดเล็กๆ บนทาสก์บาร์เพื่อสลับแบบฟอร์มระหว่าง "แสดง" และ "ซ่อน" ให้ชี้ Wnd ไปที่แบบฟอร์มหลัก
3> uID: หากคุณต้องการสร้างแอปเพล็ตหลายถาด จะแยกแยะได้อย่างไร โดดเด่นด้วยหมายเลขประจำตัวนี้
3> uFlags เป็นบิตแฟล็ก ซึ่งระบุคุณสมบัติของโปรแกรมถาดที่สร้างขึ้นในปัจจุบัน:
NIF_ICON บ่งชี้ว่าไอคอนที่ตั้งค่าไว้ในปัจจุบัน (นั่นคือ ค่าของ hIcon) นั้นถูกต้อง
NIF_MESSAGE บ่งชี้ว่าข้อความระบบที่ตั้งไว้ในปัจจุบัน (นั่นคือ ค่าของ uCallBackMessage) ถูกต้อง
NIF_TIP บ่งชี้ว่าแถบทิปที่ตั้งไว้ในปัจจุบัน (นั่นคือ ค่าของ szTip) นั้นถูกต้อง
4> uCallBackMessage นี่เป็นส่วนที่สำคัญที่สุดใน 7 ส่วน ระบุข้อความติดต่อกลับที่นี่ กล่าวคือ กำหนดชื่อข้อความที่นี่ เมื่อคุณคลิกหรือคลิกขวาที่ไอคอนถาด ชื่อข้อความที่กำหนดใน uCallBackMessage จะถูกส่งไปยังแบบฟอร์มที่ Wnd ชี้ไป จากนั้นคุณกำหนด ฟังก์ชั่นข้อความออกในโปรแกรมเพื่อประมวลผลข้อความนี้ ด้วยวิธีนี้ ชุดข้อความทั้งหมดที่เกี่ยวข้องกับ Windows จะถูกประมวลผล
6> hIcon คือที่จับของไอคอนถาด คุณสามารถเพิ่ม แก้ไข และลบไอคอนได้
7> szTip คือข้อความแจ้งที่ปรากฏขึ้นเมื่อคุณวางเมาส์บนไอคอนขนาดเล็กในถาดแถบงาน
ที่นี่ฉันใช้หมึกไปมากมายเพื่อแนะนำเรื่องราวภายในของ TNotifyIconData เมื่อส่วนนี้ได้รับการชี้แจงแล้ว ส่วนที่เหลือจะเข้าที่
สาม. คลิกสองครั้งที่แบบฟอร์มหลักเพื่อเข้าสู่พื้นที่โค้ดของ FormCreate:
TForm1.FormCreate (ผู้ส่ง: TObject);
เริ่ม
//NotifyIcon เป็นตัวแปรส่วนกลางและถูกกำหนดไว้ที่ตอนเริ่มต้นของโปรแกรม
ด้วย NotifyIcon ทำ
เริ่ม
cbSize:=ขนาดของ(TNotifyIconData);
Wnd:=Handle; //จัดการชี้ไปที่แบบฟอร์มปัจจุบัน Form1
ยูไอดี:=1;
uFlags:=NIM_ICON หรือ NIM_MESSAGE หรือ NIM_TIP;
uCallBackMessage:=WM_NID;
hIcon:=application.Icon.Handle;
szTip:=”ชายหนุ่มผู้ชั่วร้ายแห่งตระกูล Zhang”;
จบ;.
//เพิ่มตัวแปรชุด NotifyIcon ให้กับระบบเพื่อการประมวลผล
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
จบ;
สี่. ขั้นตอนต่อไปคือการกำหนดฟังก์ชันการประมวลผลข้อความ เมื่อระบบส่งข้อความไปยังแบบฟอร์ม ก็จะถูกประมวลผลโดยฟังก์ชันต่อไปนี้ ฟังก์ชันการประมวลผลข้อความแต่ละฟังก์ชันจะประมวลผลข้อความบางประเภท โปรดพิจารณาความแตกต่างระหว่างคำจำกัดความของเนื้อหาฟังก์ชันด้านล่างและคำจำกัดความของฟังก์ชันทั่วไปให้ละเอียดยิ่งขึ้น: ฟังก์ชันการประมวลผลข้อความจะต้องเพิ่มชื่อของข้อความที่ส่วนท้าย ดังนั้น เมื่อระบบส่งข้อความ เมื่อมีข้อความ WM_NID เข้ามา ฟังก์ชั่นการประมวลผลข้อความ WMNID จะถูกทริกเกอร์โดยอัตโนมัติ
ขั้นตอน WMNID (var msg: TMessage); ข้อความ WM_NID;
เริ่ม
case msg.Lพารามิเตอร์ของ
WM_LBUTTONUp; Form1.Visible:=ไม่ใช่ Form1.Visible;
WM_RBUTTONUP: ShowMessage('คุณคลิกปุ่มขวา');
จบ;
จบ;
โปรแกรมที่ง่ายที่สุดถือกำเนิดขึ้น ทุกคนสามารถตั้งค่าไอคอนที่ต้องการได้
โครงการ -> ตัวเลือก เลือกหน้าแอปพลิเคชัน และโหลดไอคอนที่คุณชื่นชอบในรายการไอคอน เพื่อที่ว่าเมื่อโปรแกรมกำลังทำงาน ไอคอนที่คุณชื่นชอบจะปรากฏบนทาสก์บาร์ เมื่อคุณคลิกที่ไอคอน แบบฟอร์ม Form1 จะสลับระหว่างมองเห็นและมองไม่เห็น กล่าวคือ คลิกเพื่อแสดง และคลิกอีกครั้งเพื่อซ่อน เมื่อคุณคลิกขวาที่ไอคอน ข้อความจะปรากฏขึ้น: "คุณคลิกปุ่มขวา"
ห้า. สุดท้ายนี้ อย่าลืมปล่อยโปรแกรมถาดที่สร้างขึ้นเมื่อปิดแอปพลิเคชัน ไม่เช่นนั้นโปรแกรมจะใช้ทรัพยากรระบบ
TForm1.FormDestroy (ผู้ส่ง: TObject);
เริ่ม
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
จบ;
เกือบครึ่งปีแล้วที่ฉันเรียนจบ ฉันยังไม่เข้าใจหลายๆ อย่างในโรงเรียน และความเข้าใจของฉันยังไม่ลึกซึ้งพอ เมื่อออกไปสู่สังคม ฉันได้พบเพื่อนลัทธิเต๋ามากมาย และฉันก็ได้รับประโยชน์มากมาย เมื่อฉันมีประสบการณ์ ฉันอยากจะเขียนเป็นคำพูดเพื่อสรุปสิ่งที่ฉันได้เรียนรู้มา ประการที่สอง มาสื่อสารกับทุกคนกันเถอะ
E_Mail: [email protected] QQ: 8133413 เด็กเลวแห่งตระกูลจาง