ตัวอย่างในบทความนี้จะอธิบายว่า Delphi ตระหนักถึงความสามารถของฟอร์มในการตรวจจับการเลื่อนเมาส์ไปเหนือและซ่อนและแสดงหน้าต่างโดยอัตโนมัติได้อย่างไร แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ วิธีการดำเนินการเฉพาะมีดังนี้:
const WM_MouseEnter = $B013; WM_MouseLeave = $B014; พิมพ์ TfrmMain = class(TForm) ขั้นตอน R *.dfm} TfrmMain.WMMouseEnter(var Msg: TMessage);begin if(Top<0) แล้ว start Top := 0; //เพื่อให้แน่ใจว่าแบบฟอร์มแบบเลื่อนลงจะแสดงที่ด้านหน้า SetWindowPos(Handle,HWND_TOPMOST,0,0,0 ,0, SWP_NOMOVE หรือ SWP_NOSIZE); //ผลักดันแบบฟอร์มไปที่ด้านหน้า SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE หรือ SWP_NOSIZE); //จากนั้นยกเลิกแบบฟอร์มไปที่ส่วนหน้า; Timer1.Enabled := True;end;//ขึ้นอยู่กับ จับเวลา ตรวจสอบเป็นประจำว่าเมาส์ยังอยู่ในขอบเขตของแบบฟอร์มหรือไม่ // สิ่งนี้สามารถหลีกเลี่ยงการสูญเสียขั้นตอนเหตุการณ์ MOUSELEAVE เนื่องจากการเคลื่อนไหวอย่างรวดเร็วของเมาส์ TfrmMain.Timer1Timer(Sender: TObject);var rc:TRECT; pt:TPOINT;begin GetWindowRect(self.Handle,rc); // รับพื้นที่สี่เหลี่ยมของแบบฟอร์ม GetCursorPos(pt); ตำแหน่ง if( ไม่ใช่ PtInRect(rc,pt)) จากนั้น //หากเมาส์ไม่อยู่ในขอบเขตของแบบฟอร์ม ให้เริ่มถ้า (Top = 0) จากนั้น //หากแนบแบบฟอร์มไว้ที่ขอบด้านบนของหน้าจอ ให้ย้ายแบบฟอร์มที่ซ่อนอยู่ขึ้นด้านบน := 0-Height+2; end; Timer1.Enabled := False; ถูกซ่อน SetWindowPos(Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE หรือ SWP_NOSIZE); // ดันแบบฟอร์มไปที่ส่วนหน้า;
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Delphi ของทุกคน