การใช้เทคโนโลยีการเชื่อมต่อใน Delphi:
ด้วยความก้าวหน้าอย่างต่อเนื่องของเทคโนโลยีซอฟต์แวร์ ส่วนต่อประสานซอฟต์แวร์มีความสวยงามมากขึ้นเรื่อยๆ และการดำเนินการก็สะดวกยิ่งขึ้น
เมื่อดูซอฟต์แวร์มืออาชีพต่างๆ ในตลาด เราจะพบว่าส่วนใหญ่มีฟังก์ชันการเชื่อมต่อแบบฟอร์ม โดยเฉพาะซอฟต์แวร์เครื่องมือ ซึ่งโดยพื้นฐานแล้วจะมีฟังก์ชันการเชื่อมต่อไม่มากก็น้อย
โดยปกติแล้ว Delphi ยังรองรับการเชื่อมต่อ และมีการบูรณาการอย่างใกล้ชิดกับ VCL ซึ่งเป็นประโยชน์อย่างยิ่งสำหรับโปรแกรมเมอร์ Delphi ส่วนใหญ่ มาประหยัดเวลาในการเขียนโค้ดที่น่าเบื่อกันเถอะ มุ่งเน้นไปที่แนวคิดของโปรแกรมหลัก
ให้เราตรวจสอบโครงสร้างของ VCL ก่อน มีคุณสมบัติ DockSite (บูลีน) ในคลาส TWinControl หน้าที่ของมันคืออนุญาตให้เชื่อมต่อการควบคุมอื่น ๆ กับมัน มีคุณสมบัติ DragKind ในคลาส TControl หากต้องการเชื่อมต่อกับส่วนควบคุมอื่นๆ ให้ตั้งค่าคุณสมบัติ DragKind เป็น dkDock ง่ายมาก เพียงตั้งค่าคุณสมบัติ จากนั้นโปรแกรมที่รองรับการเชื่อมต่อก็เสร็จสมบูรณ์
แน่นอนว่าข้างต้นเป็นเพียงขั้นตอนพื้นฐานที่สุด ด้วยสองขั้นตอนข้างต้น เราสามารถเขียนโค้ดต่อไปเพื่อใช้ฟังก์ชันที่ซับซ้อนมากขึ้นได้
โดยทั่วไป โปรแกรมที่รองรับการเชื่อมต่อสามารถเชื่อมต่อได้ที่ด้านบน ล่าง ซ้าย และขวาของหน้าต่างหลัก กล่าวคือ ควรวางตัวควบคุมที่สามารถเชื่อมต่อไว้ที่ด้านข้างของหน้าต่างหลักได้ดีกว่า (ตราบเท่าที่ พวกเขาสืบทอดมาจาก TWinControl) โดยทั่วไปเราจะเลือก TPanel เพื่ออำนวยความสะดวกในการทำความเข้าใจของผู้อ่าน เราสามารถสรุปได้ว่าด้านซ้ายของหน้าต่างหลักสามารถเชื่อมต่อได้ ดังนั้นให้วางแอตทริบิวต์ Align บนหน้าต่างหลักด้วย แผงของ lLeft มีชื่อว่า LeftDockPanel ความกว้างคือ 0 และแอตทริบิวต์ DockSite เป็น True แน่นอนว่า LeftDockPanel ของเราควรจะสามารถเปลี่ยนขนาดได้ ดังนั้นให้ใส่ TSplitter ทางด้านขวาของมัน ชื่อ LeftSplitter และแอตทริบิวต์ Align คือ ทั้งหมดซ้าย ถัดไปคือตัวควบคุมการเชื่อมต่อ โดยทั่วไป ตัวควบคุมการเชื่อมต่อโปรแกรมคือแบบฟอร์ม ดังนั้นเราจึงสร้างแบบฟอร์มและตั้งชื่อเป็น DockableForm คุณสมบัติ DragKind ถูกตั้งค่าเป็น dkDock และคุณสมบัติ DragMode ถูกตั้งค่าเป็น dmAutomatic (การเชื่อมต่ออัตโนมัติ)
ตอนนี้เราสามารถรันโปรแกรมนี้ได้แล้วล่ะ? ไม่มีประสิทธิภาพ? แบบฟอร์มที่เทียบท่าจะหายไปหลังจากถูกเทียบท่า!
โอ้ ฉันเกือบลืมไปแล้วว่า Delphi จะสร้างเหตุการณ์บางอย่างเมื่อแบบฟอร์มที่เชื่อมต่อถูกเชื่อมต่อแล้ว
1. OnDockOver (ผู้ส่ง: TObject; ที่มา: TDragDockObject;
X, Y: จำนวนเต็ม; สถานะ: TDragState; var ยอมรับ: บูลีน);
2. OnDockDrop (ผู้ส่ง: TObject; ที่มา: TDragDockObject;
X, Y: จำนวนเต็ม);
3. OnGetSiteInfo (ผู้ส่ง: TObject; DockClient: TControl;
var InfluenceRect: TRect; MousePos: TPoint; var CanDock: บูลีน);
4. OnStartDock (ผู้ส่ง: TObject;
var DragObject: TDragDockObject);
5. OnEndDock (ผู้ส่ง เป้าหมาย: TObject; X, Y: จำนวนเต็ม);
6. OnUnDock (ผู้ส่ง: TObject; ลูกค้า: TControl;
เป้าหมายใหม่: TWinControl; var อนุญาต: บูลีน);
ว้าว เยอะมาก ไม่ต้องกังวล ขออธิบายแบบละเอียดนะครับ:
มาดูเหตุการณ์แรกกันก่อน
OnDockOver จะถูกทริกเกอร์เมื่อตัวควบคุมที่เชื่อมต่อ (DockableForm) ผ่านตัวควบคุมที่เชื่อมต่อ (LeftDockPanel) แหล่งที่มามีข้อมูลเกี่ยวกับการดำเนินการเชื่อมต่อและการลาก คุณลักษณะที่สำคัญอย่างหนึ่งคือ Control ซึ่งก็คือ DockableForm คุณลักษณะที่สำคัญอีกอย่างหนึ่งคือ DockRect ซึ่งเป็นตำแหน่งการเชื่อมต่อ X และ Y คือสถานะของ State คือ dsDragEnter, dsDragLeave dsDragMove ตามลำดับหมายถึงการลากเข้า การลากออกไป และการลากเพื่อย้าย การยอมรับหมายถึงว่าจะยอมรับการเชื่อมต่อหรือไม่ ฟังก์ชันหลักของเหตุการณ์ OnDockOver คือการควบคุมตำแหน่งการแสดงตัวอย่างของฟอร์มที่เทียบชิดขอบ มาเพิ่มโค้ดต่อไปนี้: