में रनटाइम डीपीआई परिवर्तन के बाद मेनू स्केलिंग को संभालने के लिए कैसे करें जब रनटाइम डीपीआई स्विचिंग के लिए समर्थन फॉर्म वर्ग में जोड़ा गया था, मेनू जैसे मूल यूआई तत्वों पर कोई विचार नहीं दिया गया था।डेल्फी सिएटल
मेनू ड्राइंग मूल रूप से टूटा हुआ है क्योंकि यह स्क्रीन पर निर्भर करता है। मेनूफॉन्ट, जो सिस्टम विस्तृत मीट्रिक है, मॉनीटर के लिए विशिष्ट नहीं है। इसलिए जब फॉर्म को अपेक्षाकृत आसानी से स्केल किया जा सकता है, तो मेनू पर प्रदर्शित होने वाले मेनू केवल सही तरीके से काम करते हैं, अगर स्केलिंग स्क्रीन ऑब्जेक्ट में जो भी मीट्रिक लोड हो जाती है उससे मिलान करने के लिए होता है।
यह मुख्य मेनू बार, इसके पॉपअप मेनू और फ़ॉर्म पर सभी पॉपअप मेनू के लिए एक समस्या है। यदि इनमें से कोई भी सिस्टम मॉनिटर की तुलना में एक अलग डीपीआई के साथ मॉनिटर में स्थानांतरित नहीं किया जाता है तो इनमें से कोई भी स्केल नहीं है।
वास्तव में यह काम करने का एकमात्र तरीका वीसीएल को ठीक करना है। बहु-डीपीआई को निकालने के लिए एम्बरकेडरो की प्रतीक्षा करना वास्तव में एक विकल्प नहीं है।
वीसीएल कोड को देखते हुए, मूल मुद्दा यह है कि स्क्रीन.मेनूफॉन्ट प्रॉपर्टी को मेन्यू कैनवास को असाइन किया गया है, जिस पर मॉनिटर के लिए उपयुक्त फ़ॉन्ट चुनने के बजाय मेनू दिखाई देगा। प्रभावित कक्षाएं स्क्रीन के लिए खोज कर पाई जा सकती हैं। वीसीएल स्रोत में मेनूफॉन्ट।
इस सीमा के आसपास काम करने का सही तरीका क्या है, इसमें शामिल वर्गों को पूरी तरह से फिर से लिखने के बिना?
मेरा पहला झुकाव मेन्यू पॉपअप का ट्रैक रखने के लिए एक चक्कर लगाने का उपयोग करना है और स्क्रीन को ओवरराइड करना है। मेन्यूफॉन्ट संपत्ति जब इसे मेनू सेट अप करने के लिए उपयोग किया जा रहा है। ऐसा लगता है कि एक हैक की बहुत अधिक है।
क्या आप वाकई वीसीएल हैं? क्या नोटपैड यह सही है? –
नोटपैड एक उच्च-डीपीआई जागरूक ऐप नहीं है इसलिए मैं इसका परीक्षण नहीं कर सकता। मुझे यकीन है कि यह वीसीएल है क्योंकि यह मेनू के अपने चित्र को संभालने वाला है, और मैंने कुछ कोड को फिर से लिखकर प्रयोग किया। समस्या यह मुश्किल नहीं है, वास्तव में - जब पॉपअपमेनू डिफ़ॉल्ट tmenuitem माप और ड्राइंग के लिए कैनवास सेट करता है, तो यह स्क्रीन को मैन्यूफॉन्ट फ़ॉन्ट को कैनवास में निर्दिष्ट करता है, जो विंडोज़ से (सिस्टम, मेट्रिक्स) वास्तव में सिस्टम मेट्रिक्स का उपयोग कर रहा है मॉनीटर-विशिष्ट मीट्रिक। –
आप देखते हैं कि मुझे नहीं लगता कि यह वीसीएल है क्योंकि यह मेरे डेल्फी ऐप में भी सिस्टम खींचा मेनू के साथ होता है। आप ग्लिफ का उपयोग करके सिस्टम तैयार मेनू को मजबूर कर आसानी से जांच सकते हैं। –