Dragdrop เป็นวิธีที่รวดเร็วในการใช้งานหน้าต่าง ในฐานะนักพัฒนาตาม Windows
Delphi ยังรองรับการทำงานแบบลากและวางและฟังก์ชั่นการลากและวางของระบบแอปพลิเคชันนั้นสะดวกมากซึ่งสะท้อนให้เห็นอย่างแท้จริง
พลังและความสะดวกสบายของ Delphi
การควบคุมทั้งหมดที่จัดทำโดย Delphi (การควบคุมซึ่งสามารถรับโฟกัสอินพุตได้) สนับสนุนการดำเนินการลากและดร็อปและมี
คุณสมบัติการลากและวางที่สอดคล้องกันลากและวางเหตุการณ์และลากและวางวิธีการ ต่อไปเราจะแนะนำการสนับสนุนการลากและวางของการควบคุมก่อนจากนั้นให้
ขั้นตอนทั่วไปและตัวอย่างแอปพลิเคชันของการส่งการลากและดร็อป
9.1 การลากและวางการสนับสนุนสำหรับการควบคุม
ในการดำเนินการลากและดร็อปการควบคุมสามารถแบ่งออกเป็นสองประเภท: การควบคุมแหล่งที่มาและการควบคุมเป้าหมาย การควบคุมส่วนใหญ่สามารถใช้เป็นตัวควบคุมแหล่งที่มา
สามารถใช้เป็นตัวควบคุมเป้าหมาย แต่ยังมีการควบคุมบางอย่างที่สามารถรองรับหนึ่งในนั้นได้
9.1.1 การลากและวางคุณสมบัติ
มีคุณสมบัติการลากและวางหลักสองประการ:
● DragMode: โหมดลาก
พวกเขาทั้งหมดตั้งอยู่ในการควบคุมแหล่งลากและวาง DragMode ควบคุมผู้ใช้เมื่อกดบนตัวควบคุมในช่วงเวลาทำงาน
การควบคุมจะตอบสนองอย่างไรเมื่อเมาส์ลดลง หาก DragMode ถูกตั้งค่าเป็น dmautomatic จากนั้นเมื่อผู้ใช้กดเมาส์บนตัวควบคุม
DragMode เริ่มต้นโดยอัตโนมัติ
เพื่อตรวจสอบว่าการลากสามารถเริ่มต้นได้หรือไม่
Dragcursor ใช้เพื่อเลือกเคอร์เซอร์ที่แสดงเมื่อทำการลาก
ข้อกำหนดของอินเตอร์เฟสที่พบได้ทั่วไปในกระบวนการเขียนโปรแกรมควรได้รับการเคารพจากนักพัฒนา แต่บางครั้งเพื่อวัตถุประสงค์เฉพาะ
นักพัฒนายังสามารถกำหนดเคอร์เซอร์ของตัวเองให้กับ Dragcursor
9.1.2 เหตุการณ์ลากและวาง
มีเหตุการณ์การลากและวางหลักสามครั้ง:
● OnDragover: สร้างแรงบันดาลใจเมื่อลากโดย
● OnDragdrop: สร้างแรงบันดาลใจเมื่อลากและลดลง
● OnendDrop: สร้างแรงบันดาลใจเมื่อการลากสิ้นสุดลง
สองเหตุการณ์แรกได้รับการตอบสนองโดยการควบคุมเป้าหมายและเหตุการณ์หลังจะถูกตอบกลับโดยการควบคุมแหล่งที่มา
ฟังก์ชั่นหลักของเหตุการณ์ OnDragover คือการพิจารณาว่าการควบคุมนั้นเป็นที่ยอมรับได้หรือไม่เมื่อผู้ใช้วางการลากเข้าที่
พารามิเตอร์ของมันรวมถึง:
ที่มา: TOBJECT;
สถานะ: tDragState;
TDRAGSTATE เป็นประเภทการแจงนับที่แสดงถึงความสัมพันธ์ระหว่างรายการลากและดร็อปและการควบคุมเป้าหมาย
พิมพ์ tdragstate = (dsdragenter, dsdragleave, dsdragmove);
ความหมายของค่าต่าง ๆ มีดังนี้:
ตารางที่ 9.1 ค่าและความสำคัญของ dragstate
ความหมายของคุณค่า
Dsdragenter ลากวัตถุไปยังตัวควบคุมที่อนุญาตให้วัตถุที่ถูกลากลดลง เป็นสถานะเริ่มต้น
Dsdragleave ลากวัตถุออกไปจากตัวควบคุมที่อนุญาตให้วัตถุลากถูกทิ้ง
วัตถุ DSDragmove Drag เคลื่อนที่ภายในตัวควบคุมที่อนุญาตให้ Drag Object หล่น
ผู้ใช้สามารถใช้พารามิเตอร์ที่ให้ไว้เพื่อตรวจสอบว่าการลากที่ลดลงนั้นเป็นที่ยอมรับเช่น:
●ตัดสินประเภทการควบคุมต้นทาง:
ยอมรับ: = แหล่งที่มาคือ tlabel;
●ตัดสินวัตถุควบคุมแหล่งที่มา:
ยอมรับ: = (source = tabset1);
●ตัดสินตำแหน่งเคอร์เซอร์:
ดูกิจวัตรใน (9.2), (9.3)
●ผู้ตัดสินสถานะการลาก:
ถ้า (แหล่งที่มาคือ tlabel) และ (state = dsdragmove) แล้ว
เริ่มต้น Source.Dragicon: = 'new.ico';
จบ
อื่น
ยอมรับ: = เท็จ;
เมื่อยอมรับ = จริงการควบคุมเป้าหมายสามารถตอบสนองต่อเหตุการณ์ ondragdrop ซึ่งใช้เพื่อพิจารณาว่าโปรแกรมหลังจากการลากจะลดลง
วิธีจัดการกับมัน
พารามิเตอร์ของกระบวนการประมวลผลเหตุการณ์ ondragdrop รวมถึงการควบคุมแหล่งที่มาและตำแหน่งเคอร์เซอร์ ข้อมูลนี้สามารถใช้สำหรับการประมวลผล
การยืนยัน
เหตุการณ์ onendDrag ได้รับการตอบสนองโดยการควบคุมแหล่งที่มาหลังจากการดำเนินการลากเสร็จสมบูรณ์และใช้โดยการควบคุมต้นทางเพื่อดำเนินการที่สอดคล้องกัน
จัดการกับ. จุดสิ้นสุดของการดำเนินการลากรวมทั้งการลากและดร็อปที่ได้รับการยอมรับและผู้ใช้จะปล่อยมันลงในการควบคุมที่ไม่สามารถลดลงได้
วางเมาส์ พารามิเตอร์ของกระบวนการประมวลผลเหตุการณ์นี้รวมถึงการควบคุมเป้าหมาย (เป้าหมาย) และพิกัดของตำแหน่งการตก ถ้า
Target = Nil หมายความว่ารายการที่ลากไม่ได้รับการยอมรับจากการควบคุมใด ๆ
ในการเคลื่อนย้ายการลากและวางการดำเนินการคัดลอกแบบลากแล้ววางแนะนำในส่วนที่ 3 หากการดำเนินการสำเร็จกล่องรายการไฟล์จะแสดงอยู่ด้านล่าง
ควรอัปเดตเนื้อหาที่แสดง โปรแกรมต่อไปนี้ใช้เพื่อใช้ฟังก์ชั่นนี้
ขั้นตอน tfmform.fileListendDrag (ผู้ส่ง, เป้าหมาย: tobject; x, y: จำนวนเต็ม);
เริ่ม
ถ้าเป้าหมาย <> ไม่มี fileList.Update;
จบ;
นอกเหนือจากเหตุการณ์ทั้งสามที่อธิบายไว้ข้างต้นแล้วยังมีเหตุการณ์อื่น Onmousedown ซึ่งมักใช้สำหรับการตอบสนองแบบลากและวาง
แม้ว่า Onmousedown ไม่ใช่เหตุการณ์ลากและวางพิเศษ แต่จุดเริ่มต้นของการลากในโหมดแมนนวลก็อยู่ที่นี่
ดำเนินการในระหว่างกระบวนการประมวลผลเหตุการณ์
9.1.3 วิธีการลากและวาง
มีสามวิธีในการลากและวาง:
● Begindrag: เริ่มการลากในโหมดแมนนวล
● enddrag:
จบการลาก
●การลาก: กำหนดว่ามีการควบคุมการควบคุม
ทั้งสามวิธีใช้โดยการควบคุมแหล่งที่มา
เมื่อ DragMode ถูกตั้งค่าเป็น DMManual การลากจะต้องเรียกใช้วิธีการเริ่มต้นของตัวควบคุมเพื่อเริ่มต้น
Begindrag มีพารามิเตอร์บูลีนทันที หากพารามิเตอร์อินพุตเป็นจริงให้ลากเพื่อเริ่มต้นทันที
เปลี่ยนเป็นการตั้งค่าของ Dragcursor หากพารามิเตอร์อินพุตเป็นเท็จจนกว่าผู้ใช้จะย้ายเคอร์เซอร์ตามระยะทางที่กำหนด
(5 พิกเซล) ก่อนเปลี่ยนเคอร์เซอร์และเริ่มลาก สิ่งนี้ช่วยให้สามารถควบคุมเหตุการณ์ onclick ได้โดยไม่ต้องเริ่มต้น
ลากการดำเนินการ
วิธี enddrag ยกเลิกสถานะที่ถูกลากของวัตถุ มันมีพารามิเตอร์บูลีนลดลง หากตั้งค่าการวาง
เป็นจริงวัตถุที่ถูกลากจะถูกทิ้งไว้ในตำแหน่งปัจจุบัน (ไม่ว่าจะเป็นที่ยอมรับได้จะถูกกำหนดโดยการควบคุมเป้าหมาย)
หากเท็จการลากจะถูกยกเลิกในสถานที่
โปรแกรมต่อไปนี้แสดงให้เห็นว่าการลากถูกยกเลิกเมื่อลากลงในแผงควบคุม
ขั้นตอน TFORM1.PANEL1DRAGOVER (ผู้ส่ง, ที่มา: tObject; x, y: จำนวนเต็ม;
รัฐ: tdragstate;
เริ่ม
ยอมรับ: = เท็จ;
ถ้า (แหล่งที่มาคือ tlabel) และ (state = dsdragenter) แล้ว
(แหล่งที่มาเป็น tlabel) .enddrag (เท็จ);
จบ;
วิธีการ Draging กำหนดว่ามีการควบคุมการควบคุมหรือไม่ ในตัวอย่างต่อไปนี้เมื่อผู้ใช้ลากช่องทำเครื่องหมายอื่น
เมื่อหน้าต่างเปลี่ยนเป็นสีที่แตกต่างกัน
ขั้นตอน tform1.formactivate (ผู้ส่ง: tobject);
เริ่ม
ช่องทำเครื่องหมาย 1.Dragmode: = dmautomatic;
CheckBox2.DragMode: = dmautomatic;
ช่องทำเครื่องหมายที่ 3dragmode: = dmautomatic;
จบ;
โพรซีเดอร์ TFORM1.FormDragover (ผู้ส่งที่มา: tobject; x, y: จำนวนเต็ม;
รัฐ: tdragstate;
เริ่ม
หากช่องทำเครื่องหมาย
สี: = Claqua;
ถ้า checkbox2.dragging แล้ว
สี: = clyellow;
หากช่องทำเครื่องหมาย
สี: = cllime;
จบ;