Windows สามารถแม็กมอนิเตอร์หลายตัวลงในเดสก์ท็อปเสมือนจริงทำให้เราสามารถใช้สิ่งนี้เพื่อออกแบบแอปพลิเคชันที่ใช้งานง่าย ตัวอย่างเช่น PowerPoint ใช้ประโยชน์อย่างเต็มที่จากจอภาพคู่ (แล็ปท็อปส่วนใหญ่รองรับมัน) . แล้วเราจะพัฒนาแอปพลิเคชันดังกล่าวได้อย่างไร? บทความนี้จะแสดงให้คุณเห็นว่าคุณใช้แอปพลิเคชันโดยใช้จอภาพหลายตัวโดยใช้ Delphi หรือไม่
Windows ยังรองรับวิธีการแสดงการโคลนนิ่งและแต่ละจอภาพจะส่งออกเนื้อหาเดียวกันซึ่งเหมาะสมสำหรับบางแอปพลิเคชัน แม้ว่าการ์ดกราฟิกบางตัวจะรองรับจอภาพสองตัว แต่ก็ไม่ได้เป็นแบบมัลติเพลย์อย่างแท้จริง แต่โหมดการแสดงผลความละเอียดสูงเสมือนจริง (เช่น 2048 × 768 หรือ 1024 × 1536) ซึ่งแสดงหน้าจอไปยังจอภาพสองจอผ่านการ์ดกราฟิก ทั้งสองโหมดการแสดงผลนี้ไม่ได้แนะนำ Zhongdian ในบทความนี้และพวกเขาก็ง่ายมากดังนั้นเราจะไม่ทำซ้ำอีก
Windows รองรับจอภาพสูงสุด 10 มอนิเตอร์และ Windows แมปตรวจสอบทั้งหมดลงในเดสก์ท็อปเสมือนจริงขนาดใหญ่ จอแสดงผลสามารถเข้าใจได้ว่าเป็นมุมมองบางส่วนของเดสก์ท็อป จอแสดงผลเหล่านี้สามารถจัดเรียงตามอำเภอใจในคุณสมบัติการแสดงผลตามตำแหน่งทางกายภาพของจอแสดงผล หากจอภาพถูกจัดเรียงอย่างผิดปกติบางส่วนของเดสก์ท็อปเสมือนอาจไม่ปรากฏบนจอภาพทั้งสอง เพื่อไม่ให้ฟอร์มปรากฏขึ้นระหว่างสองจอภาพ Windows ใช้การแสดงผลเป็นจอภาพหลัก เมื่อคอมพิวเตอร์เริ่มต้นกล่องโต้ตอบเข้าสู่ระบบจะปรากฏขึ้นในจอภาพหลัก การเริ่มต้นโปรแกรมส่วนใหญ่จะแสดงในจอภาพหลัก
ตามคำแนะนำข้างต้นมันไม่ยากที่จะหาแนวคิดที่สำคัญหลายประการ: เดสก์ท็อป, จอภาพ, จอภาพหลัก ฯลฯ ก่อนอื่นเราต้องหาแนวคิดเหล่านี้และความสัมพันธ์ก่อนหน้านี้ก่อน นี่คือกุญแจสำคัญในการเรียนรู้วิธีการพัฒนาของแอปพลิเคชันหลายจอแสดงผล เมื่อคุณเข้าใจแนวคิดเหล่านี้ส่วนอื่น ๆ จะเข้าใจง่ายมาก
เดสก์ท็อปหมายถึงพื้นที่ตรรกะที่ Windows สามารถแสดงได้ ในความเป็นจริงสามารถแสดงแบบฟอร์มนอกเดสก์ท็อป อย่างไรก็ตามนี่ไม่ได้หมายความว่าทุกส่วนของเดสก์ท็อปจะแสดงบนจอภาพบางอย่าง (เหตุผลดังกล่าวได้กล่าวไว้ก่อนหน้านี้)
เดสก์ท็อปเป็นพื้นที่สี่เหลี่ยมผืนผ้าที่อธิบายขนาดของเดสก์ท็อปโดยพิกัดจุดยอด (บนซ้าย) และความกว้างและความสูง ทำไมคุณยังต้องการพิกัดจุดสุดยอด? เพราะพิกัดจุดยอดไม่ได้รับอนุญาต (0,0) แล้ว (0,0) อยู่ที่ไหน? มันเป็นเรื่องยาวดังนั้นลองทบทวนแนวคิดที่กล่าวถึงตอนนี้ก่อน - จอภาพหลัก Windows ต้องการให้โปรแกรมทั่วไปแสดงบนจอภาพหลักในตอนแรกเพราะผู้คนคุ้นเคยกับการให้ความสนใจกับจอภาพที่ใกล้เคียงที่สุด Windows ไม่สามารถบังคับให้ผู้ใช้ใช้จอภาพด้านซ้ายสุดเป็นจอภาพหลักเพื่อให้แอปพลิเคชันต้องกังวลเกี่ยวกับการคำนวณเพื่อแสดงตัวเองบนจอภาพหลัก อย่างไรก็ตามผู้ใช้ส่วนใหญ่มีจอมอนิเตอร์เพียงตัวเดียว (จอภาพสองตัวใช้พื้นที่มากเกินไป) และแอปพลิเคชันทั่วไปไม่ต้องการใช้ความพยายามอย่างมากในการคำนวณว่าจอภาพหลักอยู่ที่ไหน ดังนั้น Windows จึงเสนอวิธีแก้ปัญหาที่สมเหตุสมผล: ใช้พิกัดจุดสุดยอดของจอแสดงผลหลักเป็นต้นกำเนิดของระบบพิกัด ด้วยวิธีนี้โปรแกรมทั่วไปจำเป็นต้องพิจารณาปัญหาในสภาพแวดล้อมการตรวจสอบเดียว
จอภาพเป็นมุมมองบางส่วนของเดสก์ท็อป มันเหมือนกับการดูทิวทัศน์นอกหน้าต่างผ่านหน้าต่างยืนอยู่หน้าหน้าต่างที่แตกต่างกันคุณสามารถเห็นภาพที่แตกต่างกัน ในทำนองเดียวกันจอแสดงผลยังเป็นพื้นที่สี่เหลี่ยมผืนผ้าและขนาดของมันสามารถอธิบายได้ด้วยพิกัดจุดยอด (บน, ซ้าย) และความกว้างและความสูง พิกัด Vertex นั้นสัมพันธ์กับที่มาของระบบพิกัดเดสก์ท็อปนั่นคือจุดยอดของจอแสดงผลหลัก
แนวคิดของพื้นที่ทำงานค่อนข้างง่าย
Windows จัดเตรียมชุดของ API สำหรับการพัฒนาแอพพลิเคชั่นหลายภาพ VCL ห่อหุ้ม APIs เหล่านี้และรวมเข้ากับเฟรมเวิร์กทั้งหมดอย่างเป็นธรรมชาติทำให้ง่ายต่อการพัฒนาแอปพลิเคชันหลายภาพ ต่อไปนี้เป็นเนื้อหาที่เกี่ยวข้อง
VCL ที่คุ้นเคยที่สุดอาจเป็น tcustomform ซึ่งเป็นคลาสพื้นฐานของทุกรูปแบบ คุณสมบัติตำแหน่งของ tcustomform ใช้เพื่อตั้งค่าตำแหน่งจริงของแบบฟอร์ม ของจอแสดงผลหลัก; หากคุณสมบัตินี้ถูกตั้งค่าเป็น podesktopcenter และโปรแกรมจะทำงานบนระบบที่มีจอภาพหลายจอจากนั้นหน้าต่างนี้จะปรากฏขึ้นระหว่างจอภาพทั้งสองทำให้เกิดปัญหาที่ไม่จำเป็นต่อผู้ใช้ ดังนั้นแม้ว่าโปรแกรมของเราจะไม่ได้รับการออกแบบมาสำหรับการแสดงหลายรูปแบบค่านี้ควรได้รับการจัดการอย่างระมัดระวัง คุณสมบัติอื่นคือ defaultMonitor ซึ่งมีฟังก์ชั่นที่คล้ายกันในการวางตำแหน่งซึ่งกำหนดว่าใดที่ตรวจสอบหน้าต่างจะปรากฏขึ้นในขั้นต้น มันมีสี่ค่าทางเลือก: dmdesktop, dmprimary, dmmainform และ dmactiveform ความหมายของพวกเขามีดังนี้:
ค่า | ความหมาย |
dmdesktop | ไม่มีการรักษาพิเศษ |
dmprimary | แสดงแบบฟอร์มบนจอภาพแรก นี่เป็นกับดักอีกอันหนึ่งของจอภาพหลักและในความเป็นจริงมันหมายถึงหน้าจอมอนิเตอร์ [0] จอภาพ |
dmmainform | แสดงแบบฟอร์มไปยังจอภาพที่อยู่ในรูปแบบหลัก |
dmactiveform | แสดงแบบฟอร์มไปยังจอมอนิเตอร์ที่มีแบบฟอร์มที่ใช้งานอยู่บนเดสก์ท็อป |
TCUSTOMFORM ยังมีการตรวจสอบคุณสมบัติสามัญแบบอ่านอย่างเดียว (โดยไม่ต้องเผยแพร่) ซึ่งให้การอ้างอิงเพื่อเข้าถึงอินสแตนซ์การแสดงผลที่ฟอร์มอยู่
แล้วคุณจะย้ายแบบฟอร์มระหว่างจอแสดงผลที่แตกต่างกันได้อย่างไร? นี่ไม่ใช่เรื่องยากคุณอาจคิดว่ามันเช่นกัน นี่คือสองวิธี:
ก่อนอื่นคุณสามารถตั้งค่าด้านบนและด้านซ้ายของ tcustomform เพื่อแสดงแบบฟอร์มได้ทุกที่บนเดสก์ท็อป ดังที่ได้กล่าวไว้ก่อนหน้านี้เดสก์ท็อปประกอบด้วยจอภาพทั้งหมด พวกเขามีระบบพิกัดร่วมกันดังนั้นตำแหน่งของแบบฟอร์มสามารถกำหนดได้ตามตำแหน่งตรรกะของจอแสดงผล คำถามตอนนี้คือวิธีการรับตำแหน่งเชิงตรรกะและขนาดของแต่ละจอภาพซึ่งจะมีการแนะนำในภายหลัง
ประการที่สองคุณสามารถเรียกใช้วิธีการที่สามารถมองเห็นได้ของ tcustomform เพื่อแสดงแบบฟอร์มไปยังจอแสดงผลที่ระบุอย่างเต็มที่ วิธีนี้สามารถใช้เพื่อป้องกันไม่ให้หน้าต่างแสดงส่วนหนึ่งของสองจอภาพ
เราเพิ่งถามคำถาม: วิธีรับตำแหน่งเชิงตรรกะและขนาดของจอภาพแต่ละตัว เพื่อที่จะตอบคำถามนี้เราต้องแนะนำหมวดหมู่อื่น: TSCREEN และ TMONITOR
Tscreen อธิบายข้อมูลบางอย่างที่เกี่ยวข้องกับอุปกรณ์แสดงผลและเราส่วนใหญ่เกี่ยวข้องกับข้อมูลที่เกี่ยวข้องกับตำแหน่งเชิงตรรกะและขนาดของจอแสดงผล ด้านอื่น ๆ สามารถพบได้ในเอกสารของ Delphi เมื่อโปรแกรมกำลังทำงาน VCL จะสร้างอินสแตนซ์ของ Tscreen โดยอัตโนมัติ - ตัวแปรทั่วโลกดังนั้นโดยปกติแล้วโปรแกรมไม่จำเป็นต้องสร้างอินสแตนซ์ Tscreen
Tscreen มีชุดของคุณสมบัติที่มีรูปร่างเหมือนเดสก์ท็อป*ซึ่งอธิบายขนาดของเดสก์ท็อปทั้งหมดและพิกัดของแต่ละจุดสุดยอด นอกจากนี้ยังมีคุณสมบัติจำนวนมากที่มีความสำคัญอย่างยิ่งต่อการพัฒนาแอพพลิเคชั่นหลายผู้ตรวจสอบ: MonitorCount และ Monitors ผ่านคุณสมบัติทั้งสองนี้เราสามารถระบุอินสแตนซ์ทั้งหมดของจอภาพ (tmonitors) ในระบบ
ในบรรดาคุณสมบัติมากมายของ Tscreen เราจะพบคุณสมบัติทั้งสอง: ความสูงและความกว้าง ระวังโดยเฉพาะอย่างยิ่งที่ไม่หมายถึงขนาดของเดสก์ท็อปทั้งหมด แต่ถึงความสูงและความกว้างของจอแสดงผลหลัก นี่เป็นเรื่องง่ายมากที่จะทำให้ผู้คนรู้สึกภาพลวงตาว่าพวกเขาไม่สามารถนึกถึงขนาดของเดสก์ท็อปทั้งหมดได้ ในทำนองเดียวกันมีชุดของคุณสมบัติที่มีรูปร่างเหมือน worwarea*ซึ่งอธิบายขนาดของพื้นที่ทำงานของจอแสดงผลหลักและพิกัดของแต่ละจุดสุดยอด คุณคิดว่ามีอะไรขาดหายไปหรือไม่? เหตุใดคุณสมบัติของตำแหน่งสัมพัทธ์ของจอภาพหลักจึงไม่ได้รับ? เหตุผลดังกล่าวก่อนหน้านี้: Windows ใช้มุมซ้ายบนของจอภาพหลักเป็นต้นกำเนิดของระบบพิกัดดังนั้นตำแหน่งสัมพัทธ์ของจอภาพหลักจะต้องเป็น (0, 0)
นอกเหนือจากคุณสมบัติเหล่านี้เรายังจะแนะนำฟังก์ชั่นสมาชิกสามคนของ TSCREEN: MonitorFrompoint, MonitorFromRect และ MonitorFromWindow ตามชื่อหมายถึงพวกเขาเป็นอินสแตนซ์ของจอแสดงผลที่พิกัดพื้นที่บางแห่งและหน้าต่างบางบานอยู่ มันอาจใช้ในการพัฒนาจริง
ดีที่สุดมาดูคลาส TMonitor มันห่อหุ้มคุณสมบัติที่เกี่ยวข้องของการแสดงผลทางกายภาพ-ทั้งหมดอ่านอย่างเดียว ตารางต่อไปนี้อธิบายถึงความหมายของคุณสมบัติเหล่านี้สั้น ๆ ซึ่งมีประโยชน์มากสำหรับการเขียนแอปพลิเคชันหลายจอแสดงผล:
คุณสมบัติ | อธิบาย |
รับมือ | รับที่จับ Windows ของจอภาพนี้ |
monitornum | รับหมายเลขจอภาพ |
หลัก | ได้รับว่าจอภาพเป็นจอภาพหลักหรือไม่ และหลักที่มีจอมอนิเตอร์เพียงตัวเดียวเป็นจริง |
สูงสุด | รับขอบเขตบนของจอภาพ |
ซ้าย | รับเส้นขอบด้านซ้ายของจอภาพ |
ความสูง | รับความสูงของจอภาพ |
ความกว้าง | รับความกว้างของจอภาพ |
ตั้งขอบเขต | รับพื้นที่เดสก์ท็อปที่สอดคล้องกันของจอภาพซึ่งเทียบเท่ากับคุณสมบัติสี่ประการข้างต้น |
เขียน | รับพื้นที่ที่สอดคล้องกับเดสก์ท็อปของพื้นที่ทำงานของจอภาพ |
หลังจากความเข้าใจที่ชัดเจนของ tscreen และ tmonitor ปัญหาก่อนหน้านี้จะได้รับการแก้ไขตามธรรมชาติ เมื่อมาถึงจุดนี้บทความนี้ได้ครอบคลุมความรู้ทั้งหมดที่จำเป็นในการพัฒนาแอพพลิเคชั่นที่มีหลายละคร ฉันเชื่อว่าคุณสามารถใช้ความรู้นี้เพื่อพัฒนาผลิตภัณฑ์ซอฟต์แวร์ที่ใช้งานได้จริง
ภาคผนวก: คุณสามารถดาวน์โหลดตัวอย่างเพื่อช่วยให้เข้าใจบทความนี้